Служба vRealize Automation Cloud Assembly поддерживает интеграцию с Ansible — программным обеспечением с открытым исходным кодом для управления конфигурациями. Выполнив настройку данной интеграции, можно добавлять компоненты Ansible к новым и существующим развертываниям.

Интеграция приложения Ansible со службой vRealize Automation Cloud Assembly позволяет настроить автоматический запуск одного или нескольких сценариев Ansible в определенном порядке при подготовке нового компьютера, что помогает автоматизировать управление конфигурациями. Требуемые сценарии следует указать в облачном шаблоне, который будет использоваться для развертывания.

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

По умолчанию Ansible использует протокол SSH для подключения к физическим компьютерам. Если используются компьютеры Windows, указанные в облачном шаблоне со свойством osType (для Windows), для переменной connection_type автоматически устанавливается значение winm.

Изначально в интеграции 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 для интеграции в vRealize Automation Cloud Assembly см. в разделе Что такое управление конфигурацией в vRealize Automation Cloud Assembly.

Необходимые условия

  • На управляющей машине Ansible должна быть установлена версия Ansible 2.6.0 или более поздняя.
  • Пользователь должен иметь доступ с правом чтения и записи к каталогу, в котором хранится файл иерархии Ansible. Пользователь также должен иметь доступ с правом чтения и записи к самому файлу иерархии, если он уже существует.
  • Если используется учетная запись непривилегированного пользователя с параметром sudo, убедитесь, что в файле sudoers заданы следующие параметры:

    Defaults:user_name !requiretty

    и

    username ALL=(ALL) NOPASSD: 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 в облачных шаблонах доступен пользователю, указанному в учетной записи интеграции. Можно использовать абсолютный путь для указания расположения сценария, но это необязательно. Абсолютный путь к домашней папке пользователя рекомендуется использовать для того, чтобы путь оставался действительным даже в случае последующего изменения учетных данных интеграции Ansible.