Ansible + AWX Запуск playbook/ заданий против машин требует незначительных изменений по сравнению со стандартной ролью

Я изучаю ansible awx, и у меня возникла ситуация, к которой я хочу обратиться во время тестирования, поэтому я ищу идеи и возможные решения.

Файловая структура находится здесь, Best Practices - Ansible Documentation > "Структура каталогов".

Чтобы не усложнять этот вопрос, у меня есть две пьесы, и каждая из них должна работать с предварительно сконфигурированным образом Linux, который выполняет роль. Одна роль для настольных компьютеров, другая роль для серверов.

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

Я предполагаю, что некоторые пользователи настольных компьютеров должны будут иметь собственные изменения. Хотя рабочие столы используют 99% стандартной конфигурации ролей, им может потребоваться иметь определенное фоновое изображение или установить часовой пояс для своей учетной записи в качестве примера или что-то еще, что нужно заблокировать на этом рабочем столе.

Я не хочу создавать структуру playbook для каждой машины, которая выходит за рамки стандартной конфигурации, так что есть ли способ сказать, запустить стандартную playbook, но также выполнить этот другой набор задач, но только для имени хоста / группы, соответствующего в AWX после стандартного playbook или даже в середине стандартного ролевого задания?

Пример может быть в файле tasks / main.yml. Могу ли я включить другой файл yml, который импортируется и запускается, если хост соответствует группе AWX? Таким образом, стандартная роль сохраняется достаточно чистой, что просто импортирует другой файл, который может импортировать другой файл на основе совпадений хостов, которые должны соответствовать имени группы в AWX?

Концепция, о которой я думаю, не уверен, выполнимо ли это или что-то в этом роде? Все, что мне нужно сделать, это добавить тест в custom.yml и создайте новый файл с пользовательскими задачами для этого хоста / группы.

In tasks / main.yml

- name: install app
...

#end of tasks declarations
# At bottom of the file

include custom.yml



#file custom.yml
  host: user_machine_123
  import user_machine_123_custom_tasks.yml

#file user_machine_123_custom_tasks.yml
- name: install special app for user_machine_123
...

1 ответ

Включение всех исключений в playbook не является обязательным, если пользователь может настроить внешнюю форму. Кроме того, остерегайтесь слишком больших и сложных книг, вы можете иметь несколько книг.

Тем не менее, для каждой группы и для каждого хоста возможны значения и действия.


Определите все значения как переменные, чтобы разрешить переопределения. Например, на уровне по умолчанию часовой пояс tz: UTC но в group_vars/desktop это может быть tz: America/Chicago или что угодно. В общей роли, которую вы запускаете на всех хостах, используйте модуль часового пояса:

 - timezone:
     name: "{{tz}}"

Необязательные задачи для каждого хоста немного сложнее. Попробуйте статическое включение с поиском first_found. Сначала найдите наиболее конкретное имя файла, содержащее имя_ инвентаря, а затем (возможно, пустой) файл по умолчанию.

- name: per host tasks
  include: "{{lookup('first_found', params)}}"
  vars:
    params:
      files:
        - '{{inventory_hostname}}.yml'
        - default.yml
      paths:
        - 'tasks'

Если вы обнаружите, что достигли этого паттерна, подумайте об ограничении его использования. Он работает только на хостах, на которые уже нацелена игра, и специфическое поведение хоста в каталоге задач не очень интуитивно понятно.

Роль - это более управляемая единица, содержащая задачи и переменные, и ее можно повторно использовать для любого количества хостов. Попросите пользователей Ansible добавить роли, которые можно поддерживать отдельно от вашей игры, если вы хотите. Затем сопоставьте их с хостами в playbooks:

---
- name: Server common
  hosts: servers
  roles:
  - common

- name: Web servers common
  hosts: web
  roles:
  - webserver

- name: Widget inventory app
  hosts: widget
  roles:
  - widgetapp

- name: special snowflake
  hosts: user123
  roles:
  - custom123
Другие вопросы по тегам