Интеграция Спутников И Ansible Tower

Используете Red Hat Satellite и платформу автоматизации Red Hat Ansible? Начиная с Satellite 6.3, их можно интегрировать друг с другом, чтобы динамическая инвентаризация в Ansible Tower извлекала списки хостов из Satellite. Кроме того, если хосты RHEL инициализируются с помощью Satellite (то есть инициализация), то в этот процесс можно встроить Ansible Tower, чтобы он автоматически запускал сценарии настройки на новых хостах.



Интеграция спутников и Ansible Tower

В этом посте мы рассмотрим, как настроить динамическую инвентаризацию в Ansible Tower, чтобы она подтягивала хосты со спутника, и покажем на примерах, как ее использовать.

Кроме того, мы расскажем, как организовать автоматический звонок в Ansible Tower после инициализации нового хоста со спутника.



Часть 1. Интеграция на уровне инвентаризации.

Настройка Satellite для использования в качестве динамического инвентаря в Ansible Tower

Чтобы Ansible Tower имел доступ к списку хостов, группам хостов и другой сопутствующей информации, ему необходима учетная запись в Satellite. Для этой записи требуются только минимальные разрешения, поэтому мы создадим новую роль в Satellite, предоставим ей только те разрешения, которые необходимы Ansible Tower, а затем создадим новую учетную запись и назначим ее этой роли.

В Satellite 6.6 и выше для этого уже есть готовая роль Ansible Tower Inventory Reader, поэтому шаги ниже для создания роли можно пропустить.

В Satellite 6.3-6.5 роль придется создавать вручную.

Для этого зайдите в веб-интерфейс Satellite, перейдите на экран «Администрирование», выберите «Роли» и нажмите «Создать роль».

Назовем эту роль ansible_tower_integration_role и попросить ее Места и организации :

Интеграция спутников и Ansible Tower

Нажмите «Отправить», чтобы создать роль.

После этого нажмите на ее имя и перейдите на вкладку «Фильтры».

Нажмите зеленую кнопку «Новый фильтр» и добавьте следующие фильтры по одному: Тип ресурса: Хозяин ,Разрешение: view_hosts Тип ресурса: Группа хостов ,Разрешение: view_hostgroups Тип ресурса: Фактическое значение ,Разрешение: view_facts В результате роль должна иметь следующие фильтры:

Интеграция спутников и Ansible Tower

Итак, мы создали роль.

Теперь создадим нового пользователя в Спутнике, для чего заходим в меню Администрировать , выбирать Пользователи и нажмите Создать пользователя .

Давайте позвоним этому пользователю ansible_integration , измените параметр Уполномоченный на ВНУТРЕННИЙ и установите пароль.

Затем на вкладках Места и организации выберите подходящие места/организации.

Наконец мы переходим на вкладку Роли и назначьте этому пользователю вновь созданную роль ansible_tower_integration_role (если у вас Satellite 6.3 – 6.5) или встроенная роль Читатель инвентаря Ansible Tower (Спутник 6,6 и выше).

Наконец, нажмите «Отправить», чтобы создать учетную запись для этого пользователя.



Настройка Ansible Tower

Теперь зайдите в веб-интерфейс Ansible Tower и перейдите на экран.

Реквизиты для входа .

Нажмите зеленую кнопку + (Добавить) для создания новой записи учетных данных.

Давай позвоним ей Satellite_integration , а в Типе учетных данных указываем Красная шляпа Спутник 6 .

Затем мы вводим URL-адрес (в нашем случае Satellite 6), а также имя пользователя (в нашем случае ansible_integration ), а пароль тот, который мы установили выше в Satellite:

Интеграция спутников и Ansible Tower

Затем мы нажимаем Сохранять .

Теперь перейдем к экрану Запасы , нажмите зеленую кнопку + (Добавить) и выбери Инвентарь .

Указываем в качестве имени Satellite_inventory и нажмите Сохранять для создания инвентаря.

Затем перейдите на вкладку «Источники» вновь созданного инвентаря и нажмите зеленую кнопку.

+ (Добавить) .

В качестве имени источника мы используем спутник и укажите тип источника как Красная шляпа Спутник 6 .

В поле Credential указываем Satellite_integration , который был создан на предыдущем шаге.

Включите флажки Перезаписать , Перезаписать переменные И Обновление при запуске в группе элементов управления «Параметры обновления» (подробнее об этих параметрах можно узнать, используя знаки вопроса справа).

