Служба 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.

Процедура

  1. Выберите пункт Инфраструктура > Подключения > Интеграции и нажмите Добавить интеграцию.
  2. Выберите Ansible.
    Отобразится страница настройки Ansible.
  3. Введите имя узла, путь к файлу иерархии и другую информацию, необходимую для настройки экземпляра Ansible.
  4. Нажмите Проверить, чтобы проверить интеграцию.
  5. Нажмите кнопку Добавить.

Результаты

Приложение Ansible доступно для использования при работе с облачными шаблонами.

Дальнейшие действия

Добавьте компоненты Ansible в нужные облачные шаблоны.

  1. На странице холста облачного шаблона выберите Ansible в меню параметров облачного шаблона в разделе «Управление конфигурацией» и перетащите компонент Ansible на холст.
  2. На панели справа можно настроить соответствующие свойства 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 предполагают наличие учетных данных для проверки подлинности в облачном шаблоне. Возможны следующие варианты.
  • Имя пользователя и пароль в ресурсе 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.