Ansible Tower можно интегрировать с Cloud Assembly для управления конфигурацией развернутых ресурсов. После настройки интеграции виртуальные компоненты Ansible Tower можно добавлять в новые или существующие развертывания в редакторе облачных шаблонов.
Необходимые условия
- Предоставьте пользователям, не являющимся администраторами, соответствующие разрешения на доступ к Ansible Tower. Существует два варианта, которые можно использовать в большинстве конфигураций. Выберите наиболее подходящий для своей конфигурации.
- Предоставьте пользователям роли «Администратор иерархии» и «Администратор шаблонов заданий» на уровне организации.
- Предоставьте пользователям права администратора на определенную иерархию и роль «Выполнение» для всех шаблонов заданий, используемых для предоставления ресурсов.
-
Для использования с развертываниями в Ansible Tower необходимо настроить соответствующие учетные данные и шаблоны. Можно использовать шаблоны заданий или рабочих процессов. Шаблоны заданий определяют иерархию и сценарий, используемые для развертывания. Задания и сценарии сопоставляются один к одному. Для определения задач, связанных с шаблоном, в сценариях используется синтаксис, похожий на YAML. В большинстве типовых развертываний для проверки подлинности используйте учетные данные компьютера.
Шаблоны рабочих процессов позволяют пользователям создавать последовательности, состоящие из любой комбинации шаблонов заданий, результатов синхронизации проекта и синхронизации иерархии, которые связаны друг с другом, что позволяет выполнять их единым блоком. Благодаря средству Ansible Tower Workflow Visualizer пользователи могут проектировать шаблоны рабочих процессов. В большинстве типовых развертываний для проверки подлинности можно использовать учетные данные компьютера.
- Войдите в Ansible Tower и перейдите в раздел «Шаблоны».
- Выберите «Добавить новый шаблон задания».
- Выберите созданные вами учетные данные. Это учетные данные компьютера, для управления которыми будет использоваться Ansible Tower. Для каждого шаблона задания может существовать один объект учетных данных.
- Для выбора ограничения выберите «Запрос при запуске». Это гарантирует, что шаблон задания будет выполняться для узла, процесс подготовки или отмены подготовки которого выполняется из Cloud Assembly. Если этот параметр не выбран, то при развертывании схемы элементов, содержащей шаблон задания, будет выводиться сообщение об ошибке «Ограничение не установлено».
- Выберите «Добавить новый шаблон рабочего процесса».
- Выберите созданные ранее учетные данные, а затем определите иерархию. С помощью Workflow Visualizer спроектируйте шаблон рабочего процесса.
В поле «Ограничение» для шаблонов рабочих процессов или заданий обычно можно выбрать вариант «Запрос при запуске». В этом случае шаблон рабочих процессов или заданий будет выполняться для узла, процесс подготовки или отмены подготовки которого выполняется в Cloud Assembly.
- Выполнение шаблонов заданий или шаблонов рабочих процессов, вызываемых из Cloud Assembly, можно просматривать на вкладке «Задания Ansible Tower».
Процедура
Результаты
Приложение Ansible Tower доступно для использования в облачных шаблонах.
Дальнейшие действия
Добавьте компоненты Ansible Tower в нужные облачные шаблоны. Для пользователя, указанного в учетной записи интеграции, необходимо определить применимый шаблон задания с разрешением на выполнение.
- На странице холста облачного шаблона выберите Ansible в разделе «Управление конфигурацией» в меню параметров схемы элементов и перетащите компонент Ansible Tower на холст.
- На панели справа можно настроить соответствующие свойства Ansible Tower, например шаблоны заданий.
При добавлении плитки Ansible Tower в облачный шаблон vRealize Automation создает запись об узле для подключенной виртуальной машины в Ansible Tower. По умолчанию vRealize Automation будет использовать имя ресурса виртуальной машины для создания записи об узле, но с помощью свойства hostName
в коде YAML схемы элементов можно указать любое имя. Для обеспечения связи с компьютером служба vRealize Automation создаст переменную узла ansible_host: IP Address
для записи об узле. Поведение по умолчанию можно переопределить и настроить вариант связи с использованием полного доменного имени, указав ключевое слово ansible_host
в разделе hostVariables
и введя полное доменное имя в качестве его значения. В следующем фрагменте кода YAML приведен пример настройки связи с использованием имени узла и полного доменного имени.
Cloud_Ansible_Tower_1: type: Cloud Ansible Tower properties: host: name of host account: name of account hostName: resource name hostVariables: ansible_host:Host FQDN
В этом примере выполняется переопределение значения ansible_host
по умолчанию путем указания полного доменного имени. Это может быть полезно для пользователей, которые хотят, чтобы служба Ansible Tower подключалась к компьютеру узла с помощью полного доменного имени.
Значением по умолчанию для параметра hostVariables
в коде YAML будет ansible_host:IP_address
, а IP-адрес используется для связи с сервером.
Если свойство count в YAML для Ansible Tower имеет значение больше 1, имя узла можно сопоставить с любым из соответствующих свойств виртуальной машины. В следующем примере показано сопоставление для ресурса виртуальной машины с именем Ubuntu-VM, если нужно сопоставить ее свойство address с именем узла.
hostname: '${resource.Ubuntu-VM.address[count.index]}'
При добавлении компонента Ansible Tower в облачный шаблон в коде YAML этого шаблона можно указать шаблон задания, который будет вызываться. Также можно указать шаблоны рабочих процессов или комбинацию шаблонов заданий и шаблонов рабочих процессов. Если тип шаблона не указан, vRealize Automation по умолчанию предполагает, что вы вызываете шаблон задания.
В следующем фрагменте кода YAML приведен пример вызова комбинации шаблонов задания и рабочего процесса в облачном шаблоне Ansible Tower.
Cloud_Ansible_1: type: Cloud.Ansible.Tower properties: host: ‘${resource.CentOS_Machine.*}’ account: maxConnectionRetries: 2 maxJobRetries: 2 templates: provision: - name: My workflow type: workflow - name: My job template
Для обработки ошибок, связанных с Ansible, мы добавили параметры maxConnectionsRetries
и maxJobRetries
. Облачный шаблон принимает настраиваемое значение. Если значение не указано, шаблон будет использовать значение по умолчанию. Значение по умолчанию для maxConnectionRetries
— 10, а значение по умолчанию для maxJobRetries
— 3.
Облачные шаблоны Cloud Assembly для интеграций Ansible Tower содержат свойство useDefaultLimit
со значением «истина» или «ложь», которое позволяет определить, где выполняются шаблоны Ansible. Шаблоны Ansible могут быть шаблонами заданий или шаблонами рабочих процессов. Если задано значение «истина», указанные шаблоны будут запускаться для компьютера, указанного в поле «Ограничение» на странице «Шаблоны Ansible». Если задано значение «ложь», шаблоны запускаются для подготовленного компьютера, но пользователи должны установить флажок «Запрос при запуске» на странице «Шаблоны Ansible Tower». По умолчанию это свойство имеет значение «ложь». В следующем примере кода YAML показано, как свойство useDefaultLimit
отображается в облачных шаблонах.
templates: provision: - name: ping aws_credentials type: job useDefaultLimit: false extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'
Кроме того, как показано в примере выше, свойство extraVars
можно использовать для указания дополнительных переменных или переменных опроса. Такая возможность может быть полезна для запуска шаблонов, для которых требуется ввод данных. Если пользователь использует переменную опроса, то во избежание ошибок эта переменная должна передаваться в разделе extraVars
облачного шаблона.
Пользователи с правами администратора облачных систем могут изменять проекты развертывания с ресурсами Ansible Open Source и Ansible Tower. Эта возможность доступна как действие по регулярному обслуживанию на уровне развертывания.
Чтобы изменить проект для развертывания Ansible, выберите пункт «Изменить проект» в меню «Действия» соответствующего развертывания, как показано на странице «Развертывания Cloud Assembly». В открывшемся диалоговом окне выберите нужный проект и нажмите Отправить.
Хотя интеграция Ansible Tower не поддерживает свойство групп, клиенты могут реализовать эквивалентные функции с помощью тегов ВМ и подключаемого модуля иерархии VMware, как описано в статье https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html.
- Используйте в облачном шаблоне
ansible_host
(например, полное доменное имя) иhostName
. - В AWX включите флаг обновления при запуске; это означает, что перед запуском сценария новые узлы будут синхронизироваться с vCenter. При синхронизации записи узлов полного доменного имени, добавленные vRealize Automation и импортированные подключаемым модулем иерархии VMware, будут объединены и узлы будут назначены группам. Группы иерархии создаются на основе значений тегов ВМ с использованием указанных выше переменных источника синхронизации.
Пример реализации см. в следующем облачном шаблоне.
# Created by Quickstart wizard. name: RHEL 8 version: 0.0.1 formatVersion: 1 inputs: image: type: string description: Select an OS Version default: RHEL 8 Base enum: - RHEL 8 Base - RHEL 7 Base AWX: type: string description: Choose AWX Environment enum: - LabAWX - FA/CC-AWX envrionmnetTag: type: string description: Choose VM Environment enum: - cel - mag - wdr purposeTag: type: string description: Choose Server Purpose default: '' enum: - '' - mariadb - oracle authGroupTag: type: string description: Choose Authentication Group default: '' enum: - '' - dbo_linux - oracle - postgres hostname: type: string description: Desired hostname default: changeme cpuCount: type: integer description: Number of virtual processors default: 1 totalMemoryMB: type: integer description: Machine virtual memory size in Megabytes default: 1024 disk1Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 disk2Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 neededip: type: string description: Enter an available IP Address title: Needed-IP-Address vlan: type: string description: Enter in needed vlan title: Enter VLAN ID example "vl500" resources: Cloud_Ansible_Tower_1: type: Cloud.Ansible.Tower metadata: layoutPosition: - 0 - 0 properties: host: ${resource.Cloud_vSphere_Machine_1.*} account: ${input.AWX} hostName: ${input.hostname} hostVariables: ansible_host: ${input.hostname}.dcl.wdpr.disney.com templates: provision: - name: Linux-Role Cloud_vSphere_Machine_1: type: Cloud.vSphere.Machine metadata: layoutPosition: - 0 - 1 properties: image: ${input.image} Infoblox.IPAM.Network.dnsSuffix: dcl.wdpr.disney.com Infoblox.IPAM.Network.dnsView: Internal customizationSpec: Rhel7Base name: ${input.hostname} cpuCount: ${input.cpuCount} totalMemoryMB: ${input.totalMemoryMB} attachedDisks: ${map_to_object(resource.Cloud_Volume_1[*].id + resource.Cloud_Volume_2[*].id, "source")} networks: - network: ${resource.Cloud_vSphere_Network_1.id} assignment: static address: ${input.neededip} tags: - key: Server-Team value: ${input.envrionmnetTag} - key: Server-Team value: ${input.purposeTag} - key: Server-Team value: ${input.authGroupTag} Cloud_Volume_1: type: Cloud.Volume metadata: layoutPosition: - 0 - 2 properties: count: '${input.disk1Size == 0 ? 0 : 1 }' capacityGb: ${input.disk1Size} Cloud_Volume_2: type: Cloud.Volume metadata: layoutPosition: - 0 - 3 properties: count: '${input.disk2Size == 0 ? 0 : 1}' capacityGb: ${input.disk2Size} Cloud_vSphere_Network_1: type: Cloud.vSphere.Network metadata: layoutPosition: - 1 - 0 properties: networkType: existing constraints: - tag: ${input.vlan}