O Cloud Assembly oferece suporte à integração com o gerenciamento de configuração do Ansible Open Source. Depois de configurar a integração, é possível adicionar componentes do Ansible a implantações novas ou existentes.

Quando você integra o Ansible Open Source ao Cloud Assembly, é possível configurá-lo para executar uma ou mais guias estratégicos do Ansible em uma determinada ordem quando uma nova máquina é provisionada para automatizar o gerenciamento de configuração. Especifique os playbooks desejados para uma implantação no modelo de nuvem.

Ao configurar uma integração do Ansible, é necessário especificar a máquina host do Ansible Open Source, bem como o caminho do arquivo de inventário que define informações para gerenciar recursos. Além disso, é necessário fornecer um nome e uma senha para acessar a instância do Ansible Open Source. Posteriormente, quando você adicionar um componente Ansible a uma implantação, será possível atualizar a conexão para usar a autenticação baseada em chave.

Por padrão, o Ansible usa SSH para se conectar às máquinas físicas. Se estiver usando máquinas Windows conforme especificado no modelo de nuvem com a propriedade osType Windows, a variável connection_type será automaticamente definida como winrm.

Inicialmente, a integração do Ansible usa as credenciais de usuário/senha ou usuário/chave fornecidas na integração para se conectar à máquina de controle do Ansible. Assim que a conexão for bem-sucedida, os playbooks fornecidos no modelo de nuvem serão validados quanto à sintaxe.

Se a validação for bem-sucedida, uma pasta de execução será criada na máquina de controle do Ansible em ~/var/tmp/vmware/provider/user_defined_script/. Esse é o local de onde os scripts são executados para adicionar o host ao inventário, criar os arquivos VARs do host, incluindo a configuração do modo de autenticação para se conectar ao host e, por fim, executar os guias estratégicos. Nesse ponto, as credenciais fornecidas no modelo de nuvem são usadas para conexão com o host a partir da Máquina de controle Ansible.

A integração com o Ansible oferece suporte a máquinas físicas que não usam um endereço IP. Para máquinas provisionadas em nuvens públicas, como a AWS, o Azure e a GCP, a propriedade de endereço no recurso criado é preenchida com o endereço IP público da máquina somente quando a máquina está conectada a uma rede pública. Para máquinas não conectadas a uma rede pública, a integração do Ansible procura o endereço IP da rede conectada à máquina. Se houver várias redes conectadas, a integração do Ansible procurará a rede com o menor valor de deviceIndex; ou seja, o índice da Placa de interface de rede (NIC) conectada à máquina. Se a propriedade deviceIndex não estiver especificada no blueprint, a integração usará a primeira rede conectada.

Consulte O que é o gerenciamento de configuração no Cloud Assembly para obter mais detalhes sobre como configurar o Ansible Open Source para integração no Cloud Assembly.

Pré-requisitos

  • A máquina de controle Ansible deve usar uma versão do Ansible. Consulte a Matriz de Suporte do vRealize Automation para obter informações sobre as versões com suporte.
  • O detalhamento do log do Ansible deve ser definido como o padrão de zero.
  • O usuário deve ter acesso de leitura/gravação ao diretório onde o arquivo de inventário do Ansible está localizado. Além disso, o usuário deve ter acesso de leitura/gravação ao arquivo de inventário, se ele já existir.
  • Se estiver usando um usuário não raiz com a opção sudo, certifique-se de que o seguinte esteja definido no arquivo sudoers:

    Defaults:user_name !requiretty

    e

    username ALL=(ALL) NOPASSWD: ALL

  • Certifique-se de que a verificação de chaves de host esteja desativada, definindo host_key_checking = False em /etc/ansible/ansible.cfg ou ~/.ansible.cfg.
  • Certifique-se de que a senha do cofre esteja definida, adicionando a seguinte linha ao arquivo /etc/ansible/ansible.cfg ou ~/.ansible.cfg:
    vault_password_file = /path/to/password_file
    O arquivo de senha de cofre contém a senha em texto sem formatação e é usado apenas quando os modelos de nuvem ou as implantações fornecem a combinação de nome de usuário e senha a ser usada entre o ACM e o nó, como mostra o exemplo a seguir.
    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
  • Para evitar falhas de chaves de host ao tentar executar os playbooks, é recomendável incluir as seguintes configurações em /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.

Procedimento

  1. Selecione Infraestrutura > Conexões > Integrações e clique em Adicionar Integração.
  2. Clique no Ansible.
    A página de configuração do Ansible é exibida.
  3. Digite o nome do host, o caminho do arquivo de inventário e outras informações necessárias para a instância do Ansible Open Source.
  4. Clique em Validar para verificar a integração.
  5. Clique em Adicionar.

