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 winm.

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 d'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.

Vous devez par ailleurs configurer un proxy cloud si vous utilisez vSphere.

Conditions préalables

  • La machine de contrôle Ansible doit utiliser Ansible version 2.6.0 ou ultérieure.
  • Le cas échéant, assurez-vous que la version de cloudassembly-blueprint-agent dans le proxy cloud est 20 ou une version plus récente.
  • 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) NOPASSD: 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. Si vous avez besoin d'un proxy cloud, cliquez sur NOUVEAU PROXY CLOUD et entrez les informations requises. En général, un proxy cloud est requis uniquement si vous utilisez vSphere. Reportez-vous à la section Ajouter un proxy cloud à une instance de vCenter Server dans Cloud Assembly.
  5. Cliquez sur Valider pour vérifier l'intégration.
  6. 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 lèvera une exception 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.