vRealize Automation Cloud Assembly ondersteunt integratie met Ansible Open Source-configuratiebeheer. Nadat u de integratie hebt geconfigureerd, kunt u Ansible-onderdelen toevoegen aan nieuwe of bestaande implementaties.

Wanneer u Ansible Open Source integreert met vRealize Automation Cloud Assembly, kunt u dit configureren om een of meer Ansible-playbooks in een bepaalde volgorde uit te voeren wanneer een nieuwe machine wordt ingericht om het configuratiebeheer te automatiseren. U geeft de gewenste playbooks op in de cloudsjabloon voor een implementatie.

Wanneer u een Ansible-integratie instelt, moet u de Ansible Open Source-hostmachine opgeven, evenals het pad naar het inventarisbestand dat informatie voor het beheren van resources definieert. U moet ook een naam en een wachtwoord opgeven om toegang te krijgen tot de Ansible Open Source-instantie. Wanneer u later een Ansible-onderdeel aan een implementatie toevoegt, kunt u de verbinding bijwerken voor het gebruik van verificatie op basis van sleutels.

Ansible gebruikt standaard SSH om verbinding te maken met de fysieke machines. Als u Windows-machines gebruikt zoals opgegeven in de cloudsjabloon met de Windows-eigenschap osType, wordt de variabele connection_type automatisch ingesteld op winm.

In eerste instantie gebruikt Ansible-integratie de inloggegevens gebruikersnaam/wachtwoord of gebruikersnaam/sleutel die in de integratie zijn opgegeven om verbinding te maken met de Ansible-bedieningsmachine. Zodra de verbinding is gelukt, worden de opgegeven playbooks in de cloudsjabloon gevalideerd voor de syntaxis.

Als de validatie is gelukt, wordt een uitvoeringsmap gemaakt op de Ansible-bedieningsmachine bij ~/var/tmp/vmware/provider/user_defined_script/. Dit is de locatie van waaruit scripts worden uitgevoerd om de host aan de inventaris toe te voegen, de vars-bestanden van de host te maken, inclusief de verificatiemodus in te stellen om verbinding te maken met de host, en ten slotte de playbooks uit te voeren. Op dit moment worden de verificatiegegevens in de cloudsjabloon gebruikt om verbinding te maken met de host via de Ansible-bedieningsmachine.

Ansible-integratie ondersteunt fysieke machines die geen IP-adres gebruiken. Voor machines die zijn ingericht in openbare clouds zoals AWS, Azure en GCP, wordt de adreseigenschap in de gemaakte resource alleen ingevuld met het openbare IP-adres van de machine wanneer de machine is verbonden met een openbaar netwerk. Voor machines die niet met een openbaar netwerk zijn verbonden, zoekt de Ansible-integratie naar het IP-adres van het netwerk dat aan de machine is gekoppeld. Als er meerdere netwerken zijn bijgevoegd, zoekt Ansible-integratie naar het netwerk met de minste deviceIndex. Kortom: de index van de netwerkinterfacekaart (NIC) die aan de machine is gekoppeld. Als de eigenschap deviceIndex niet is opgegeven in de blueprint, gebruikt de integratie het eerste gekoppelde netwerk.

Zie Wat is configuratiebeheer in vRealize Automation Cloud Assembly voor meer informatie over het configureren van Ansible-opensource voor integratie in vRealize Automation Cloud Assembly.

Voorwaarden

  • De Ansible-besturingsmachine moet Ansible versie 2.6.0 of hoger gebruiken.
  • De gebruiker moet lees-/schrijftoegang hebben tot de directory waarin het Ansible-inventarisbestand zich bevindt. De gebruiker moet ook lees-/schrijftoegang hebben tot het inventarisbestand, als dit al bestaat.
  • Als u een niet-rootgebruiker gebruikt met de optie sudo, moet u ervoor zorgen dat het volgende is ingesteld in het sudoers-bestand:

    Defaults:user_name !requiretty

    en

    username ALL=(ALL) NOPASSD: ALL

  • Zorg ervoor dat de controle van de hostsleutel is uitgeschakeld door host_key_checking = False in te stellen op /etc/ansible/ansible.cfg of ~/.ansible.cfg.
  • Zorg ervoor dat het kluiswachtwoord is ingesteld door de volgende regel toe te voegen aan het bestand /etc/ansible/ansible.cfg of ~/.ansible.cfg:
    vault password_file = /path/to/password_file
    Het kluiswachtwoordbestand bevat het wachtwoord in platte tekst en wordt alleen gebruikt wanneer cloudsjablonen of implementaties de combinatie van gebruikersnaam en wachtwoord opgeven voor gebruik tussen ACM en het knooppunt zoals weergegeven in het volgende voorbeeld.
    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
  • Om fouten in de hostsleutel te voorkomen tijdens het uitvoeren van playbooks, is het aan te bevelen om de volgende instellingen op te nemen in /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.

Procedure

  1. Selecteer Infrastructuur > Verbindingen > Integraties en klik op Integratie toevoegen.
  2. Klik op Ansible.
    De Ansible-configuratiepagina wordt weergegeven.
  3. Voer de hostnaam, het pad van het inventarisbestand en andere vereiste informatie voor de Ansible Open Source-instantie in.
  4. Klik op Valideren om de integratie te controleren.
  5. Klik op Toevoegen.

resultaten

Ansible kan worden gebruikt met cloudsjablonen.

Volgende stappen

Voeg Ansible-onderdelen toe aan de gewenste cloudsjablonen.

  1. Selecteer Ansible op de canvaspagina van de cloudsjabloon onder de kop Configuratiebeheer in het menu met cloudsjabloonopties en sleep het Ansible-onderdeel naar het canvas.
  2. Gebruik het paneel aan de rechterkant om de geschikte Ansible-eigenschappen te configureren, zoals het opgeven van de playbooks die moeten worden uitgevoerd.

In Ansible kunnen gebruikers een variabele aan één host toewijzen en deze later gebruiken in playbooks. Met Ansible Open Source-integratie kunt u deze hostvariabele in cloudsjablonen opgeven. De eigenschap hostVariables moet de juiste YAML-indeling hebben, zoals verwacht door de Ansible-beheermachine, en deze inhoud wordt op de volgende locatie geplaatst:

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

De standaardlocatie van het Ansible-inventarisbestand wordt gedefinieerd in het Ansible-account dat is toegevoegd op de pagina Integraties in Cloud Assembly. De Ansible-integratie valideert de YAML-syntaxis van hostVariable niet in de cloudsjabloon, maar de Ansible-beheermachine zal er een genereren wanneer u een playbook uitvoert in het geval van een onjuiste indeling of syntaxis.

Het volgende YAML-fragment van de cloudsjabloon toont een voorbeeldgebruik van de eigenschap 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-integraties verwachten dat verificatiegegevens in een cloudsjabloon op een van de volgende manieren aanwezig moeten zijn:
  • Gebruikersnaam en wachtwoord in de Ansible-resource.
  • Gebruikersnaam en privateKeyFile in de Ansible-resource.
  • Gebruikersnaam in Ansible-resource en persoonlijke sleutel in de resourceberekening door remoteAccess naar generatedPublicPrivateKey op te geven.

Controleer in cloudsjablonen of het pad naar het Ansible-playbook toegankelijk is voor de gebruiker die is opgegeven in het integratieaccount. U kunt een absoluut pad gebruiken om de playbooklocatie op te geven, maar dit is niet nodig. Een absoluut pad naar de basismap van de gebruiker wordt aanbevolen, zodat het pad geldig blijft, zelfs als de verificatiegegevens van Ansible-integratie in de loop van de tijd veranderen.