Ansible 基礎配置(Ⅱ)
阿新 • • 發佈:2017-11-09
ansible 基礎配置(ⅱ)
1 ansible安裝包和管理服務
安裝包操作如下:
[root@chy ~]# ansible chy01 -m yum -a "name=httpd"//安裝一個包 chy01 | SUCCESS => { "changed": false, "failed": false, "msg": "", "rc": 0, "results": [ "httpd-2.4.6-67.el7.centos.6.x86_64 providing httpd is already installed" ] } [root@chy ~]# ansible chy01 -m yum -a "name=httpd state=removed" //卸載一個包直接後面增加state=removed chy01 | SUCCESS => { "changed": true, "failed": false, "msg": "", "rc": 0, "results": [ "已加載插件:fastestmirror\n正在解決依賴關系\n--> 正在檢查事務\n---> 軟件包 httpd.x86_64.0.2.4.6-67.el7.centos.6 將被 刪除\n--> 正在處理依賴關系 httpd = 2.4.6-67.el7.centos.6,它被軟件包 httpd-devel-2.4.6-67.el7.centos.6.x86_64 需要\n--> 正在檢查事務\n---> 軟件包 httpd-devel.x86_64.0.2.4.6-67.el7.centos.6 將被 刪除\n--> 解決依賴關系完成\n\n依賴關系解決\n\n================================================================================\n Package 架構 版本 源 大小\n================================================================================\n正在刪除:\n httpd x86_64 2.4.6-67.el7.centos.6 @updates 9.4 M\n為依賴而移除:\n httpd-devel x86_64 2.4.6-67.el7.centos.6 @updates 749 k\n\n事務概要\n================================================================================\n移除 1 軟件包 (+1 依賴軟件包)\n\n安裝大小:10 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n 正在刪除 : httpd-devel-2.4.6-67.el7.centos.6.x86_64 1/2 \n 正在刪除 : httpd-2.4.6-67.el7.centos.6.x86_64 2/2 \n 驗證中 : httpd-2.4.6-67.el7.centos.6.x86_64 1/2 \n 驗證中 : httpd-devel-2.4.6-67.el7.centos.6.x86_64 2/2 \n\n刪除:\n httpd.x86_64 0:2.4.6-67.el7.centos.6 \n\n作為依賴被刪除:\n httpd-devel.x86_64 0:2.4.6-67.el7.centos.6 \n\n完畢!\n" ] } [root@chy ~]# ansible chy01 -m service -a "name=httpd state=started enabled=no" //啟動一個服務,state=後面是啟動, enabled後跟是否開機啟動 [root@chy01 ~]# ps aux |grep httpd //查看已經開機啟動 root 4588 0.0 0.3 221936 4984 ? Ss 02:28 0:00 /usr/sbin/httpd -DFOREGROUND apache 4589 0.0 0.1 221936 2960 ? S 02:28 0:00 /usr/sbin/httpd -DFOREGROUND apache 4590 0.0 0.1 221936 2960 ? S 02:28 0:00 /usr/sbin/httpd -DFOREGROUND apache 4591 0.0 0.1 221936 2960 ? S 02:28 0:00 /usr/sbin/httpd -DFOREGROUND apache 4592 0.0 0.1 221936 2960 ? S 02:28 0:00 /usr/sbin/httpd -DFOREGROUND apache 4593 0.0 0.1 221936 2960 ? S 02:28 0:00 /usr/sbin/httpd -DFOREGROUND root 4617 0.0 0.0 112648 960 pts/0 R+ 02:30 0:00 grep --color=auto httpd
Ansible文檔的使用
[root@chy ~]# ansible-doc -l //查看所有的模塊 [root@chy ~]# ansible-doc service //針對一個模塊做一個查詢
2 使用ansible playbook
- playbook是把模塊寫入到配置文件裏
操作如下
[root@chy ~]# cd /etc/ansible/ [root@chy ansible]# vi test.yml --- - hosts: chy01 remote_user: root tasks: - name: test_playbook shell: touch /tmp/lishiming.txt 語法解釋: --- //第一行需要有三個杠 - hosts: chy01 //指定了對哪些主機進行參作,如果是多臺機器可以用逗號作為分隔,也可以使用主機組,在/etc/ansible/hosts裏定義 remote_user: root //指定了使用什麽用戶登錄遠程主機操作(remote_user有4個空格 tasks://指定了一個任務 - name: test_playbook //是對任務的描述,在執行過程中會打印出來(-name之前有4個空格) shell: touch /tmp/lishiming.txt //shell是ansible模塊名字 (空格要註意) [root@chy01 ~]# ls -l /tmp/lishiming.txt //在另一臺機器上查看成功 -rw-r--r-- 1 root root 0 Nov 9 05:12 /tmp/lishiming.txt
3 playbook裏的變量
playbook的創建用戶操作
[root@chy ansible]# vi create_user.yml --- - name: create_user hosts: chy01 user: root gather_facts: false // vars: - user: "test" tasks: - name: create user user: name="{{ user }}" 說明:說明:name參數對該playbook實現的功能做一個概述,後面執行過程中,會打印 name變量的值 ,可以省略;gather_facts參數指定了在以下任務部分執行前,是否先執行setup模塊獲取主機相關信息,這在後面的task會使用到setup獲取的信息時用到;vars參數,指定了變量,這裏指字一個user變量,其值為test ,需要註意的是,變量值一定要用引號引住;user提定了調用user模塊,name是user模塊裏的一個參數,而增加的用戶名字調用了上面user變量的值。 [root@chy ansible]# ansible-playbook create_user.yml //執行過程 PLAY [create_user] *************************************************************************************************************** TASK [create user] *************************************************************************************************************** changed: [chy01] PLAY RECAP *********************************************************************************************************************** chy01 : ok=1 changed=1 (這裏如果客戶機沒有用戶則是1,如果是0則代表沒有執行成功,就要考慮客戶機是否創建了用戶) unreachable=0 failed=0
4 playbook循環
[root@chy ansible]# vi while.yml --- - hosts: chy01 user: root tasks: - name: change mode for files file: path=/tmp/{{ item }} mode=600 with_items: - 1.txt - 2.txt - 3.txt 說明: with_items為循環的對象 [root@chy01 ~]# ls -l /tmp/ //查看執行的結果 total 44 -rw-r--r-- 1 root root 0 Nov 7 05:33 111.txt drwxr-xr-x 2 root root 4096 Nov 7 05:30 123 drwxr-xr-x 2 root root 4096 Nov 7 05:03 1233 -rw-r--r-- 1 root root 2182 Nov 7 05:28 123.txt -rw------- 1 root root 0 Nov 9 06:06 1.txt -rw------- 1 root root 0 Nov 9 06:06 2.txt -rw------- 1 root root 0 Nov 9 06:06 3.txt
5 playbook中的條件判斷
- 判斷,類似於shell中的if語句,當滿足情況才回去執行,不滿足就輸出報錯,playbook也是這個道理。
[root@chy ansible]# vi when.yml --- - hosts: chy01 user: root gather_facts: True tasks: - name: use when shell: touch /tmp/when.txt when: ansible_ens33.ipv4.address == "192.168.212.11" //這個ip是客戶機的ip地址 //以ansible_ens33.ipv4.address為判斷對象(ansible_ens33是最上面一級,ipv4是第二級),且值為 "192.168.212.11" 的機器篩選出來。 說明:[root@chy ansible]# ansible chy01 -m setup //可以查看到所有的facter信息 [root@chy ansible]# ansible-playbook when.yml PLAY [testhost] ****************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************** ok: [chy02] ok: [chy01] TASK [use when] ****************************************************************************************************************** skipping: [chy02] [WARNING]: Consider using file module with state=touch rather than running touch changed: [chy01] PLAY RECAP *********************************************************************************************************************** chy01 : ok=2 changed=1 unreachable=0 failed=0 chy02 : ok=1 changed=0 unreachable=0 failed=0 如上一般用在的場合是:目錄和文件是否在某臺機器上面。
6 playbook中的handlers
執行task之後,服務器發生變化之後要執行的一些操作,比如我們修改了配置文件後,需要重啟一下服務:
[root@chy ansible]# vi handlers.yml --- - name: handlers test hosts: chy01 user: root tasks: - name: copy file copy: src=/etc/passwd dest=/tmp/aaa.txt notify: test handlers handlers: - name: test handlers shell: echo "111111" >> /tmp/aaa.txt 說明,只有copy模塊真正執行後,才會去調用下面的handlers相關的操作。 也就是說如果說假如/etc/passwd這個文件不存在 copy執行後是錯誤的,然後並不會去執行handlers裏面的shell相關命令。 [root@chy ansible]# ansible-playbook handlers.yml PLAY [handlers test] ************************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************** ok: [chy01] TASK [copy file] ***************************************************************************************************************** changed: [chy01] RUNNING HANDLER [test handlers] ************************************************************************************************** changed: [chy01] PLAY RECAP *********************************************************************************************************************** chy01 : ok=3 changed=2 unreachable=0 failed=0 [root@chy01 ~]# tail /tmp/aaa.txt //查看結果 gitlab-psql:x:991:988::/var/opt/gitlab/postgresql:/bin/sh gitlab-prometheus:x:990:987::/var/opt/gitlab/prometheus:/bin/sh lf:x:1003:1003::/home/lf:/bin/bash jump:x:1004:1004::/home/jump:/bin/bash chy:x:1005:1005::/home/chy:/bin/bash chy1:x:1006:1006::/home/chy1:/bin/bash aaa:x:1007:1007::/home/aaa:/bin/bash apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin saslauth:x:989:76:Saslauthd user:/run/saslauthd:/sbin/nologin 111111 這種比較適合配置文件發生更改後(如果配置成功),就會啟動重啟服務的操作。
希望看過的童鞋多多指教,謝謝!
Ansible 基礎配置(Ⅱ)