GNU/Linux >> Tutoriels Linux >  >> Linux

Machines virtuelles multipasses à l'aide d'Ansible

Cet article concerne les machines virtuelles multipasses en utilisant Ansible

Prérequis

Une machine virtuelle Multipass doit être créée en suivant les instructions de l'article Machine virtuelle Multipass et s'authentifier à l'aide d'une clé privée. Notez où le fichier contenant la clé privée est stocké.
Le deuxième prérequis est Ansible. Les instructions d'installation d'Ansible se trouvent dans la documentation officielle d'Ansible.

Préparatifs

Les préparations pour l'exemple de cet article sont les suivantes :

  • Créez un répertoire pour contenir les fichiers de l'exemple de cet article.
    J'appellerai mon répertoire "AnsibleMultipass".
  • Copiez le fichier de clé privée, nommé "user_key", dans le nouveau répertoire.
    Ce fichier clé a été créé dans le cadre de la création de la machine virtuelle multipasse dans l'article précédent.
  • Démarrez la VM multipasse dotée d'une authentification basée sur une clé.
  • Trouvez l'adresse IP de la VM multipasse avec l'authentification par clé.
    Cela peut être accompli en utilisant, par exemple, la liste multipasse commande dans une fenêtre de terminal. Dans mon cas, l'IP est 192.168.64.20.

Inventaire Ansible

Un inventaire Ansible indique à Ansible comment se connecter à un ou plusieurs nœuds de l'infrastructure. Ainsi, l'exemple de cet article a une très petite infrastructure qui se compose d'une seule machine virtuelle.

Dans le répertoire AnsibleMultipass, créez un fichier nommé "multipass-vm-inventory.yml" avec le contenu suivant :

all:
  hosts:
    multipassvm1:
      ansible_connection: ssh
      ansible_host: "192.168.64.20"
      ansible_user: vmadmin
      ansible_ssh_common_args: "-o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none"
      ansible_ssh_private_key_file: user_key

Notez que :

  • Il y a un hôte dans ce fichier d'inventaire Ansible :multipassvm1.
  • Le type de connexion à l'hôte est spécifié par la valeur ansible_connection, qui est SSH.
  • L'adresse IP de l'hôte, ou le nom DNS s'il y en a un, est spécifié par la valeur ansible_host.
  • L'adresse IP doit être remplacée par l'adresse IP de la VM Multipass locale.
  • La valeur de ansible_user, vmadmin, est le nom de l'utilisateur qui sera utilisé lors de la connexion à l'hôte.
  • Cette valeur, vmadmin dans cet exemple, doit être le nom d'utilisateur utilisé lorsque les clés ont été générées avec la commande ssh-keygen.
  • Les ansible_ssh_common_args spécifient les arguments communs qui sont ajoutés aux commandes sftp, scp et ssh.
  • Le StrictHostKeyChecking=no désactivera la demande si les nouvelles clés sont approuvées ou non. Au lieu de cela, toutes les nouvelles clés seront ajoutées silencieusement au fichier known_hosts.
  • Les paramètres ControlMaster et ControlPath sont une solution de contournement pour un problème sur mon ordinateur causé par le ControlPath par défaut contenant un espace qui n'a pas été échappé. Ceux-ci peuvent ne pas être nécessaires sur d'autres ordinateurs et peuvent être omis.
  • Enfin, la valeur ansible_ssh_private_key_file spécifie le nom, et éventuellement l'emplacement, du fichier de clé privée qui sera utilisé lors de la connexion à l'hôte.
  • Si un seul nom de fichier est spécifié, l'emplacement du fichier clé est relatif au fichier d'inventaire. Peut être un emplacement absolu.

Modules Ansibles

Avec l'inventaire Ansible en place, nous pouvons désormais exécuter des modules Ansible sur le ou les hôtes de l'inventaire. Ainsi, dans cet article, je ne donnerai que quelques exemples. Vous trouverez une liste de tous les modules Ansible disponibles dans la documentation.

Module de ping

L'un des modules Ansbile est le module ping. Comme indiqué par sa documentation, le module ping essaie de se connecter à un hôte et de vérifier une installation Python utilisable.
Dans une fenêtre de terminal, située dans le répertoire AnsibleMultipass, lancez la commande suivante :

ansible -i multipass-vm-inventory.yml multipassvm1 -m ping

La commande ci-dessus a les paramètres suivants :

  • -i multipass-vm-inventory.yml
    Utilisez un fichier d'inventaire personnalisé nommé multipass-vm-inventory.yml
  • multipassvm1
    Nom de l'hôte sur lequel exécuter le module. Doit être un hôte dans l'inventaire utilisé.
  • -m ping
    Spécifie le nom du module à exécuter – ping dans ce cas.

La sortie résultante devrait ressembler à ceci :

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Comme on peut le voir, la connexion a été établie avec succès avec la VM Multipass et un interpréteur Python a été découvert.

