Ansible - 高階執行



本章我們將學習 Ansible 的高階執行。

如何按任務限制執行

這是一個非常重要的執行策略,它只需要執行一個操作,而不是整個劇本。例如,假設你只想停止伺服器(如果出現生產問題),然後在應用補丁後只想啟動伺服器。

在原始劇本中,停止和啟動是同一個劇本中不同角色的一部分,但這可以透過使用標籤來處理。我們可以為不同的角色(反過來又會有任務)新增不同的標籤,因此,根據執行者提供的標籤,只有指定的角色/任務會被執行。對於上面提供的示例,我們可以新增如下標籤:

- {role: start-tomcat, tags: ['install']}} 

以下命令有助於使用標籤:

ansible-playbook -i hosts <your yaml> --tags "install" -vvv

使用上述命令,只會呼叫 start-tomcat 角色。提供的標籤區分大小寫。確保將精確匹配傳遞給命令。

如何按主機限制執行

有兩種方法可以在特定主機上執行特定步驟。對於特定角色,可以定義主機——指定該角色應在哪些特定主機上執行。

示例

- hosts: <A> 
   environment: "{{your env}}" 
   pre_tasks: 
      - debug: msg = "Started deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
     
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}" 
 
- hosts: <B> 
   pre_tasks: 
      - debug: msg = "started.... 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
        
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed the task.. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}" 

根據上述示例,根據提供的主機,只會呼叫相應的角色。現在我的主機 A 和 B 定義在主機(清單檔案)中。

替代方案

另一種解決方案可能是使用變數定義劇本的主機,然後透過--extra-vars傳遞特定的主機地址:

# file: user.yml  (playbook) 
--- 
- hosts: '{{ target }}' 
   user: ... 
playbook contd…. 

執行劇本

ansible-playbook user.yml --extra-vars "target = "<your host variable>"

如果未定義 {{ target }},則劇本不會執行任何操作。如果需要,也可以透過主機檔案中的組傳遞。如果沒有提供額外的變數,這不會造成任何損害。

目標為單個主機的劇本

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts 
廣告
© . All rights reserved.