Я новичок в анзибле, поэтому, возможно, я неправильно настроил. Я считаю, что у меня есть определенные классы серверов. (например, монитор, Интернет, БД)
Я хочу запустить на них локальный доступ, чтобы моя игра для монитора выглядела примерно так
---
# plays/monitor.yaml
- hosts: mongo
connection: local
hosts: localhost
become: yes
become_user: root
roles:
- ../roles/users
- ../roles/monitor
vars:
sensu_install_client: true
sensu_install_server: true
Мой roles/monitor/tasks/main.yml
выглядит как
---
# roles/monitor/tasks/main.yaml
- include: common.yml
- include: server.yml
when: sensu_install_server
- include: client.yml
when: sensu_install_client
Я хочу иметь возможность передавать в варах, поэтому в роли будут включены включения. Поэтому, когда я настраиваю свои экземпляры api, я могу сделать что-то вроде
vars:
sensu_install_client: true
В игру он просто включит client.yml из роли монитора.
Мне непонятно, почему это не работает. Я не вижу проблемы. Но позвольте дать вам несколько общих рекомендаций, может быть, это вам тоже поможет.
Лучше всего иметь свои playbook на корневом уровне. Посмотри на эта структура. При такой настройке вам не нужно указывать путь к ролям, поскольку Ansible автоматически ожидает роли в roles
каталог относительно playbook. Тогда ваш раздел ролей в playbook станет намного чище:
roles:
- users
- monitor
Вместо определения глобальных переменных для запуска действий внутри ролей вы можете использовать два других подхода.
Роли могут иметь параметры. Если вы хотите передать параметры, вам просто нужно преобразовать их в словарь:
roles:
- users
- role: monitor
sensu_install_client: true
sensu_install_server: true
Переменные sensu_install_client
и sensu_install_server
то доступны только в роли monitor
. Это немного более чище, а также дает понять, что эти вары будут использоваться в этой роли, а не в users
роль.
Теги на самом деле являются способом запуска определенных частей пьесы / ролей. Однако теги передаются из командной строки, а не с помощью жестко заданных переменных в playbook. Представьте свою роль main.yml
выглядит так:
---
# roles/monitor/tasks/main.yaml
- include: common.yml
tags: always
- include: server.yml
tags: server
- include: client.yml
tags: client
Тег always
является особенным и будет запускать помеченные задачи ... ну, как вы уже догадались ... всегда.
Теперь вы бы назвали свою книгу так:
ansible-playbook monitor.yml --tags server
или
ansible-playbook monitor.yml --tags client
Или, если вы хотите запустить оба, вы даже можете сделать:
ansible-playbook monitor.yml --tags "client,server"
Если вы используете это, не забудьте соответствующим образом пометить свою роль пользователя, иначе она вообще не будет запускаться.
Если вы не укажете ни одного --tags
все задачи выполняются, если вы хотите отфильтровать определенные теги, вы можете использовать --skip-tags
вариант
ansible-playbook monitor.yml --skip-tags "server"
Вы даже можете отфильтровать тег всегда.
ansible-playbook monitor.yml --tags "server" --skip-tags "always"