2015-09-29 65 views
2

我正在运行Ansible 1.9.3,并且无法从Ansible文档中获取role dependency wheel/tire example工作。Ansible角色取决于未运行多次的其他角色

$ ansible --version 
ansible 1.9.3 
    configured module search path = None 

这里是我的文件:

$ find ./ -type f | while read f; do printf "# %s\n" "$f"; cat "$f"; printf "\n\n"; done 

# ./inventory 
[webservers] 
example.com 

# ./roles/app/meta/main.yml 
--- 
dependencies: 
    - { role: wheel, n: 1 } 
    - { role: wheel, n: 2 } 
    - { role: wheel, n: 3 } 
    - { role: wheel, n: 4 } 

# ./roles/tire/tasks/main.yml 
- name: "tire {{ n }}" 
    command: "echo tire {{ n }}" 

# ./roles/wheel/meta/main.yml 
--- 
allow_duplicates: yes 
dependencies: 
    - { role: tire } 

# ./roles/wheel/tasks/main.yml 
- name: "wheel {{ n }}" 
    command: "echo wheel {{ n }}" 

# ./site.yml 
--- 
- include: webservers.yml 

# ./webservers.yml 
--- 
- hosts: webservers 
    roles: 
    - role: app 

所以app作用依赖于wheel角色的四个实例,而这又取决于tire作用。

然而,运行剧本只显示一个执行tire任务:

$ ansible-playbook -v -i inventory site.yml 

PLAY [webservers] ************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [example.com] 

TASK: [tire | tire 1] ********************************************************* 
changed: [example.com] => {"changed": true, "cmd": ["echo", "tire", "1"], "delta": "0:00:00.004721", "end": "2015-09-29 16:55:27.075745", "rc": 0, "start": "2015-09-29 16:55:27.071024", "stderr": "", "stdout": "tire 1", "warnings": []} 

TASK: [wheel | wheel 1] ******************************************************* 
changed: [example.com] => {"changed": true, "cmd": ["echo", "wheel", "1"], "delta": "0:00:00.004355", "end": "2015-09-29 16:55:27.806182", "rc": 0, "start": "2015-09-29 16:55:27.801827", "stderr": "", "stdout": "wheel 1", "warnings": []} 

TASK: [wheel | wheel 2] ******************************************************* 
changed: [example.com] => {"changed": true, "cmd": ["echo", "wheel", "2"], "delta": "0:00:00.005012", "end": "2015-09-29 16:55:28.539339", "rc": 0, "start": "2015-09-29 16:55:28.534327", "stderr": "", "stdout": "wheel 2", "warnings": []} 

TASK: [wheel | wheel 3] ******************************************************* 
changed: [example.com] => {"changed": true, "cmd": ["echo", "wheel", "3"], "delta": "0:00:00.003573", "end": "2015-09-29 16:55:29.259193", "rc": 0, "start": "2015-09-29 16:55:29.255620", "stderr": "", "stdout": "wheel 3", "warnings": []} 

TASK: [wheel | wheel 4] ******************************************************* 
changed: [example.com] => {"changed": true, "cmd": ["echo", "wheel", "4"], "delta": "0:00:00.003541", "end": "2015-09-29 16:55:29.981742", "rc": 0, "start": "2015-09-29 16:55:29.978201", "stderr": "", "stdout": "wheel 4", "warnings": []} 

PLAY RECAP ******************************************************************** 
example.com : ok=6 changed=5 unreachable=0 failed=0 

我已经在这两个meta/main.yml文件试过allow_duplicates: yes|no各种组合,但每次都得到相同的结果。目标是执行wheeltire任务的四次执行,其中n等于1,2,3,4。

回答

3

我有同样的问题,并提交一张票Ansible GitHub库:https://github.com/ansible/ansible/issues/11205

已合并到2.0版。由于2.0尚未发布,目前尚不清楚迁移将会发生什么,因此我不得不重组我的角色。不幸的是,我相信我将他们合并为一个角色。

+0

感谢您的链接。由于不同的bug,我停止使用2.0alpha,并切换回1.9.3,但也许我会再次测试它。我多少放弃尝试使用参数化的角色依赖关系。相反,我使用模板来生成静态角色,其中包括角色所需的所有任务。 – Patrick