Ansible执行所有依赖项角色,但我在meta文件夹中的main.yml如下所示:
---
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-playbook --list-tags 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 :(得分:3)
如果您为角色指定了代码,Ansible会将其应用于该角色中的每项任务。
在您的示例中,标记packages
将添加到角色common
中的每个任务。
请检查文档中的tag inheritance部分。
您可以将标记应用于多个任务,但它们只会影响任务本身。在任何其他地方应用标签只是一个方便所以你不必在每个任务上写它
所有这些[示例]将指定的标签应用于播放,包含文件或角色中的EACH任务,以便在使用相应标签调用播放本时可以选择性地运行这些任务。
答案 1 :(得分:-1)
- include: foo.yml
tags: [web,foo]
此致