使用一本剧本在不同的服务器上部署不同的角色

使用一本剧本在不同的服务器上部署不同的角色

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

相关内容