我有一组角色都是唯一的,并使用通过依赖关系引入的通用角色来执行一组所有这些其他角色都需要完成的相同操作。我需要能够传入一个特定的角色参数来说,在这种情况下,从注册表中拖出一个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"
然后主要角色任务\ main.yml
---
- name: Included Playbook - What vars do I see from Primary
vars:
myname: "{{ imagemainname }}"
debug:
msg: "Name-primary: {{ myname }}"
和它的元\主.yml
---
dependencies:
- { role: image-pull, imagename: "{{ imagemainname }}" }
这对于第二个角色 ---
- name: Included Playbook - What vars do I see from Second
vars:
myname: "{{ secondname }}"
debug:
msg: "Name-second: {{ myname }}"
和它的元\ main.yml
---
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
什么不起作用是当我想在“拉”角色中声明do选项a或b时。
如果我的库存文件看起来像这样:
[imagemaster]
127.0.0.1
[imagemaster:vars]
localimage=false
[second]
127.0.0.1
[second:vars]
localimage=true
它不会因为不管是localimage的最后一项工作是所有角色将使用什么。
我可以做些什么来传递库存/ host_vars/etc中的东西,这意味着我的剧本不会在此设置中的每次迭代都会更改?
您是否知道以下声明:[“期望的行为是var将具有加载的最后一个组的值”](https:// github。COM/ansible/ansible /问题/ 6538#issuecomment-37885348)?你需要重新思考你的剧本,或者等待一些能够掌握你的目标的酷派主义者。 – techraf
这就是为什么我问。我如何重构剧本来完成这样的事情,或者甚至有可能将某种参数传递给担任角色的剧本? – IguyKing