Ansible выполняет все роли зависимостей, даже указывая конкретные теги

#ansible #ansible-playbook

#ansible

Вопрос:

Ansible выполняет все роли зависимостей, но мой main.yml в папке meta выглядит так:

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

Итак, ansible должен выполнить ту часть role common, которая содержит следующее:

 ---

- 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
  

Я не понимаю, что происходит..

Ответ №1:

Если вы указываете теги для роли, Ansible применяет их к каждой задаче в этой роли.
В вашем примере тег packages будет добавлен к каждой задаче в роли common .

Пожалуйста, ознакомьтесь с разделом наследования тегов в документации.

Вы можете применять теги не только к задачам, но они влияют ТОЛЬКО на сами задачи. Применение тегов в любом другом месте — это просто удобство, поэтому вам не нужно писать его для каждой задачи

Все эти [примеры] применяют указанные теги к КАЖДОЙ задаче внутри воспроизведения, включаемого файла или роли, чтобы эти задачи можно было выборочно запускать при вызове playbook с соответствующими тегами.

Ответ №2:

Хорошо, спасибо, Константин. Для этой цели я думаю, что буду использовать:

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

С уважением

Комментарии:

1. Это все равно будет добавлять web foo теги and к каждой задаче foo.yml