Donc, s'il y a des problèmes lors de l'exécution du module ping sur l'hôte de la machine virtuelle multipasse, ajoutez -vvv à la commande Ansible pour une sortie plus détaillée :

ansible -vvv -i multipass-vm-inventory.yml multipassvm1 -m ping

Avec l'exécution réussie, ce qui précède générera une sortie similaire à la suivante (certaines sorties ont été omises) :

ansible 2.10.3
...
Parsed /Users/ivan/AnsibleMultipass/multipass-vm-inventory.yml inventory source with yaml plugin
...
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/vmadmin/.ansible/tmp `"&& mkdir "` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" && echo ansible-tmp-1621106467.2205691-7451-138900743300503="` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" ) && sleep 0'"'"''
<192.168.64.20> (0, b'ansible-tmp-1621106467.2205691-7451-138900743300503=/home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503\n', b'')
<multipassvm1> Attempting python interpreter discovery
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<192.168.64.20> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3\nENDFOUND\n', b'')
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'/usr/bin/python3 && sleep 0'"'"''
<192.168.64.20> (0, b'{"platform_dist_result": [], "osrelease_content": "NAME=\\"Ubuntu\\"\\nVERSION=\\"20.04.2 LTS (Focal Fossa)\\"\\nID=ubuntu\\nID_LIKE=debian\\nPRETTY_NAME=\\"Ubuntu 20.04.2 LTS\\"\\nVERSION_ID=\\"20.04\\"\\nHOME_URL=\\"https://www.ubuntu.com/\\"\\nSUPPORT_URL=\\"https://help.ubuntu.com/\\"\\nBUG_REPORT_URL=\\"https://bugs.launchpad.net/ubuntu/\\"\\nPRIVACY_POLICY_URL=\\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\\"\\nVERSION_CODENAME=focal\\nUBUNTU_CODENAME=focal\\n"}\n', b'')
...
multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "invocation": {
        "module_args": {
            "data": "pong"
        }
    },
    "ping": "pong"
}
META: ran handlers

Les détails du processus de lecture de la configuration de l'inventaire, de connexion à l'hôte à l'aide de SSH, de vérification d'une installation Python et d'obtention d'informations sur le système d'exploitation de l'hôte peuvent être discernés.

Module de configuration

Le deuxième et dernier module Ansible que je vais essayer dans cet article est le module de configuration, qui rassemble des informations sur les hôtes. Pour recueillir des informations sur l'hôte de la machine virtuelle multipasse, exécutez la commande suivante dans la fenêtre du terminal :

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup

Il y aura beaucoup d'informations sur la console. Heureusement, il est possible de sélectionner un sous-ensemble des informations en appliquant un filtre comme dans cet exemple :

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup -a "filter=ansible_env*"

Ce qui précède rassemble des informations sur le multipassvm1 et ne conserve que les informations dont les clés commencent par ansible_env. Sur mon système, la sortie ressemble à ceci :

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "ansible_env": {
            "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
            "HOME": "/home/vmadmin",
            "LANG": "C.UTF-8",
            "LC_CTYPE": "C.UTF-8",
            "LOGNAME": "vmadmin",
            "MOTD_SHOWN": "pam",
            "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
            "PWD": "/home/vmadmin",
            "SHELL": "/bin/sh",
            "SSH_CLIENT": "192.168.64.1 49301 22",
            "SSH_CONNECTION": "192.168.64.1 49301 192.168.64.20 22",
            "SSH_TTY": "/dev/pts/0",
            "TERM": "xterm-256color",
            "USER": "vmadmin",
            "XDG_RUNTIME_DIR": "/run/user/1000",
            "XDG_SESSION_CLASS": "user",
            "XDG_SESSION_ID": "8",
            "XDG_SESSION_TYPE": "tty"
        },
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false
}

Les variables d'environnement ci-dessus sont définies pour l'utilisateur vmadmin lorsqu'il est connecté à la machine virtuelle multipasse.

La possibilité de créer un inventaire Ansible contenant des hôtes de machines virtuelles multipasses nous permet d'utiliser Ansible avec ce type de machines virtuelles. Nous pouvons ainsi créer des playbooks Ansible pour mettre en place et configurer des machines virtuelles Multipass, ce dont je me servirai dans de prochains articles.


Linux
  1. Guide Ansible :Gérer les fichiers à l'aide d'Ansible

  2. Comment créer un utilisateur Linux avec Ansible

  3. Servir plusieurs domaines en utilisant des hôtes virtuels

  4. Machines virtuelles hebdomadaires, avec scripts de construction

  5. Déploiement d'un dossier de fichiers modèles à l'aide d'ansible

Comment utiliser Ansible pour envoyer un e-mail avec Gmail

Comment installer Ansible sur Ubuntu 20.04

Comment exporter et importer des machines virtuelles VirtualBox

Comment créer des machines virtuelles dans KVM à l'aide de Virt-Manager

Comment gérer les machines virtuelles dans KVM à l'aide de Virt-Manager

Comment créer et gérer des machines virtuelles dans KVM