Ansible运行所有依赖项角色,甚至指定特定标记

时间:2016-10-04 17:49:52

标签: ansible ansible-playbook

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

我无法理解发生了什么......

2 个答案:

答案 0 :(得分:3)

如果您为角色指定了代码,Ansible会将其应用于该角色中的每项任务
在您的示例中,标记packages将添加到角色common中的每个任务。

请检查文档中的tag inheritance部分。

  

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

     

所有这些[示例]将指定的标签应用于播放,包含文件或角色中的EACH任务,以便在使用相应标签调用播放本时可以选择性地运行这些任务。

答案 1 :(得分:-1)

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

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

此致