Ansible

任務文件,帶有共享指令

  • August 24, 2021

如何在僅包含任務的 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

引用自:https://serverfault.com/questions/1075252