Назад | Перейти на главную страницу

Ansible: запускать игру, только если отмечен определенным тегом

Использование 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