Ansible Роли с тэгами, не относящимися к тэгу, Вместо этого играются все определенные вкусы
Вот моя книга игр:
- name: Install MySQL with replication
hosts: mysql-master:mysql-slave
user: root
sudo: false
roles:
- common
- admin-users
- generic-directories
- { role: iptables, tags: [ 'mysql-iptables'] }
- mysql
У меня есть задачи таблиц IP для разных портов, я хочу, чтобы запустить задачу в зависимости от группы серверов.
Я отметил тег iptables на основе группы. Когда я запускал игровую книгу вместо выполнения помеченной задачи, она выполняла все задачи, определенные в роли iptables.
Пожалуйста, дайте мне знать, если я делаю что-то не так здесь.
2 ответа
На практике роли не должны содержать код / конфигурацию, используемые только вами. Постарайтесь разрабатывать роли, например, если вы собираетесь их публиковать, тем самым вы создадите более общие / полезные роли.
С ролью iptable, в конце концов, вы хотите открыть порт / изменить конфигурацию брандмауэра. Роль должна содержать задачи, которые разрешают настройку в playbook:
---
- name: iptables | Open ports
command: 'open port {{item.protocol}} {{item.port}}
with_items: 'iptable_conf'
tags:
- iptables
тогда ты пьес
- name: Install MySQL with replication
hosts: mysql-master:mysql-slave
user: root
sudo: false
vars:
- iptables_conf:
- {protocol: tcp, port: 3307}
- {protocol: tcp, port: 3306}
roles:
- common
- admin-users
- generic-directories
- iptables
- mysql
Надеюсь, вам понравится самоуверенное программное обеспечение: https://github.com/ansible/ansible/issues/3283.
Если я правильно читаю, вы испытываете особенность, когда все в этой роли помечено для вас, а ваша спецификация тега CLI впоследствии соответствует всем этим задачам. Я ненавижу эту функцию. Это глупо. "Применение" против "выбора" в отношении тегов является очевидным первым вопросом, когда вы изначально подвергаетесь воздействию тегов Ansible. У него должен быть более гибкий ответ или, по крайней мере, кивок в документах.
Я бы предложил другой способ организации универсальной роли iptables. Во-первых, подумайте о том, чтобы не иметь роли, если она охватывает очень редкое количество задач. Я бы рекомендовал, чтобы роли имели для вас значение, а не были модулями-адаптерами. Поэтому, возможно, роль sql может обрабатывать специфичные для sql правила в отдельном файле задач.
В противном случае, параметр роли, который затем можно использовать для динамической загрузки переменных (например, список правил брандмауэра). Вот как это будет выглядеть, заглушено:
Playbook:
---
- hosts: loc
roles:
- { role: does-too-much, focus_on: 'specific-kind' }
Ролевые задачи /main.yml:
---
- include_vars: "{{ focus_on }}.yml"
- debug:
msg: "ok - {{ item }}"
with_items: stuff
Переменные vars/specific-kind.yml:
---
stuff:
- b
- c