Более того, в области Тайм-аут кэша (секунды) введите 90 и нажмите Сохранять .



Интеграция спутников и Ansible Tower

Теперь, не выходя из вкладки Источники , щелкните значок Начать процесс синхронизации :

Интеграция спутников и Ansible Tower

Ждем, пока значок не станет зеленым – это сигнализирует об успешном завершении синхронизации.

Теперь вы можете перейти на вкладку «Хосты» и просмотреть данные, полученные со спутника:

Интеграция спутников и Ansible Tower

Вы также можете посмотреть вкладку «Группы»:

Интеграция спутников и Ansible Tower

Как видите, синхронизация не только подтянула списки хостов из Satellite, но и разделила их на группы согласно соответствующим представлениям контента в Satellite, группам хостов, средам жизненного цикла, локациям и организациям.

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

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

Эти переменные затем можно использовать в сценариях Ansible:

Интеграция спутников и Ansible Tower



Мы используем динамическую инвентаризацию, связанную со Satellite.

Итак, мы синхронизировали Satellite и Ansible Tower. Теперь давайте посмотрим, как это использовать на практике.

Самый простой способ — использовать Satellite_inventory в качестве источника инвентаря в шаблоне Ansible Tower. Если в сценарии указана опция хозяева: все , то скрипт запустится на всех хостах Satellite. Более продвинутый вариант — использовать в скриптах автоматически создаваемые группы инвентаря (см.

как они создаются выше), то есть указать нужную группу хостов в строке хозяева .

Например, как в этом сценарии, где установлен пакет экрана:

  
  
  
  
  
  
  
  
  
  
  
  
  
   

--- - name: Install screen package hosts: "foreman_hostgroup_rhel6" tasks: - yum: name: screen state: installed

Здесь мы написали хосты: forman_hostgroup_rhel6 , тем самым указывая список хостов, которые образуют группу хостов rhel6 в Satellite. Соответственно, скрипт будет выполняться только на этих хостах.

Кроме того, в скрипте можно указать в строке hosts те переменные, которые получает Ansible Tower при синхронизации со Satellite. Например, вы можете сделать это:

--- - name: Install screen package hosts: "{{ hosts_var }}" tasks: - yum: name: screen state: installed

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



Интеграция спутников и Ansible Tower

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

rhel7 в Спутнике.

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

хосты_вар (и одновременно отображать существующие группы инвентаря в виде комментариев):

Интеграция спутников и Ansible Tower

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

Например, вот скрипт, показывающий, как ссылаться на эти переменные:

--- - name: Show Satellite variables hosts: all tasks: - name: Show subscription_status debug: msg: > Subscription Status: {{ foreman.subscription_status_label }} - name: Show Errata Counts debug: msg: > Bug fixes: {{ foreman.content_facet_attributes.errata_counts.bugfix }}, Security: {{ foreman.content_facet_attributes.errata_counts.security }}, Enhancement: {{ foreman.content_facet_attributes.errata_counts.enhancement }}, Total: {{ foreman.content_facet_attributes.errata_counts.total }}

Если вы запустите этот скрипт в Ansible Tower, он покажет значения переменных:

Интеграция спутников и Ansible Tower

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

Например, если на хосте нет исправлений безопасности или если подписка хоста недействительна.



Давайте подведем итоги

Red Hat Satellite и Red Hat Ansible сами по себе являются очень мощными инструментами, и их интеграция создает значительную синергию.

Выше мы показали, как сделать Satellite источником данных для динамической инвентаризации в Ansible и использовать его на практике.



Часть 2. Автоматическая настройка новых хостов посредством обратного вызова

Помимо множества других функций, Satellite может также инициализировать хосты, другими словами, выполнять инициализацию.

В свою очередь Ansible Tower предназначен для настройки хостов.

Интеграция позволяет убедиться, что после инициализации нового хоста RHEL с помощью Satellite Ansible Tower автоматически подключится к этому хосту и запустит на нем соответствующий скрипт настройки.

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

Следует отметить, что данная схема работает только при соблюдении нескольких условий.

Во-первых, Satellite необходимо использовать в качестве источника данных динамической инвентаризации в Ansible Tower (мы рассмотрели это в предыдущей части).

