Ansible

Ansible:在多個使用者下在 1 個主機上執行 1 個任務

  • January 21, 2022

我有 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

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