Использование Ansible ansible 2.4.2.0
Я пытаюсь запустить только определенную игру из основного playbook (main.yml
)
---
# main playbook for cluster deployment
# initial configuration of OS same for all hosts
- name: Cluster Deployer playbook
hosts: all
roles:
- { role: common, tags: ['initial_config'] }
# configuration specific for loadbalancers hosts group
- name: Cluster Deployer playbook - Load Balancer setup
hosts: loadbalancers
roles:
- { role: loadbalancers_setup, tags: ['setup_loadbalancer'] }
# configuration specific for db-servers hosts group
- name: Cluster Deployer playbook - Database servers setup
hosts: db-servers
roles:
- { role: db_servers_setup, tags: ['setup_db_server'] }
# configuration specific for web-servers hosts group
- name: Cluster Deployer playbook - Web Servers setup
hosts: web-servers
roles:
- { role: web_servers_setup, tags: ['setup_web_server'] }
Вот мой hosts
файл
[loadbalancers]
192.168.99.10
[db-servers]
192.168.99.2
[web-servers]
192.168.99.3
192.168.99.4
Я вызываю playbook командой
ansible-playbook main.yml --inventory hosts --tags initial_config
Проблема в том, что Ansible запускает все игры из этой книги, хотя я запрашивал только те, у которых есть тег initial_config
в roles
раздел. Я пробовал установить tags
раздел под hosts
но безуспешно.
Можно ли определять теги на этом уровне без необходимости отмечать отдельные задачи в ролях? Я новичок в Ansible, поэтому, если есть лучший способ писать плейбуки, я все слышу.
Директива tag неуместна в вашем коде.
Ваш код должен выглядеть так:
---
# main playbook for cluster deployment
# initial configuration of OS same for all hosts
- name: Cluster Deployer playbook
hosts: all
roles:
- common
tags:
- initial_config
# configuration specific for loadbalancers hosts group
- name: Cluster Deployer playbook - Load Balancer setup
hosts: loadbalancers
roles:
- loadbalancers_setup
tags:
- setup_loadbalancer
# configuration specific for db-servers hosts group
- name: Cluster Deployer playbook - Database servers setup
hosts: db-servers
roles:
- db_servers_setup
tags:
- setup_db_server
# configuration specific for web-servers hosts group
- name: Cluster Deployer playbook - Web Servers setup
hosts: web-servers
roles:
- web_servers_setup
tags:
- setup_web_server
И ваша доступная команда должна выглядеть так:
ansible-playbook main.yml --inventory hosts --tags "initial_config"
Для получения дополнительной информации проверьте Официальная документация Ansible.
Похоже, у вас неправильное представление о наследовании тегов:
Наследование тегов
Вы можете применять теги не только к задачам, но они ТОЛЬКО влияют на сами задачи. Применение тегов в любом другом месте - это просто удобство, поэтому вам не нужно писать их для каждой задачи. Документация Ansible по наследованию тегов
Попробуйте что-то вроде этого:
- name: Cluster Deployer playbook
hosts: all
tasks:
- include_role:
name: common
tags:
- inital_config