Во-вторых, инициализация хоста должна производиться не только через Satellite, но и работать через механизм группы хостов (подробнее об этом можно прочитать в инструкции).

Руководство по обеспечению ).

Ниже мы покажем, как настроить Satellite и Ansible Tower, чтобы после инициализации хоста на нем автоматически запускался скрипт настройки Ansible.

Обзор

Инструменты ИТ-автоматизации, такие как Ansible Tower, обычно попадают в одну из двух категорий: некоторые из них основаны на push-уведомлениях, а другие — на основе pull. В push-системах, к которым принадлежит Ansible Tower, соединение с хостом инициируется сервером автоматизации.

В системах pull инициатором является хост, который сам взаимодействует с сервером автоматизации.

В нашем случае при автоматическом запуске скриптов на новых хостах используется смешанная схема.

Вновь инициализированный хост обращается к серверу автоматизации с просьбой «перезвонить» ему и провести настройку.

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

Поэтому в Ansible Tower этот механизм называется Provisioning Callback, что можно перевести как «обратный вызов инициализации».

Чтобы показать, зачем вообще нужен обратный вызов подготовки, рассмотрим следующую ситуацию: у нас есть определенный сценарий настройки хоста, который запускается каждый день в полночь.

Допустим, в 8 утра мы инициализируем сразу несколько новых серверов через Спутник.

В этом случае Satellite используется как источник данных динамической инвентаризации в Ansible Tower, поэтому созданные хосты автоматически попадают в Ansible. Однако следующий запуск скрипта автоматизации произойдет только в полночь, то есть через 16 часов.

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

Именно поэтому был изобретен обратный вызов.

В общих чертах обратный вызов настройки настраивается и работает следующим образом:

  1. На сервере Ansible Tower создаем учетную запись и вписываем в нее учетные данные пользователя root, которые Satellite использует при инициализации новых хостов в той или иной своей группе.

    Tower будет использовать эту запись для входа на вновь созданные хосты и запуска на них скриптов.

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

    Эти запросы должны поступать на соответствующий URL-адрес и содержать определенный ключ конфигурации хоста, который задается в настройках того же шаблона Ansible.

  3. В Satellite для группы хостов мы задаем параметры того, как клиент будет формировать свой запрос обратного вызова на сервер Ansible Tower, а именно: URL-адрес сервера Ansible Tower, ключ конфигурации хоста и идентификатор шаблона Ansible.
  4. При инициализации нового хоста шаблоны инициализации Satellite создают на нем файл /etc/systemd/system/ansible-callback.service (на серверах RHEL 7 и 8; на машинах RHEL 6 используются сценарии).

    При первой загрузке хоста этот файл инициирует запрос обратного вызова на сервер Ansible Tower с использованием параметров, указанных в предыдущем абзаце (URL-адрес, ключ конфигурации хоста и идентификатор шаблона).

  5. Ansible Tower получает этот запрос и проверяет ключ конфигурации хоста.

    Если ключ верен, Tower инициирует запуск запрошенного шаблона на вызывающем хосте, используя для авторизации корневые учетные данные, указанные в шаблоне задания.

    Если все в порядке, то шаблон запускается и настраивает хост.



Настройка Ansible Tower для обратного вызова

Начнем с создания сценария конфигурации на сервере Ansible Tower, который меняет содержимое /etc/motd, создает пользователя и устанавливает определенный пакет. Затем мы будем использовать этот скрипт для настройки новых хостов сразу после их инициализации.

В реальной жизни скрипты автоматизации, скорее всего, хранятся в какой-то системе контроля версий, но для простоты изложения будем считать, что они расположены непосредственно на сервере Ansible Tower. Поэтому мы заходим на сервер Ansible Tower через SSH и создаем для них каталог /var/lib/awx/projects/provision, выполнив следующую команду:

# mkdir /var/lib/awx/projects/provision

Затем мы создаем в этом каталоге наш скрипт, называем его «provision.yaml» и пишем в него следующее содержимое:

--- - name: Provision new host hosts: all tasks: - name: Set content in /etc/motd copy: content: Authorized use only! dest: /etc/motd mode: 644 owner: root group: root - name: Create brian user account user: name: brian uid: 10000 state: present - name: Install tmux package yum: name: tmux state: present

Теперь перейдите в веб-интерфейс Tower и перейдите на экран «Учетные данные».

