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

local ansible-playbook запустить playbook с vars для роли

Я новичок в анзибле, поэтому, возможно, я неправильно настроил. Я считаю, что у меня есть определенные классы серверов. (например, монитор, Интернет, БД)

Я хочу запустить на них локальный доступ, чтобы моя игра для монитора выглядела примерно так

---

# 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

Вместо определения глобальных переменных для запуска действий внутри ролей вы можете использовать два других подхода.

1. параметры роли

Роли могут иметь параметры. Если вы хотите передать параметры, вам просто нужно преобразовать их в словарь:

roles:
  - users
  - role: monitor
    sensu_install_client: true
    sensu_install_server: true

Переменные sensu_install_client и sensu_install_server то доступны только в роли monitor. Это немного более чище, а также дает понять, что эти вары будут использоваться в этой роли, а не в users роль.

2. теги

Теги на самом деле являются способом запуска определенных частей пьесы / ролей. Однако теги передаются из командной строки, а не с помощью жестко заданных переменных в 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"