Automation Assembler 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 Automation Assembler, 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 winrm.

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 Automation Assembler voor meer informatie over het configureren van Ansible-opensource voor integratie in Automation Assembler.

Voorwaarden

  • De Ansible-controlemachine moet een Ansible-versie gebruiken. Zie de vRealize Automation-ondersteuningsmatrix voor informatie over ondersteunde versies.
  • Uitgebreide logboekgegevens voor Ansible moet standaard worden ingesteld op nul.
  • 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) NOPASSWD: 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 een fout genereren wanneer u een playbook uitvoert en de indeling of syntaxis onjuist is.

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 computerbron door remoteAccess naar generatedPublicPrivateKey op te geven.

Wanneer u een Ansible Open Source-integratie maakt, moet u de aanmeldingsinformatie voor de integratiegebruiker opgeven om verbinding met de Ansible-controlemachine te maken met behulp van SSH. Als u playbooks met een integratie wilt uitvoeren, kunt u een andere gebruiker opgeven in de YAML-code van de integratie. De eigenschap username is verplicht en is vereist om verbinding te maken met de virtuele machine waar Ansible wijzigingen aanbrengt. De eigenschap playbookRunUsername is optioneel en kan worden opgegeven om het playbook op het Ansible-knooppunt uit te voeren. De standaardwaarde van playbookRunUsername is de gebruikersnaam voor Ansible-eindpuntintegratie.

Als u een andere gebruiker opgeeft, moet die gebruiker schrijftoegang hebben tot het Ansible-hostbestand en moet die gebruiker rechten hebben om persoonlijke sleutelbestanden te maken.

Wanneer u een Ansible Open Source-tegel aan een cloudsjabloon toevoegt, maakt VMware Aria Automation de hostvermelding voor de gekoppelde virtuele machine. Standaard gebruikt VMware Aria Automation de resourcenaam van de virtuele machine om de hostvermelding te maken, maar u kunt elke naam opgeven met behulp van de eigenschap hostName in de blueprint-YAML. Om te communiceren met de machine, maakt VMware Aria Automation de hostvariabele ansible_host: IP Address voor de hostvermelding. U kunt het standaardgedrag overschrijven om communicatie met FQDN te configureren, door het trefwoord ansible_host onder hostVariables op te geven en FQDN als bijbehorende waarde op te geven. In het volgende YAML-codefragment ziet u een voorbeeld van hoe hostnaam en FQDN-communicatie kunnen worden geconfigureerd:

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
			

In dit voorbeeld overschrijft u de standaardwaarde van ansible_host door de FQDN op te geven. Dit kan handig zijn voor gebruikers die willen dat Ansible Open Source verbinding maakt met de hostmachine met behulp van de FQDN.

De standaardwaarde van hostVariables in de YAML zal ansible_host:IP_address zijn en het IP-adres wordt gebruikt om met de server te communiceren.

Als de YAML-eigenschap count groter is dan 1 voor Ansible Open Source, kan de hostnaam worden toegewezen aan een van de respectieve eigenschappen van de virtuele machine. In het volgende voorbeeld ziet u de toewijzing van een VM-resource met de naam Ubuntu-VM als wij willen dat de adreseigenschap wordt toegewezen aan de hostnaam.

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

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.

Gebruikers met cloudbeheerdersrechten kunnen het project wijzigen van een implementatie die Ansible Open Source- en Ansible Tower-resources bevat. De functionaliteit is beschikbaar als een actie voor dag 2 op implementatieniveau.

Als u het project voor een Ansible-implementatie wilt wijzigen, selecteert u de optie Project wijzigen in het menu Acties van de implementatie, zoals weergegeven op de pagina Implementaties van Cloud Assembly, kiest u het doelproject en klikt u op Verzenden in het weergegeven dialoogvenster.