一、playbook循環
全椒網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、響應式網站開發等網站項目制作,到程序開發,運營維護。創新互聯公司2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。
#?vi?/etc/ansible/while.yml?//加入如下內容 --- -?hosts:?yw02 ??user:?root ??tasks: ????-?name:?change?mode?for?files ??????file:?path=/tmp/{{?item?}}?mode=600 ??????with_items: ????????-?1.txt ????????-?2.txt ????????-?3.txt
說明: 這里用到了一個file模塊,后面是路徑,如果是一個文件,可以寫/tmp/1.txt,多個文件,可以用一個循環,with_items為循環的對象
執行:ansible-playbook while.yml
報錯:對方機器沒有這三個文件,在mode前增加state=touch,創建一個。
再執行:ansible-playbook while.yml
執行成功,先創建,再定義它的權限。
二、playbook中的條件判斷
#?vi?/etc/ansible/when.yml?//加入如下內容 --- -?hosts:?testhost ??user:?root ??gather_facts:?True ??tasks: ????-?name:?use?when ??????shell:?touch?/tmp/when.txt ??????when:?ansible_ens33.ipv4.address?==?"192.168.149.131"
說明:
這里hosts寫testhost,寫一臺機器就沒有意義了。
這里收集了facts,這行也可以刪除,默認就是收集,接下來要用到它了。
ansible yw02 -m setup 可以查看到所有的facter信息。
when就是一個條件判斷,當這個條件成立的時候,才會執行這個shell。
從facts收集的信息里找出ansible_ens33下的ipv4的address是否為該IP,條件成立,則執行shell,如果沒有這個條件,則會直接執行。
當有分級時,每一級下面的要打點,沒有分級就直接寫等號了。
when不僅僅是針對facts,還可以針對其他情況,比如判斷文件、目錄是否存在。
"ansible_facts":????????????//最總的一級 "ansible_all_ipv4_addresses":[??//判斷條件從這一級開始,這里是一個數組,把所有的ipv4列出來,但是它下面還有ipv6有兩個,要判斷的話得需判斷兩個,所以這不是想要的。 ????????????"192.168.98.134",? ????????????"192.168.149.132" ????????],? ... "ansible_ens33":?{ ????????????"active":?true,? ????????????"device":?"ens33",? ... ?"hw_timestamp_filters":?[],? ????????????"ipv4":?{ ????????????????"address":?"192.168.149.132",? ????????????????"broadcast":?"192.168.149.255",? ????????????????"netmask":?"255.255.255.0",? ????????????????"network":?"192.168.149.0" ????????????},? ...
[root@fuxi01?ansible]#?ansible-playbook?when.yml PLAY?[testhost]?********************************************************************************************************************** TASK?[Gathering?Facts]?*************************************************************************************************************** fatal:?[yw02]:?UNREACHABLE!?=>?{"changed":?false,?"msg":?"Failed?to?connect?to?the?host?via?ssh:?ssh:?connect?to?host?yw02?port?22:?No?route?to?host",?"unreachable":?true} ok:?[yw03] ok:?[127.0.0.1] TASK?[use?when]?********************************************************************************************************************** skipping:?[127.0.0.1] ?[WARNING]:?Consider?using?the?file?module?with?state=touch?rather?than?running?'touch'.??If?you?need?to?use?command?because?file?is insufficient?you?can?add?'warn:?false'?to?this?command?task?or?set?'command_warnings=False'?in?ansible.cfg?to?get?rid?of?this message. changed:?[yw03] PLAY?RECAP?*************************************************************************************************************************** 127.0.0.1??????????????????:?ok=1????changed=0????unreachable=0????failed=0????skipped=1????rescued=0????ignored=0??? yw02???????????????????????:?ok=0????changed=0????unreachable=1????failed=0????skipped=0????rescued=0????ignored=0??? yw03???????????????????????:?ok=2????changed=1????unreachable=0????failed=0????skipped=0????rescued=0????ignored=0
三、playbook中的handlers
執行task之后,服務器發生變化之后要執行的一些操作,比如我們修改了配置文件后,需要重啟一下服務。
#?vi?/etc/ansible/handlers.yml//加入如下內容 --- -?name:?handlers?test ??hosts:?yw02 ??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相關的操作。也就是說如果1.txt和2.txt內容是一樣的,并不會去執行handlers里面的shell相關命令。 這種比較適合配置文件發生更改后,重啟服務的操作。類似于command1 && command2(handlers),前面的命令執行成功后,才執行這個handler,需要用notify關聯起來。