Ansible
任務文件,帶有共享指令
如何在僅包含任務的 Ansible 劇本片段文件中設置文件中所有任務之間共享的指令?
# ansible/inventory/roles/os_packages/tasks/main.yaml - name: "APT: Update available packages from Debian repositories" gather_facts: false become: true become_user: root apt: update_cache: true - name: "APT: Install required packages" gather_facts: false become: true become_user: root apt: name: - foo - bar
那些重複的指令——
gather_facts
,become
等——應該在該文件中聲明一次。但是在哪裡,因為(目前?)沒有代表角色或扮演的文件?# ansible/inventory/roles/os_packages/tasks/main.yaml # This doesn't work because Ansible is expecting only tasks. gather_facts: false become: true become_user: root - name: "APT: Update available packages from Debian repositories" apt: update_cache: true - name: "APT: Install required packages" apt: name: - foo - bar
該文件只需包含一系列任務;“角色”級別或“播放”級別似乎在這個推薦的目錄結構中沒有合適的位置。
如果整個劇本都在一個文件中,那麼每個劇本都有自己單獨的名稱,我會在劇本上設置指令。但是這些任務文件正在收集和編譯,我沒有地方可以編寫這些指令。
應該在哪裡定義適用於角色中所有任務的指令?
gather_facts
對除了遊戲之外的任何東西進行設置是沒有意義的(或可能的),因為它只會影響遊戲級別的決定是否收集事實。
become
並且become_user
是有效的塊級或任務級關鍵字,因此您可以使用塊將它們應用於任務列表(在角色內或其他):- become: true become_user: root block: - name: "APT: Update available packages from Debian repositories" apt: update_cache: true - name: "APT: Install required packages" apt: name: - foo - bar
呼叫角色時也可以應用許多關鍵字:
- hosts: all roles: - name: foo become: true tasks: - import_role: name: bar become: true - include_role: name: baz apply: become: true