
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 的結構方式。
劇本是劇本的集合,採用有序列表的形式。每個播放都由一系列關鍵字/值對指定。常見的玩關鍵字有:name
、hosts
、become
和roles
,僅舉幾例。
在 YAML 中,若要指定清單中的不同項目,可以使用破折號 ( -
) 字元。在您的兩個範例playbook.xml
劇本中,您只有一個最左邊的破折號字元。這意味著您只有一個劇本的列表,或者一個劇本劇本。
hosts
如果您在第二個範例中的第二個聲明之前添加破折號字符playbook.yml
,您將擁有一個有效的劇本,現在包含兩個劇本:
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
- hosts: db
roles:
- deploy_db
在您最初的第二個範例中,僅定義了單一播放。此外,hosts
和roles
關鍵字在一場比賽中被定義了兩次。 YAML 抱怨您對hosts
和roles
關鍵字有兩種不同的定義。