Cloud Assembly prend en charge l'intégration avec la gestion de la configuration de l'open source Ansible. Après la configuration de l'intégration, vous pouvez ajouter des composants Ansible à des déploiements existants ou nouveaux.

Lorsque vous intégrez l'open source Ansible à Cloud Assembly, vous pouvez le configurer pour qu'il exécute une ou plusieurs règles Ansible dans un ordre spécifique lorsqu'une nouvelle machine est provisionnée, afin d'automatiser la gestion de la configuration. Vous spécifiez les règles souhaitées dans le modèle de cloud correspondant à un déploiement.

Lors de la configuration d'une intégration Ansible, vous devez spécifier la machine hôte de l'open source Ansible, ainsi que le chemin d'accès au fichier d'inventaire qui définit les informations pour la gestion des ressources. Vous devez par ailleurs fournir un nom et un mot de passe pour accéder à l'instance de l'open source Ansible. Par la suite, lorsque vous ajouterez un composant Ansible à un déploiement, vous pourrez mettre à jour la connexion de manière à utiliser l'authentification basée sur les clés.

Par défaut, Ansible utilise SSH pour se connecter aux machines physiques. Si vous utilisez des machines Windows comme spécifié dans le modèle de cloud avec la propriété osType de Windows, la variable connection_type est automatiquement définie sur winrm.

Initialement, l'intégration Ansible utilise les informations d'identification utilisateur/mot de passe ou utilisateur/clé dans l'intégration pour se connecter à la machine de contrôle Ansible. Une fois la connexion établie, les playbooks fournis dans le modèle de cloud font l'objet d'une validation de syntaxe.

Si la validation réussit, un dossier d'exécution est créé sur la machine de contrôle Ansible dans ~/var/tmp/vmware/provider/user_defined_script/. Il s'agit de l'emplacement à partir duquel les scripts s'exécutent pour ajouter l'hôte à l'inventaire, créer les fichiers vars de l'hôte, y compris la configuration du mode d'authentification pour se connecter à l'hôte et enfin exécuter les playbooks. À ce stade, les informations d'identification fournies dans le modèle de cloud sont utilisées pour se connecter à l'hôte à partir de la machine de contrôle Ansible.

L'intégration Ansible prend en charge les machines physiques qui n'utilisent pas d'adresse IP. Pour les machines provisionnées sur des clouds publics tels qu'AWS, Azure et GCP, la propriété d'adresse dans la ressource créée est remplie avec l'adresse IP publique de la machine uniquement lorsque celle-ci est connectée à un réseau public. Pour les machines non connectées à un réseau public, l'intégration Ansible recherche l'adresse IP du réseau associé à la machine. Si plusieurs réseaux sont attachés, l'intégration Ansible recherche le réseau avec le seul deviceIndex (c'est-à-dire, l'index de la carte réseau (NIC) attachée à la machine). Si la propriété deviceIndex n'est pas spécifiée dans le Blueprint, l'intégration utilise le premier réseau attaché.

Pour plus d'informations sur la configuration de l'outil open source Ansible pour l'intégration dans Cloud Assembly, reportez-vous à la section Présentation de la gestion de la configuration dans Cloud Assembly.

Conditions préalables

  • La machine de contrôle Ansible doit utiliser une version Ansible. Pour plus d'informations sur les versions prises en charge, reportez-vous à la Matrice de prise en charge de vRealize Automation.
  • Le niveau de détail du journal Ansible doit être défini sur zéro par défaut.
  • L'utilisateur doit disposer d'un accès en lecture/écriture au répertoire dans lequel se trouve le fichier d'inventaire Ansible. En outre, l'utilisateur doit disposer d'un accès en lecture/écriture au fichier d'inventaire, s'il existe déjà.
  • Si vous utilisez un utilisateur non racine avec l'option sudo, assurez-vous que les éléments suivants sont définis dans le fichier sudoers :

    Defaults:user_name !requiretty

    et

    username ALL=(ALL) NOPASSWD: ALL

  • Assurez-vous que la vérification des clés de l'hôte est désactivée en définissant host_key_checking = False pour /etc/ansible/ansible.cfg ou ~/.ansible.cfg.
  • Assurez-vous que le mot de passe du coffre-fort est défini en ajoutant la ligne suivante au fichier /etc/ansible/ansible.cfg ou ~/.ansible.cfg :
    vault_password_file = /path/to/password_file
    Le fichier de mot de passe du coffre contient le mot de passe en texte brut et est utilisé uniquement lorsque les modèles de cloud ou les déploiements fournissent la combinaison nom d'utilisateur et mot de passe à utiliser entre ACM et le nœud comme illustré dans l'exemple suivant.
    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
  • Pour éviter les défaillances de clé d'hôte lors de la tentative d'exécution des règles, il est recommandé d'inclure les paramètres suivants dans /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.

Procédure

  1. Sélectionnez Infrastructure > Connexions > Intégrations et cliquez sur Ajouter une intégration.
  2. Cliquez sur Ansible.
    La page de configuration Ansible s'affiche.
  3. Entrez le nom d'hôte, le chemin d'accès au fichier d'inventaire et les autres informations requises pour l'instance de l'open source Ansible.
  4. Cliquez sur Valider pour vérifier l'intégration.
  5. Cliquez sur Ajouter.

