Ansible playbook編寫之坑-----with_items
阿新 • • 發佈:2019-01-09
注:本文基於CentOS 7.2系統編寫,Ansible版本為ansible-2.4.2.0-2.el7.noarch
這篇文章應該是一篇格式糾正的文章,因為今天因為playbook的格式搞了大半天。
今天在使用copy模組時,需要拷貝多個檔案,於是就理所當然的用with_items了。不用不知道,用了之後差點被搞崩,playbook採用的是YAML語法格式,縮排在層次控制上非常重要,一不小心就是各種報錯。
偏偏我就是這麼時運不齊,參看了兩本書都是錯誤的,不得不吐槽現在的書的質量怎麼這麼差。
第一本是《Ansible權威指南》,擷取片段程式碼如下(取自4.2章節):
第二本是看《Ansible自動化運維技術與最佳實踐》
無一例外,按照這上面的兩種方式編寫結果都是錯誤的,不只是書的排版問題還是軟體版本問題,反正我是被坑得略慘。
最終還是得求救官方文件,終得解脫。
根據官方文件給的格式,在將使用模組換為copy,就是下面的樣子,
---
- hosts: CentOS-7-4
gather_facts: false
tasks:
- name: copy files
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
with_items:
- { src: "/home/ansible/copy.yml", dest: "/home/copy.yml" }
也就是with_items要和模組名左對齊,在同一個層級。
如果單個檔案的拷貝,copy也可以用下面的方式,
---
- hosts: CentOS-7-4
gather_facts: false
tasks:
- name: copy files
copy: src=/home/ansible/copy.yml dest=/home/copy.yml
此外,如果with_items使用的資料不是k/v型,只是多個變數,則可以使用下面的方式,
---
- hosts: CentOS-7-4
gather_facts: false
tasks:
- name: install or uninstall rpms
yum: name="{{ item }}" state=absent
with_items:
- dos2unix
- squid
在編輯完playbook後,可以先檢查一下格式是否正確,再進行真正的執行。ansible提供了一下命令用於檢測playbook語法,
ansible-playbook test.yml --syntax-check