Ansible
Ansible:在多個使用者下在 1 個主機上執行 1 個任務
我有 1 個虛擬機,上面有幾個應用程序。每個應用程序都在它自己的使用者下執行。
host: – host1 users: – app1 – app2
它們具有相似的配置文件,不同之處在於名稱和一些敏感數據。那麼,有什麼方法可以在 1 台主機上為多個使用者執行 1 項任務,同時使用 ansible 並行。
像這樣。
存貨:
[webservers:children] app1 app2 [app1] 127.0.0.1 [app2] 127.0.0.1
group_vars/app1/vars.yml:
--- app_user: app1 var2: value
group_vars/app2/vars.yml:
--- app_user: app2 var2: value
任務/test.yml:
--- - hosts: webservers tasks: - name: Copy config become: true become_user: {{ app_user }} template: ....
所以以這種方式呼叫任務,只適用於第一個應用程序。我知道我可以為每個 app_user 製作一個劇本,或者為每個 app_user 編寫一個包含一系列任務的劇本,但是有沒有辦法做我想做的事?
那是行不通的,因為:
在任何部分中,重新定義 var 都會覆蓋之前的實例。如果多個組具有相同的變數,則最後一個載入的變數獲勝。如果您在遊戲的 vars: 部分中定義了兩次變數,則第二次獲勝。
Ansible 文件:playbooks_variables
根據我對文件的理解,
app_user
應該group_vars/app2/vars.yml
覆蓋.app_user``group_vars/app1/vars.yml
應該做的是在單獨的遊戲中呼叫每個主機組:
--- - hosts: app1 tasks: - name: Copy config become: true become_user: {{ app_user }} template: .... - hosts: app2 tasks: - name: Copy config become: true become_user: {{ app_user }} template: ....
還:
將 becom_user 用於
template
任務不是必需的,也不是好的做法。像這樣使用模板模組:--- - hosts: app1 tasks: - name: Copy config template: src: template.j2 dest: /some/remote/path owner: "{{ app_user }}" group: "{{ app_user }}" mode: 0755