Résultats

Ansible est disponible pour une utilisation avec des modèles de cloud.

Que faire ensuite

Ajoutez des composants Ansible aux modèles de cloud souhaités.

  1. Sur la page de canevas de modèle de cloud, sélectionnez Ansible sous l'en-tête Gestion de la configuration du menu Options de modèle de cloud, et faites glisser le composant Ansible vers le canevas.
  2. Utilisez le panneau de droite pour configurer les propriétés Ansible appropriées, telles que la spécification des règles à exécuter.

Dans Ansible, les utilisateurs peuvent attribuer une variable à un hôte unique, puis l'utiliser ultérieurement dans les playbooks. L'intégration Ansible open source vous permet de spécifier ces variables d'hôtes dans des modèles de cloud. La propriété hostVariables doit être au format YAML attendu, comme prévu par la machine de contrôle Ansible, et ce contenu sera placé à l'emplacement suivant :

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

L'emplacement par défaut du fichier d'inventaire Ansible est défini dans le compte Ansible comme ajouté sur la page Intégrations de Cloud Assembly. L'intégration Ansible ne validera pas la syntaxe YAML de la propriété hostVariable dans le modèle de cloud, mais la machine de contrôle Ansible renverra une erreur lorsque vous exécuterez un playbook en cas de format ou de syntaxe incorrecte.

L'extrait de code YAML de modèle de cloud suivant présente un exemple d'utilisation de la propriété 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}
Les intégrations d'Ansible s'attendent à ce que les informations d'identification d'authentification soient présentes dans un modèle de cloud de l'une des manières suivantes :
  • Nom d'utilisateur et mot de passe dans la ressource Ansible.
  • Nom d'utilisateur et privateKeyFile dans la ressource Ansible.
  • Nom d'utilisateur dans la ressource Ansible et PrivateKey dans la ressource de calcul en spécifiant remoteAccess sur generatedPublicPrivateKey.

Lorsque vous créez une intégration Open Source Ansible, vous devez fournir des informations de connexion pour que l'utilisateur de l'intégration se connecte à la machine de contrôle Ansible à l'aide de SSH. Pour exécuter des playbooks avec une intégration, vous pouvez spécifier un autre utilisateur dans le code YAML d'intégration. La propriété username est obligatoire pour se connecter à la machine virtuelle sur laquelle Ansible apportera des modifications. La propriété playbookRunUsername est facultative et peut être fournie pour exécuter le playbook sur le nœud Ansible. La valeur par défaut de playbookRunUsername est le nom d'utilisateur de l'intégration du point de terminaison Ansible.

Si vous spécifiez un autre utilisateur, cet utilisateur doit disposer d'un accès en écriture au fichier hosts Ansible et avoir l'autorisation de créer des fichiers de clé privée.

Lorsque vous ajoutez une vignette Ansible Open Source à un modèle de cloud, vRealize Automation crée l'entrée d'hôte pour la machine virtuelle associée. Par défaut, vRealize Automation utilise le nom de ressource de la machine virtuelle pour créer l'entrée de l'hôte, mais vous pouvez spécifier n'importe quel nom à l'aide de la propriété hostName dans le YAML du Blueprint. Afin de communiquer avec la machine, vRealize Automation crée la variable d'hôte ansible_host: IP Address pour l'entrée de l'hôte. Vous pouvez remplacer le comportement par défaut pour configurer la communication à l'aide du nom de domaine complet (FQDN) en spécifiant le mot clé ansible_host sous hostVariables et en fournissant le nom de domaine complet comme valeur. L'extrait de code YAML suivant montre un exemple de configuration de la communication du nom d'hôte et du nom de domaine complet :

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
			

Dans cet exemple, vous remplacez la valeur ansible_host par défaut en fournissant le nom de domaine complet. Cela peut être utile aux utilisateurs qui souhaitent qu'Ansible Open Source se connecte à la machine hôte à l'aide du nom de domaine complet.

La valeur par défaut hostVariables dans le code YAML est ansible_host:IP_address et l'adresse IP est utilisée pour communiquer avec le serveur.

Si la propriété de comptage YAML est supérieure à 1 pour Ansible Open Source, le nom d'hôte peut être mappé à l'une des propriétés de la machine virtuelle respective. L'exemple suivant montre le mappage d'une ressource de machine virtuelle nommée Ubuntu-VM si sa propriété d'adresse doit être mappée au nom d'hôte.

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

Dans les modèles de cloud, assurez-vous que le chemin d'accès au playbook Ansible est accessible à l'utilisateur spécifié dans le compte d'intégration. Vous pouvez utiliser un chemin d'accès absolu pour spécifier l'emplacement du playbook, mais cela n'est pas nécessaire. Un chemin d'accès absolu au dossier de base de l'utilisateur est recommandé pour que le chemin reste valide même si les informations d'identification de l'intégration Ansible changent dans le temps.