- Ansible 教程
- Ansible - 首頁
- Ansible - 簡介
- Ansible - 環境設定
- Ansible - YAML 基礎
- Ansible - Ad hoc 命令
- Ansible - 劇本 (Playbooks)
- Ansible - 角色 (Roles)
- Ansible - 變數
- Ansible - 高階執行
- Ansible - 故障排除
- Ansible 有用資源
- Ansible - 快速指南
- Ansible - 有用資源
- Ansible - 討論
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
廣告