国产在线观看精品免费,亚洲日本VA久久一区二区,香蕉久久99综合一区二区三区,久久精品99国产精品蜜桃小说

Ansible Playbook詳解

2021-11-03 16:22:38 shuai.chang


睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商

Playbook 是一個(gè)由一個(gè)或多個(gè) play 組成的文件;play 是針對特定主機或主機組執行的一組有序的任務(wù);每個(gè) playbook 必須包含兩部分:

hosts: 運行 playbook 的一組主機

tasks: 需要在主機上運行的任務(wù)

除了這兩個(gè)必須選項,還有一些可選項選項,也可能需要包含在 play 中,如:

name: play 的名稱(chēng),在運行該 play 時(shí),會(huì )在運行過(guò)程中顯示。

become: 與配置文件中的 become 作用一樣,用于提權,當配置文件中禁用提權時(shí),你想要某個(gè) play 使用提權的話(huà),你可以在 play 中添加 become。

playbook 以 yaml 格式編寫(xiě)的,通常以 yml 擴展名保存。yaml 格式使用空格縮進(jìn),對于空格的數量沒(méi)有特別要求,但需要注意:

  • 同一級別內的元素必須使用相同的縮進(jìn);
  • 對于子項目,縮進(jìn)必須比父項目多

編寫(xiě) playbook

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 以 --- 開(kāi)頭,用于標記文件開(kāi)始;

第二行的 name 為該 play 的名稱(chēng);

第三行的 hosts 表示將要運行該 play 的主機;

第四行的 tasks 表示該 play 將要執行的具體任務(wù);

通過(guò)縮進(jìn),我們可以看出 tasks 一共分為三個(gè)部分,也就是三個(gè)模塊,每個(gè)模塊由一個(gè) name 開(kāi)表示該模塊的 name,雖然 name 是可選選項,但建議寫(xiě)上,用來(lái)作為對該模塊執行任務(wù)的解釋說(shuō)明,并且 name 的內容會(huì )在 playbook 執行此模塊時(shí),顯示在執行過(guò)程中;

name 下面的是模塊的名稱(chēng),在該 play 的 tasks 中一共有三個(gè)模塊:

apt: 用于安裝軟件

copy: 用于復制文件或內容

service: 用于操作 service,如啟動(dòng)服務(wù),重啟服務(wù)等

我們可以通過(guò) ansible-doc 來(lái)獲取更多關(guān)于模塊的信息:

我們可以通過(guò) ansible-doc -l 來(lái)列出所有模塊

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)     
... ... ... ...
... ... ... ...

列出的內容太多,我們可以通過(guò) grep 進(jìn)行篩選:如,我想查找關(guān)于 apt  相關(guān)的模塊

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...                           

通過(guò) ansible-doc Module_Name 獲取模塊相關(guān)的幫助說(shuō)明

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,所以在運行的時(shí)候會(huì )提示輸入 become 密碼;

在這里,我們可以看到前面說(shuō)的,在執行過(guò)程中會(huì )顯示 play 的名稱(chēng),告訴你現在執行的是那個(gè) play;

每個(gè) play 中會(huì )有一個(gè)默認的任務(wù),就是獲取 facts 信息,在 facts 信息中會(huì )保存你計算機的系統信息;

然后是三個(gè)在 play 中定義的 task,在執行 tasks 時(shí),會(huì )顯示當前所執行的 task 的名稱(chēng),以及執行的狀態(tài),如果是 ok,則表示系統狀態(tài)沒(méi)有任何更改,如果是 changed,則表示系統狀態(tài)發(fā)生了改變;

在最后,還有一個(gè)關(guān)于該 playbook 執行結果的匯總,有多少個(gè) changed,有多少個(gè) failed,有多個(gè) skipped 等等;


我要咨詢(xún)