2016-10-04 59 views
0

Ansible执行所有依赖的角色,但是我在元文件夹main.yml看起来是这样的:Ansible运行所有的依赖作用,甚至指定具体的标签

--- 
dependencies: 
    - { role: common, caller_role: docker, tags: ['packages'] } 

所以,ansible应执行共同作用的那部分,包含以下:

--- 

- name: Install required packages 
    package: name={{ item.name }} state=present 
    with_items: 
    - "{{ vars[caller_role]['SYSTEM']['PACKAGES'] }}" 
    tags: 
    - packages 

- name: Modify /etc/hosts 
    lineinfile: 
    dest: /etc/hosts 
    line: "{{ vars[caller_role]['REGISTRY']['ip'] }} {{ vars[caller_role]['REGISTRY']['hostname']}}" 
    tags: 
    - write_etc_hosts 

我执行ansible 2.1.1.0如下:ansible-剧本--list标签site.yml和我在这里复制site.yml:

- hosts: localhost 
    connection: local 
    remote_user: root 
    become: yes 
    roles: 
    - docker 

最后的树:

├── common 
│   ├── defaults 
│   │   └── main.yml 
│   ├── files 
│   ├── handlers 
│   │   └── main.yml 
│   ├── meta 
│   │   └── main.yml 
│   ├── README.md 
│   ├── tasks 
│   │   └── main.yml 
│   ├── templates 
│   ├── tests 
│   │   ├── inventory 
│   │   └── test.yml 
│   └── vars 
│    └── main.yml 
├── docker 
│   ├── defaults 
│   │   └── main.yml 
│   ├── files 
│   ├── handlers 
│   │   └── main.yml 
│   ├── meta 
│   │   └── main.yml 
│   ├── README.md 
│   ├── tasks 
│   │   └── main.yml 
│   ├── templates 
│   ├── tests 
│   │   ├── inventory 
│   │   └── test.yml 
│   └── vars 
│    └── main.yml 
└── site.yml 

我不明白发生了什么事..

回答

0

如果你为一个角色指定标签,Ansible并将其应用于该角色每个任务
在你的榜样,标签packages将被添加到每一项工作中的作用common

请检查文档中tag inheritance部分。

您可以将标签应用于多个任务,但它们只影响任务本身。应用标签其他地方仅仅是一个方便,所以你不必把它写在每一个任务

所有这些[样品]的应用指定标签播放里面的每个任务,包含的文件,或角色,所以当使用相应的标签调用手册时,可以选择性地运行这些任务。

0

OK,谢谢康斯坦丁。为此,我想我会用:

- include: foo.yml 
    tags: [web,foo] 

问候

+0

这仍然将追加'web'和'foo'标签在'foo.yml'每一项任务... –

相关问题