Display
Ansible:從任務執行新劇本
假設如下:
主要劇本.yml
- name: Play-1 hosts: localhost connection: local gather_facts: no roles: - role: my-role vars: newhost: 192.168.1.1
生成的劇本.yml
- name: Play-1 hosts: newhost gather_facts: yes tasks: - name: Task1 - name: Task2 - name: Task3
角色的主要任務:
- name: "Role MAIN-1" add_host: name: newhost ansible_host: "{{newhost}}" - include: generated_playbook.yml
錯誤:
ERROR! conflicting action statements: hosts, tasks The error appears to be in 'generated_playbook.yml': line 1, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: Generated Playbook ^ here
我創建了新角色並將此角色包含在主要劇本中。
在這個角色中,我將新主機添加到記憶體清單中,然後,我使用 j2 模板範例輸出生成了新的劇本 generate_playbook.yml
問題:
有沒有辦法只在新添加的主機上執行這個新生成的劇本而不向主劇本添加任何其他內容?
我試圖使用 import-playbook 或包含在角色中,但這失敗了
這是不可能的。引用ansible.builtin.import_playbook
帶有播放列表的文件只能包含在頂層。
該範例明確顯示了這一點
- name: This DOES NOT WORK hosts: all tasks: - debug: msg: task1 - name: This fails because I'm inside a play already import_playbook: stuff.yaml
筆記
- 沒有include_playbook。查看可用的include_**和import_**模組。
shell> ansible-doc -t module -l | grep include_ include_role Load and ... include_tasks Dynamically inclu... include_vars Load variables from files, dynamically...
shell> ansible-doc -t module -l | grep import_ import_playbook Imp... import_role Import a ro... import_tasks Impo...
- 引用 import_module 的註釋:
這是 Ansible 的核心特性,而不是模組,不能像模組一樣被覆蓋。