Нажмите зеленую кнопку «плюс», чтобы создать новую запись учетных данных, присвойте ей имя «provisioning_root», а также установите для параметра «Тип учетных данных» значение «Машина».

В поле Имя пользователя пишем root, а в поле Пароль указываем пароль, который установлен в Спутнике для использования на новых хостах соответствующей группы хостов в Спутнике (его имя можно посмотреть в веб-интерфейсе Спутника на вкладке Операционная система).

).

Используя эту запись, Ansible Tower сможет аутентифицироваться на новых хостах, созданных во время инициализации через Satellite.

Интеграция спутников и Ansible Tower

После этого в интерфейсе Ansible Tower перейдите на экран «Проекты» и щелкните зеленый плюсик, чтобы создать новый проект. Назовем это предоставлением, изменим Тип SCM на Вручную и укажем предоставление в качестве каталога Playbook:

Интеграция спутников и Ansible Tower

Затем в интерфейсе Ansible Tower перейдите на экран «Шаблоны», щелкните зеленый знак «плюс», чтобы создать новый шаблон задания.

Назовем это предоставлением, напишем Satellite в поле «Инвентарь», обеспечение в поле «Проект», обеспечение.

yaml в поле «Playbook» и обеспечение_корня в поле «Учетные данные».

Кроме того, необходимо установить флажок «Разрешить обратные вызовы обеспечения» и щелкнуть значок волшебной палочки справа от поля «Ключ конфигурации хоста», чтобы сгенерировать секретный ключ.

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

Без указания правильного ключа сервер Ansible Tower просто не ответит на запрос.



Интеграция спутников и Ansible Tower

Теперь нам нужно запомнить значение ключа конфигурации хоста для будущего использования, а также идентификатор шаблона, который можно найти по URL-адресу этого шаблона задания:

https://tower.example.com/#/templates/job_template/11

В этом примере идентификатор равен 11.

Настройка Satellite для обратного вызова

Теперь перейдите в веб-интерфейс Satellite, перейдите на экран «Настроить» и нажмите «Группы хостов».

Выбираем существующую группу хостов, которая используется при инициализации новых хостов, в нашем примере это группа RHEL 8. На экране редактирования группы хостов перейдите на вкладку «Параметры» и создайте 4 новых параметра: ansible_host_config_key — здесь мы регистрируем ключ конфигурации хоста из нашего шаблона Ansible Tower. ansible_job_template_id — сюда пишем идентификатор шаблона, который мы ранее узнали из URL шаблона.

ansible_tower_fqdn – полное доменное имя сервера Ansible Tower. ansible_tower_provisioning – установлено значение true.

Интеграция спутников и Ansible Tower



Давайте проверим, как все работает

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

В веб-интерфейсе Satellite перейдите на экран Hosts, нажмите Create Host и убедитесь, что используется группа, для которой мы только что создали 4 новых параметра, то есть группа RHEL 8.

Интеграция спутников и Ansible Tower

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

Для этого в веб-интерфейсе Ansible Tower перейдите на экран «Шаблоны», найдите в списке наш шаблон и посмотрите, станет ли крайний левый квадрат его индикатора зеленым:

Интеграция спутников и Ansible Tower

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

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

Что ж, это неудивительно, поскольку механизм обратного вызова инициализации запускает шаблон только на тех хостах, которые его запрашивают.

Интеграция спутников и Ansible Tower

Теперь зайдем на только что созданный хост и проверим, соответствует ли он тому, что написано в скрипте:

[root@provision-test-rhel8 ~]# rpm -qa | grep tmux tmux-2.7-1.el8.x86_64 [root@provision-test-rhel8 ~]# id brian uid=10000(brian) gid=10000(brian) groups=10000(brian) [root@provision-test-rhel8 ~]# cat /etc/motd Authorized use only!



Поиск неисправностей

Если шаблон Ansible Tower не запускается автоматически на новом хосте, предоставленном через Satellite, необходимо проверить несколько вещей.

Первый шаг — выяснить, получила ли Ansible Tower запрос на обратный вызов инициализации, как был запущен скрипт и запускался ли он вообще.

Для этого в интерфейсе Tower перейдите на экран «Шаблоны» и посмотрите на цвет индикатора рядом с названием шаблона: зеленый – запуск прошел успешно, красный – запуск не удался.



Интеграция спутников и Ansible Tower

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

