2017-04-07 57 views
0

我有一组角色都是唯一的,并使用通过依赖关系引入的通用角色来执行一组所有这些其他角色都需要完成的相同操作。我需要能够传入一个特定的角色参数来说,在这种情况下,从注册表中拖出一个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中的东西,这意味着我的剧本不会在此设置中的每次迭代都会更改?

+0

您是否知道以下声明:[“期望的行为是var将具有加载的最后一个组的值”](https:// github。COM/ansible/ansible /问题/ 6538#issuecomment-37885348)?你需要重新思考你的剧本,或者等待一些能够掌握你的目标的酷派主义者。 – techraf

+0

这就是为什么我问。我如何重构剧本来完成这样的事情,或者甚至有可能将某种参数传递给担任角色的剧本? – IguyKing

回答

0

如果打算申请原发性和继发性的作用在同一主机(如您的示例(127.0.0.1),那么你就没有选择:

在任何一个部分,重新​​定义VAR将覆盖。以前的实例如果有多个组具有相同的变量,最后一个加载赢,如果你在剧中的瓦尔定义两次变量:节,第二届一个胜

(从docs

。如果你打算它们应用到不同的主机,则测试是适当地,例如:

[imagemaster] 
127.0.0.1 

[imagemaster:vars] 
localimage=false 

[second] 
127.0.1.1 

[second:vars] 
localimage=true 

在这种情况下,当作用(初级/次级)被施加到imagemaster组,然后localimage=false;适用于second组 - localimage=true

相关问题