Playbook 是一個由一個或多個 play 組成的文件;play 是針對特定主機或主機組執行的一組有序的任務;每一個 playbook 必須包含兩部分:html
hosts: 運行 playbook 的一組主機python
tasks: 須要在主機上運行的任務ios
除了這兩個必須選項,還有一些可選項選項,也可能須要包含在 play 中,如:apache
name: play 的名稱,在運行該 play 時,會在運行過程當中顯示。bootstrap
become: 與配置文件中的 become 做用同樣,用於提權,當配置文件中禁用提權時,你想要某個 play 使用提權的話,你能夠在 play 中添加 become。vim
playbook 以 yaml 格式編寫的,一般以 yml 擴展名保存。yaml 格式使用空格縮進,對於空格的數量沒有特別要求,但須要注意:api
編寫 playbookbash
it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml --- - name: Install Apache hosts: servera tasks: - name: Install apache httpd apt: name: apache2 state: present - name: Copy using inline content copy: content: Welcome to dest: /var/www/html/index.html - name: Start apache service service: name: apache2 state: started enabled: yes
Playbook 以 --- 開頭,用於標記文件開始;app
第二行的 name 爲該 play 的名稱;ide
第三行的 hosts 表示將要運行該 play 的主機;
第四行的 tasks 表示該 play 將要執行的具體任務;
經過縮進,咱們能夠看出 tasks 一共分爲三個部分,也就是三個模塊,每一個模塊由一個 name 開表示該模塊的 name,雖然 name 是可選選項,但建議寫上,用來做爲對該模塊執行任務的解釋說明,而且 name 的內容會在 playbook 執行此模塊時,顯示在執行過程當中;
name 下面的是模塊的名稱,在該 play 的 tasks 中一共有三個模塊:
apt: 用於安裝軟件
copy: 用於複製文件或內容
service: 用於操做 service,如啓動服務,重啓服務等
咱們能夠經過 ansible-doc 來獲取更多關於模塊的信息:
咱們能夠經過 ansible-doc -l 來列出全部模塊
t@workstation:~/ansible$ ansible-doc -l a10_server Manage A10 Networks AX/SoftAX/Thu... a10_server_axapi3 Manage A10 Networks AX/SoftAX/Thu... a10_service_group Manage A10 Networks AX/SoftAX/Thu... a10_virtual_server Manage A10 Networks AX/SoftAX/Thu... aci_aaa_user Manage AAA users (aaa:User) ... ... ... ... ... ... ... ...
列出的內容太多,咱們能夠經過 grep 進行篩選:如,我想查找關於 apt 相關的模塊
it@workstation:~$ ansible-doc -l | grep apt apt Manages apt-packages apt_key Add or remove an apt key apt_repo Manage APT repositories via apt-r... apt_repository Add and remove APT repositories apt_rpm apt_rpm package manager fortios_switch_controller_security_policy_captive_portal Names of VLANs that use captive p... na_ontap_qos_adaptive_policy_group NetApp ONTAP Adaptive Quality of ... na_ontap_ucadapter NetApp ONTAP UC adapter configura... nios_naptr_record Configure Infoblox NIOS NAPTR rec... skydive_capture Module which manages flow capture... vmware_guest_network Manage network adapters of specif...
經過 ansible-doc Module_Name 獲取模塊相關的幫助說明
it@workstation:~$ ansible-doc apt > APT (/usr/lib/python3/dist-packages/ansible/modules/packaging/os/apt.py) Manages `apt' packages (such as for Debian/Ubuntu). * This module is maintained by The Ansible Core Team OPTIONS (= is mandatory): - allow_unauthenticated Ignore if packages cannot be authenticated. This is useful for bootstrapping environments that manage their own apt-key setup. `allow_unauthenticated' is only supported with state: `install'/`present' [Default: no] type: bool version_added: 2.1 ... ... ... ... ... ... ... ...
執行 playbook
it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Install Apache] ****************************************************************************** TASK [Gathering Facts] ***************************************************************************** ok: [servera] TASK [Install apache httpd] ************************************************************************ changed: [servera] TASK [Copy using inline content] ******************************************************************* changed: [servera] TASK [Start apache service] ************************************************************************ ok: [servera] PLAY RECAP ***************************************************************************************** servera : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
因爲咱們配置了 become,因此在運行的時候會提示輸入 become 密碼;
在這裏,咱們能夠看到前面說的,在執行過程當中會顯示 play 的名稱,告訴你如今執行的是那個 play;
每一個 play 中會有一個默認的任務,就是獲取 facts 信息,在 facts 信息中會保存你計算機的系統信息;
而後是三個在 play 中定義的 task,在執行 tasks 時,會顯示當前所執行的 task 的名稱,以及執行的狀態,若是是 ok,則表示系統狀態沒有任何更改,若是是 changed,則表示系統狀態發生了改變;
在最後,還有一個關於該 playbook 執行結果的彙總,有多少個 changed,有多少個 failed,有多個 skipped 等等;