Resultados

O Ansible está disponível para uso com modelos de nuvem.

O que Fazer Depois

Adicione componentes do Ansible aos modelos de nuvem desejados.

  1. Na página da tela do modelo de nuvem, selecione Ansible sob o título Gerenciamento da Configuração no menu de opções do modelo de nuvem e arraste o componente Ansible até a tela.
  2. Use o painel à direita para configurar as propriedades apropriadas do Ansible, como especificar os guias estratégicos a serem executados.

No Ansible, os usuários podem atribuir uma variável a um único host e, em seguida, usá-la mais tarde em playbooks. A integração com o Ansible Open Source permite que você especifique essas variáveis de host em modelos de nuvem. A propriedade hostVariables deve estar no formato YAML apropriado, conforme o esperado pela máquina de controle Ansible, e esse conteúdo será colocado no seguinte local:

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

A localização padrão do arquivo de inventário do Ansible é definido na conta do Ansible, conforme adicionado na página Integrações do Cloud Assembly. A integração com o Ansible não validará a sintaxe YAML de hostVariable no modelo de nuvem, mas a máquina de controle do Ansible lançará um erro quando você executar um playbook no caso de uma sintaxe ou um formato incorreto.

O seguinte snippet YAML de modelo de nuvem mostra um exemplo de uso da propriedade 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}
Integrações Ansible esperam que as credenciais de autenticação estejam presentes em um modelo de nuvem de uma das seguintes maneiras:
  • Nome de usuário e senha no recurso do Ansible.
  • Nome de usuário e privateKeyFile no recurso do Ansible.
  • Nome de usuário no recurso do Ansible e chave privada no recurso de processamento, especificando remoteAccess para generatedPublicPrivateKey.

Ao criar uma integração com o Ansible Open Source, você deve fornecer informações de login para o usuário de integração se conectar à máquina de controle Ansible usando SSH. Para executar manuais com uma integração, você pode especificar um usuário diferente no código YAML da integração. A propriedade username é obrigatória e necessária para a conexão com a máquina virtual na qual o Ansible fará alterações. A propriedade playbookRunUsername é opcional e pode ser fornecida para executar o playbook no nó do Ansible. O valor padrão de playbookRunUsername é o nome de usuário da integração de endpoint do Ansible.

Se você especificar um usuário diferente, esse usuário deverá ter acesso de gravação ao arquivo de hosts Ansible e deverá ter permissão para criar arquivos de chave privada.

Quando você adiciona um bloco Ansible Open Source a um modelo de nuvem, o vRealize Automation cria a entrada de host para a máquina virtual conectada. Por padrão, o vRealize Automation usará o nome do recurso da máquina virtual para criar a entrada do host, mas pode especificar qualquer nome usando a propriedade hostName no YAML do blueprint. Para se comunicar com a máquina, o vRealize Automation criará a variável de host ansible_host: IP Address para a entrada do host. Você pode substituir o comportamento padrão para configurar a comunicação usando FQDN, especificando a palavra-chave ansible_host sob hostVariables e fornecendo o FQDN como seu valor. O seguinte snippet de código YAML mostra um exemplo de como o nome do host e a comunicação FQDN podem ser configurados:

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
			

Neste exemplo, você substitui o valor ansible_host padrão fornecendo o FQDN. Isso pode ser útil para usuários que desejam que o Ansible Open Souce se conecte à máquina host usando o FQDN.

O valor padrão de hostVariables no YAML será ansible_host:IP_address, e o endereço IP é usado para comunicação com o servidor.

Se a propriedade “count” YAML for maior que 1 para o Ansible Open Source, o nome do host poderá ser mapeado para qualquer uma das propriedades da respectiva máquina virtual. O exemplo a seguir mostra o mapeamento de um recurso de máquina virtual chamado Ubuntu-VM quando queremos que sua propriedade “address” seja mapeada para o nome do host.

 hostname: '${resource.Ubuntu-VM.address[count.index]}' 

Em modelos de nuvem, certifique-se de que o caminho para o playbook Ansible esteja acessível ao usuário especificado na conta de integração. Você pode usar um caminho absoluto para especificar a localização do manual, mas isso não é necessário. Um caminho absoluto para a pasta pessoal do usuário é recomendado para que o caminho permaneça válido mesmo se as credenciais de integração do Ansible mudarem com o tempo.