ansible<3>
- 2020 年 1 月 14 日
- 筆記
用ansible在客戶端上創建一個用戶,用戶名為test,腳本語言如下:
[root@master ansible]# vim 1.yml --- - name: create_user /說明程式碼的作用。可以省略 hosts: 192.168.1.112 /指定主機名 user: root /指明用戶 gather_facts: false /是否獲取客戶機的相關資訊 vars: /我們定義一個參數 - user: "test" tasks: - name: create user user: name="{{ user }}"執行過程:
[root@master ansible]# ansible-playbook 1.yml PLAY [create_user] ************************************************************ skipping: no hosts matched PLAY RECAP ******************************************************************** [root@master ansible]# vim 1.yml [root@master ansible]# ansible-playbook 1.yml PLAY [create_user] ************************************************************ TASK: [create user] *********************************************************** changed: [192.168.1.112] PLAY RECAP ******************************************************************** 192.168.1.112 : ok=1 changed=1 unreachable=0 failed=0 [root@master ansible]#
在客戶端檢查一下:
[root@client ~]# grep test /etc/passwd test:x:500:500::/home/test:/bin/bash
ansible-playbook中的循環:
--- - hosts: 192.168.1.112 user: root tasks: - name: change mode for file file: path=/root/{{ item }} mode=600 /這裡用到了ansible的一個模組file! with_items: - 1.tst - 2.tst - 3.tst然後執行一下:
[root@master ansible]# ansible-playbook 1.yml PLAY [192.168.1.112] ********************************************************** GATHERING FACTS *************************************************************** ok: [192.168.1.112] TASK: [change mode for file] ************************************************** changed: [192.168.1.112] => (item=1.tst) changed: [192.168.1.112] => (item=2.tst) changed: [192.168.1.112] => (item=3.tst) PLAY RECAP ******************************************************************** 192.168.1.112 : ok=2 changed=1 unreachable=0 failed=0
最後在客戶端檢查一下,看文件的許可權是否已經更改,注意這裡的ansible不會自動創建文件,因此要改文件的許可權的文件,必須已經存在:
[root@client ~]# ll total 48 -rw------- 1 root root 0 Mar 9 04:40 1.tst -rw------- 1 root root 0 Mar 9 04:40 2.tst -rw------- 1 root root 0 Mar 9 04:40 3.tst -rw-------. 1 root root 1226 Mar 5 05:05 anaconda-ks.cfg -rw-r--r--. 1 root root 393 Mar 7 04:37 id_rsa.pub -rw-r--r--. 1 root root 26210 Mar 5 05:05 install.log -rw-r--r--. 1 root root 7572 Mar 5 05:04 install.log.syslog [root@client ~]#
可以用playbook實現條件判斷的功能:
[root@master ansible]# vim 1.yml --- - hosts: testhosts user: root gather_facts: True /抓取系統資訊,為條件判斷做準備 tasks: - name: use when shell: touch /tmp/when.txt when: ansible_hostname == "client" /運用when這個模組,當這個主機名為client時,創建文件! ~
看一下執行的情況:
[root@master ansible]# ansible-playbook 1.yml PLAY [testhosts] ************************************************************** GATHERING FACTS *************************************************************** ok: [127.0.0.1] ok: [192.168.1.112] TASK: [use when] ************************************************************** skipping: [127.0.0.1] /忽略過不符合要求的主機 changed: [192.168.1.112] PLAY RECAP ******************************************************************** 127.0.0.1 : ok=1 changed=0 unreachable=0 failed=0 192.168.1.112 : ok=2 changed=1 unreachable=0 failed=0
在客戶端檢查一下,playbook命令的執行的情況:
[root@client ~]# ll /tmp/when.txt /已經創建了文件! -rw-r--r-- 1 root root 0 Mar 9 05:28 /tmp/when.txt [root@client ~]#
playbook的handlers應用:
執行完tasks的任務之後,伺服器的配置發生了一些變化,但是我們仍需要操作,這時候就可以調用handlers:譬如,我們修改了nginx的配置文件,之後需要它重啟,這時候我們就可以調用handlers:
[root@master ansible]# vim 1.yml --- - hosts: 192.168.1.112 name: handlers test tasks: - name: copy file copy: src=/etc/passwd dest=/tmp/aaa.txt /copy了一個文件,但我們又需要把文件給重定向! notify: test handlers /notify的作用就是調用handlers模組 handlers: - name: test handlers shell: echo "11111" > /tmp/aaa.txt
ansible的copy模組和rsync的功能比較像,若目的地址原來就有一個目的文件,ansible會判斷內容是否相同,若相同則不會覆蓋原來就有的文件,若內容不相同則會完成copy動作!
執行過程:
[root@master ansible]# ansible-playbook 1.yml PLAY [handlers test] ********************************************************** GATHERING FACTS *************************************************************** ok: [192.168.1.112] TASK: [copy file] ************************************************************* changed: [192.168.1.112] NOTIFIED: [test handlers] ***************************************************** changed: [192.168.1.112] PLAY RECAP ******************************************************************** 192.168.1.112 : ok=3 changed=2 unreachable=0 failed=0
在客戶端檢測一下:是否有文件copy,並且還被重定向!
[root@client ~]# ll /tmp/when.txt -rw-r--r-- 1 root root 0 Mar 9 05:28 /tmp/when.txt [root@client ~]# cat /tmp/aaa.txt 11111 [root@client ~]#

