Служба Cloud Assembly поддерживает интеграцию с Ansible — программным обеспечением с открытым исходным кодом для управления конфигурациями. Выполнив настройку данной интеграции, можно добавлять компоненты Ansible к новым и существующим развертываниям.
Интеграция приложения Ansible со службой Cloud Assembly позволяет настроить автоматический запуск одного или нескольких сценариев Ansible в определенном порядке при подготовке нового компьютера, что помогает автоматизировать управление конфигурациями. Требуемые сценарии следует указать в облачном шаблоне, который будет использоваться для развертывания.
При настройке интеграции с Ansible необходимо указать компьютер узла Ansible, а также путь к файлу иерархии, в котором определены данные, используемые для управления ресурсами. Кроме того, необходимо указать имя и пароль для доступа к экземпляру Ansible. Настройки подключения можно будет обновить позже при добавлении компонента Ansible в развертывание, если требуется задать проверку подлинности на основе ключей.
По умолчанию Ansible использует протокол SSH для подключения к физическим компьютерам. Если используются компьютеры Windows, указанные в облачном шаблоне со свойством osType (для Windows), для переменной connection_type
автоматически устанавливается значение winrm
.
Изначально в интеграции Ansible используются учетные данные в виде «пользователь/пароль» или «пользователь/ключ», указанные для подключения к управляющему компьютеру Ansible. После успешного подключения для сценариев, заданных в облачном шаблоне, выполняется проверка синтаксиса.
Если проверка прошла успешно, на управляющем компьютере Ansible создается папка выполнения по адресу ~/var/tmp/vmware/provider/user_defined_script/. Это расположение, в котором запускаются сценарии для добавления узла в иерархию, создания файлов vars для узла, включая настройку режима проверки подлинности для подключения к узлу, и выполнение сценариев. На этом этапе учетные данные, указанные в облачном шаблоне, используются для подключения к узлу с управляющего компьютера Ansible.
Интеграция Ansible поддерживает физические компьютеры, на которых не используется IP-адрес. Для компьютеров, подготовленных в общедоступных облаках, таких как AWS, Azure и GCP, в свойство address для созданного ресурса общедоступный IP-адрес компьютера подставляется только в том случае, если этот компьютер подключен к общедоступной сети. Для компьютеров, не подключенных к общедоступной сети, интеграция Ansible ищет IP-адрес в сети, подключенной к компьютеру. Если подключено несколько сетей, интеграция Ansible выполняет поиск сети по наименьшему значению свойства deviceIndex, которое представляет собой индекс сетевого адаптера (NIC), подключенного к компьютеру. Если свойство deviceIndex не задано в схеме элементов, интеграция использует первую подключенную сеть.
Дополнительные сведения по настройке Ansible Open Source для интеграции в Cloud Assembly см. в разделе Что такое управление конфигурацией в Cloud Assembly.
Необходимые условия
- На управляющем компьютере Ansible должна использоваться версия Ansible. Сведения о поддерживаемых версиях см. в Таблице поддержки vRealize Automation.
- По умолчанию для уровня детализации журнала Ansible должно быть задано нулевое значение.
- Пользователь должен иметь доступ с правом чтения и записи к каталогу, в котором хранится файл иерархии Ansible. Пользователь также должен иметь доступ с правом чтения и записи к самому файлу иерархии, если он уже существует.
- Если используется учетная запись непривилегированного пользователя с параметром sudo, убедитесь, что в файле sudoers заданы следующие параметры:
Defaults:user_name !requiretty
и
username ALL=(ALL) NOPASSWD: ALL
- Убедитесь, что проверка ключа узла деактивирована, установив значение
host_key_checking = False
в /etc/ansible/ansible.cfg или ~/.ansible.cfg. - Убедитесь в наличии пароля для хранилища, добавив в файл /etc/ansible/ansible.cfg или ~/.ansible.cfg следующую строку кода:
vault_password_file = /path/to/password_file
Файл пароля для хранилища содержит пароль в виде обычного текста и используется только в том случае, если в облачных шаблонах или развертываниях предусмотрена комбинация имени пользователя и пароля для соединений между ACM и узлом, как показано в следующем примере.echo 'myStr0ng9@88w0rd' > ~/.ansible_vault_password.txt echo 'ANSIBLE_VAULT_PASSWORD_FILE=~/.ansible_vault_password.txt' >> ~/.profile # Instead of this way, you can also set it setting 'vault_password_file=~/.ansible_vault_password.txt' in either /etc/ansible/ansible.cfg or ~/.ansible.cfg
- Чтобы избежать ошибок с ключами узла при запуске сценариев, рекомендуется включить следующие параметры в папке /etc/ansible/ansible config.
[paramiko_connection] record_host_keys = False [ssh_connection] #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s ssh_args = -o UserKnownHostsFile=/dev/null # If you already have any options set for ssh_args, just add the additional option shown here at the end.
Процедура
Результаты
Приложение Ansible доступно для использования при работе с облачными шаблонами.
Дальнейшие действия
Добавьте компоненты Ansible в нужные облачные шаблоны.
- На странице холста облачного шаблона выберите Ansible в меню параметров облачного шаблона в разделе «Управление конфигурацией» и перетащите компонент Ansible на холст.
- На панели справа можно настроить соответствующие свойства Ansible, в том числе указать сценарии, которые будут выполняться.
В Ansible пользователи могут назначать переменные одиночному узлу, а затем использовать его позже в сценариях. Интеграция Ansible Open Source позволяет задать эти переменные узлов в облачных шаблонах. Свойство hostVariables
должно иметь корректный формат YAML, соответствующий требованиям управляющего компьютера Ansible, и эти сведения будут размещены в следующем каталоге.
parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml
Расположение по умолчанию файла иерархии Ansible определяется в учетной записи Ansible на странице «Интеграции» в Cloud Assembly. Интеграция Ansible не будет проверять синтаксис YAML свойства hostVariable
в облачном шаблоне, но при запуске сценария в случае некорректного формата или синтаксиса управляющий компьютер Ansible будет выдавать ошибку.
В следующем фрагменте YAML облачного шаблона приведен пример использования свойства hostVariables
.
Cloud_Ansible_1: type: Cloud.Ansible properties: host: '${resource.AnsibleLinuxVM.*}' osType: linux account: ansible-CAVA username: ${input.username} password: ${input.password} maxConnectionRetries: 20 groups: - linux_vms playbooks: provision: - /root/ansible-playbooks/install_web_server.yml hostVariables: | message: Hello ${env.requestedBy} project: ${env.projectName}
- Имя пользователя и пароль в ресурсе Ansible.
- Имя пользователя и файл privateKeyFile в ресурсе Ansible.
- Имя пользователя в ресурсе Ansible и элемент privatekey в вычислительном ресурсе (для remoteAccess указано значение
generatedPublicPrivateKey
).
При создании интеграции Ansible Open Source ее пользователю необходимо предоставить учетные данные для входа, чтобы он мог подключаться к управляющему компьютеру Ansible по протоколу SSH. Для запуска сценариев с интеграцией в коде YAML интеграции можно указать другого пользователя. Свойство username
является обязательным и требуется для подключения к виртуальной машине, на которой Ansible будет вносить изменения. Свойство playbookRunUsername
является необязательным и может быть предоставлено для выполнения сценария на узле Ansible. Значением параметра playbookRunUsername
по умолчанию является имя пользователя интеграции конечной точки Ansible.
Если указать другого пользователя, у такого пользователя должен быть доступ на запись к файлу узлов Ansible, а также ему необходимо разрешение на создание файлов закрытых ключей.
При добавлении плитки Ansible Open Source в облачный шаблон vRealize Automation создает запись об узле для подключенной виртуальной машины. По умолчанию vRealize Automation будет использовать имя ресурса виртуальной машины для создания записи об узле, но с помощью свойства hostName
в коде YAML схемы элементов можно указать любое имя. Для обеспечения связи с компьютером служба vRealize Automation создаст переменную узла ansible_host: IP Address
для записи об узле. Поведение по умолчанию можно переопределить и настроить вариант связи с использованием полного доменного имени, указав ключевое слово ansible_host
в разделе hostVariables
и введя полное доменное имя в качестве его значения. В следующем фрагменте кода YAML приведен пример настройки связи с использованием имени узла и полного доменного имени.
Cloud_Ansible: type: Cloud Ansible properties: osType: linux username: ubuntu groups: - sample hostName: resource name host: name of host account: name of account hostVariables: ansible_host:Host FQDN
В этом примере выполняется переопределение значения ansible_host
по умолчанию путем указания полного доменного имени. Это может быть полезно для пользователей, которые хотят, чтобы служба Ansible Open Souce подключалась к компьютеру узла с помощью полного доменного имени.
Значением по умолчанию для параметра hostVariables
в коде YAML будет ansible_host:IP_address
, а IP-адрес используется для связи с сервером.
Если свойство count в YAML для Ansible Open Source имеет значение больше 1, имя узла можно сопоставить с любым из соответствующих свойств виртуальной машины. В следующем примере показано сопоставление для ресурса виртуальной машины с именем Ubuntu-VM, если нужно сопоставить ее свойство address с именем узла.
hostname: '${resource.Ubuntu-VM.address[count.index]}'
Убедитесь, что путь к сценарию Ansible в облачных шаблонах доступен пользователю, указанному в учетной записи интеграции. Можно использовать абсолютный путь для указания расположения сценария, но это необязательно. Абсолютный путь к домашней папке пользователя рекомендуется использовать для того, чтобы путь оставался действительным даже в случае последующего изменения учетных данных интеграции Ansible.