使用一本劇本在不同的伺服器上部署不同的角色

使用一本劇本在不同的伺服器上部署不同的角色

Fe 我透過「ansible-galaxy init」創建了兩個角色:deploy_back和deploy_front

我還寫了一個 playbook.yml 檔案。

- name: Create cluster
  become: yes
  hosts: all

  roles:
  - deploy_front
  - deploy_back

如果我透過「ansible-playbook playbook.yml」啟動它 - 那麼在兩台伺服器上將部署兩個角色。如何在一本劇本中的不同伺服器上部署不同的角色?

如果我寫 playbook.yml

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

  hosts: db
  roles:
  - deploy_db

然後輸出看起來像“....發現重複的字典鍵(主機)...發現重複的字典鍵(角色)...僅使用最後定義的值」。

答案1

你必須將你的hosts:聲明和其他聲明分成不同的劇本。程式碼應該如下所示:

- name: Create front cluster
  become: yes
  hosts: front
  roles:
  - deploy_front

- name: Create db cluster
  become: yes
  remote_user: different-db-user
  hosts: db
  roles:
  - deploy_db

答案2

您收到「重複金鑰」訊息的原因是 YAML 的結構方式。

劇本是劇本的集合,採用有序列表的形式。每個播放都由一系列關鍵字/值對指定。常見的關鍵字有:namehostsbecomeroles,僅舉幾例。

在 YAML 中,若要指定清單中的不同項目,可以使用破折號 ( -) 字元。在您的兩個範例playbook.xml劇本中,您只有一個最左邊的破折號字元。這意味著您只有一個劇本的列表,或者一個劇本劇本。

hosts如果您在第二個範例中的第二個聲明之前添加破折號字符playbook.yml,您將擁有一個有效的劇本,現在包含兩個劇本:

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

- hosts: db
  roles:
  - deploy_db

在您最初的第二個範例中,僅定義了單一播放。此外,hostsroles關鍵字在一場比賽中被定義了兩次。 YAML 抱怨您對hostsroles關鍵字有兩種不同的定義。

相關內容