如何从库存文件向Ansible中的角色传递参数?

如何从库存文件向Ansible中的角色传递参数?,ansible,Ansible,我有一组角色,它们都是唯一的,并且使用一个通过依赖关系拉入的公共角色来执行所有其他角色都需要执行的一系列相同的操作。我需要能够将一个参数传递给一个特定的角色,在本例中,该参数表示从注册表中提取docker图像,在另一种情况下,保存图像并执行其他操作。变量会导致问题,因为它们对于主机是显式的,并且每个主机可能有几个角色。我如何构建我的ansible剧本来做到这一点 例如: 我有一个普通角色,作为依赖项被拉入其他角色: --- - name: Included Playbook - What va

我有一组角色,它们都是唯一的,并且使用一个通过依赖关系拉入的公共角色来执行所有其他角色都需要执行的一系列相同的操作。我需要能够将一个参数传递给一个特定的角色,在本例中,该参数表示从注册表中提取docker图像,在另一种情况下,保存图像并执行其他操作。变量会导致问题,因为它们对于主机是显式的,并且每个主机可能有几个角色。我如何构建我的ansible剧本来做到这一点

例如: 我有一个普通角色,作为依赖项被拉入其他角色:

---

- name: Included Playbook - What vars do I see
  debug:
        msg: "Name Pull: {{ imagename }}"

- name: Local Running
  debug:
        msg: "Local option selected"
  when: localimage == "true"

- name: Not local
  debug:
        msg: "Not Local remote"
  when: localimage == "false"
然后是主角色tasks\main.yml

---

- name: Included Playbook - What vars do I see from Primary
  vars:
        myname: "{{ imagemainname }}"
  debug:
        msg: "Name-primary: {{ myname }}"
及其meta\main.yml

---

dependencies:
   - { role: image-pull, imagename: "{{ imagemainname }}" }
---

dependencies:
   - { role: image-pull, imagename: "{{ secondname }}" }
第二个角色也是如此 ---

及其meta\main.yml

---

dependencies:
   - { role: image-pull, imagename: "{{ imagemainname }}" }
---

dependencies:
   - { role: image-pull, imagename: "{{ secondname }}" }
我的主要剧本同时调用了主要角色和第二角色,而角色特定的变量工作得很好

---

- name: Master
  hosts: imagemaster
  remote_user: root
  vars:
         imagemainname: "Top Dog"
  roles:
        - image-master

- name: Second
  hosts: second
  remote_user: root
  vars:
         imagemainname: "Second Dog"
  roles:
        - second
不起作用的是当我想在“pull”角色中声明do选项a或b时

如果我的库存文件如下所示:

[imagemaster]
127.0.0.1

[imagemaster:vars]
localimage=false

[second]
127.0.0.1

[second:vars]
localimage=true
它不起作用,因为localimage的最后一个条目是所有角色都将使用的


我该怎么做才能从清单/主机变量/等中传递一些东西,这意味着我的剧本不会在这个设置的每次迭代中都改变

如果您计划将主角色和辅助角色应用于同一主机(如您的示例(127.0.0.1)),则您没有选项:

在任何部分中,重新定义变量都将覆盖上一个实例。如果多个组具有相同的变量,则最后加载的一个组获胜。如果在游戏的变量:部分中定义变量两次,则第二个组获胜

(摘自)

如果您计划将它们应用于不同的主机,则测试是正确的,例如:

[imagemaster]
127.0.0.1

[imagemaster:vars]
localimage=false

[second]
127.0.1.1

[second:vars]
localimage=true

在本场景中,当角色(主/辅助)应用于
imagemaster
组,然后
localimage=false
;当应用于
second
组时–
localimage=true

您是否意识到这样一句话:?您需要重新思考您的剧本,或者等待一些亲天鹅主义者抓住您的目标。这就是我问的原因。我该如何重新构建playbook来完成类似的任务,或者甚至可以将某种参数传递给角色的剧本?