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
关键字有两种不同的定义。