#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
…