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

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

Файловая структура находится здесь, Best Practices - Ansible Documentation> «Directory Structure» .

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

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

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

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

Пример может быть в 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
...
0
задан 13 April 2019 в 20:25
1 ответ

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

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


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

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

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

- 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
0
ответ дан 5 December 2019 в 03:27

Теги

Похожие вопросы