Если квадрат зеленый, то все равно кликаем и смотрим, так как задание могло сообщать об успехе, но на самом деле не запускалось на нашем хосте.

Например, если строка хостов в скрипте указывает конкретные хосты и группы, но не включает хосты, созданные во время инициализации, то задание сообщит об успешном выполнении, но в дополнительной информации будет указано «пропуск: нет сопоставленных хостов».

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

Убедитесь, что URL-адрес сервера Ansible Tower, ключ конфигурации хоста и идентификатор шаблона верны.

Затем перейдите на только что инициализированный хост и проверьте наличие файла /etc/systemd/system/ansible-callback.service (в системах RHEL 7 или 8) или файла /root/ansible_provisioning_call.sh (RHEL 6).

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

Если файл /etc/systemd/system/ansible-callback.service присутствует на хосте, откройте его и найдите URL-адрес, на который отправляется запрос обратного вызова:

[root@provision-test-rhel8 ~]# cat /etc/systemd/system/ansible-callback.service [Unit] Description=Provisioning callback to Ansible Tower Wants=network-online.target After=network-online.target [Service] Type=oneshot ExecStart=/usr/bin/curl -k -s --data "host_config_key=aa5ebe82-491c-4fbb-bd36-a6657549451e" https://tower.example.com/api/v2/job_templates/11/callback/ ExecStartPost=/usr/bin/systemctl disable ansible-callback [Install] WantedBy=multi-user.target

Вы можете запустить Curl и вручную продублировать команды, указанные в этом файле, чтобы вручную инициировать обратный вызов подготовки:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=aa5ebe82-491c-4fbb-bd36-a6657549451e" https://tower.example.com/api/v2/job_templates/11/callback/

Если ключ конфигурации хоста неверен, мы получим следующее сообщение об ошибке:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=wrong-key-here" https://tower.example.com/api/v2/job_templates/11/callback/ {"detail":"You do not have permission to perform this action."}

Если ID шаблона указан неверно (здесь 43 вместо 11), то ответ будет следующий:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=wrong-key-here" https://tower.example.com/api/v2/job_templates/43/callback/ {"detail":"Not found."}

Вы также можете отключить беззвучный режим (-s) в команде Curl, чтобы она отображала ошибки, связанные с разрешением имени хоста, как в примере ниже, где мы заменили правильное имя ansible.example.com на неправильное ansible-tower.example. .

com:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k --data "host_config_key=wrong-key-here" https://ansible-tower.example.com/api/v2/job_templates/11/callback/ curl: (6) Could not resolve host: ansible-tower.example.com

Кроме того, файл /var/log/tower/tower.log на сервере Ansible Tower может быть полезен при определении причины ошибки.

Например, в этом файле записано использование неправильного ключа конфигурации хоста:

2019-11-19 23:19:17,371 WARNING awx.api.generics status 403 received by user AnonymousUser attempting to access /api/v2/job_templates/11/callback/ from 192.168.0.138

Здесь также фиксируется использование неверного идентификатора шаблона:

2019-11-19 23:19:49,093 WARNING awx.api.generics status 404 received by user AnonymousUser attempting to access /api/v2/job_templates/43/callback/ from 192.168.0.138 2019-11-19 23:19:49,095 WARNING django.request Not Found: /api/v2/job_templates/43/callback/



Давайте подведем итоги

Интеграция Satellite и Ansible Tower значительно оптимизирует процессы предоставления и настройки новых хостов, что экономит много времени системным администраторам, помогая им быстрее реагировать на потребности организации.

24 марта с 11:00 до 12:30 Red Hat проведет вебинар «Что нужно знать об автоматизации: Базовые навыки работы с Ansible» Автоматизация — тема, приближающаяся по популярности и количеству запросов к цифровой трансформации.

Мы расскажем вам о нашем взгляде на автоматизацию — наряду с Ansible и Ansible Tower — и это будет основная информация, которая откроет дверь в дивный новый мир декларативных инструментов автоматизации.

После этого вебинара вы поймете основные сущности Ansible, такие как сборник сценариев, инвентарь и модуль.

Мы будем работать с вами, чтобы изучить базовый синтаксис YAML, чтобы вы могли писать свои собственные сценарии.

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

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

регистр и прийти! Теги: #разработка Linux #ИТ-инфраструктура #открытый исходный код #настройка Linux #ansible #Red Hat #satellite

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.