Personnalisation de nœuds d'un lab avec Ansible
Introduction
Lors de l'exécution d'un lab, il peut être nécessaire de déployer différents fichiers ou logiciels sur des machines virtuelles en cours d'exécution. Cela permet de personnaliser un scénario, d'expérimenter un agent avant sa sortie, etc. Ce tutoriel vise à personnaliser les nœuds d'un lab en cours d'exécution. À la fin du tutoriel, vous serez en mesure de provisionner des documents ou des binaires et même d'installer un logiciel.
Préparation du Playbook
Le déploiement est réalisé à l'aide d'ansible qui est intégré dans la plateforme M&NTIS. Le déploiement sur les nœuds nécessite un dossier dédié. Ce dossier doit contenir au moins un fichier playbook.yaml
. Un playbook contient les opérations ansible à exécuter. Le dossier dédié peut contenir des fichiers supplémentaires qui peuvent être utilisés par playbook.yaml
afin de les déployer sur la machine distante.
Playbook pour le déploiement des données
Il est possible de déployer différents fichiers sur un nœud d'un lab en cours d'exécution. Vous devez savoir quel est le nom du nœud sur lequel vous voulez déployer. Dans cet exemple, KAPE.zip
sera copié et ensuite extrait sur une machine virtuelle Windows. Gardez à l'esprit que dans ansible, le déploiement sur une machine Linux peut être différent de celui sur une machine Windows.
---
tasks:
- name: Copying KAPE
ansible.windows.win_copy:
src: kape.zip
dest: "%TMP%\\kape.zip"
register: kape_copy
# Unzipping
- name: Unzipping KAPE
community.windows.win_unzip:
src: "{{ kape_copy.dest }}"
dest: "%TMP%"
register: kape_unzip
- name: Setting the variable KAPE
set_fact:
kape_dir: "{{ kape_unzip.dest }}\\kape"
Playbook pour le déploiement de logiciels
Dans cet exemple, le serveur web nginx
est installé, puis démarré. En se basant sur la section précédente, il est possible de télécharger un fichier de configuration nginx
avant de démarrer le serveur web. Comme vous pouvez le voir, proxy_address
est une variable d'environnement définie au moment du déploiement. Ceci est nécessaire pour activer internet sur la machine pendant le déploiement du playbook (si nécessaire).
---
tasks:
- name: apt-get update
ansible.builtin.apt:
update_cache: true
environment:
http_proxy: "{{ proxy_address }}"
- name: ensure nginx is at the latest version
ansible.builtin.apt:
name: nginx
state: latest
environment:
http_proxy: "{{ proxy_address }}"
- name: start nginx
service:
name: nginx
state: started
Exécution du Playbook
Cet exemple se concentre sur le déploiement du logiciel à partir de l'exécution d'un playbook. L'exécution du playbook dans le lab est réalisée en utilisant le CLI de M&NTIS. Il est possible de définir une variable d'environnement, telle que proxy_address
en tant que paramètre. Cette variable attend l'URL du proxy comme http://xxx.xxx.xxx.xxx:3128
. Le proxy doit exister dans le lab pour pouvoir être utilisé. Si un proxy est disponible dans une topologie, son adresse IP peut être récupérée avec la commande suivante :
$ mantis lab 2f603ea7-98aa-40dd-8f21-e2ee299a02e9 nodes --json | jq '.[] | select(.name == "internetproxy") | .network_interfaces[0].ip_address_runtime'
"192.168.250.1"
Vous devez fournir au moins un nom de machine virtuelle pour l'exécution du playbook. Il est possible de récupérer les noms de machines depuis le frontend de la plateforme M&NTIS directement ou via le CLI de M&NTIS. Une fois que vous avez votre identifiant de lab, vous pouvez exécuter la commande suivante pour récupérer les nœuds des machines virtuelles :
mantis lab 92035f84-2aed-4ec4-b7e3-3ec2210a05bc nodes
[+] Lab nodes
[+] Router1 (router)
[+] network interfaces
- 192.168.250.254/24
- 192.168.33.10/24
[+] RouterGateway (router)
[+] network interfaces
- 192.168.251.1/24
- 192.168.250.253/24
[+] TARGET (virtual_machine)
[+] network interfaces
- 192.168.33.11
[+] Credentials
- username: adurand - password: ecw2020
- admin_username: root - admin_password: Beezh35;
Les playbooks ne peuvent être exécutés que sur des machines virtuelles
. Dans cet exemple, le playbook est exécuté sur la machine virtuelle TARGET
. Ensuite, pour exécuter le playbook sur un nœud cible spécifique, utilisez cette commande :
$ mantis lab 2f603ea7-98aa-40dd-8f21-e2ee299a02e9 provisioning ansible --stream-ansible -c ./deploy-nginx/ -n TARGET -e "proxy_address=http://192.168.250.1:3128"
2024-07-29 13:49:08.450 | INFO | [+] Starting provisioning ansible playbook(s) ./deploy-nginx/ on simulation ID '1'
2024-07-29 13:49:08.522 | INFO | [+] Provisioning task ID: f73f740f-c464-465f-a644-25093bf86850
2024-07-29 13:49:09.587 | INFO | [+] Provisioning task starting...
2024-07-29 13:49:10.644 | INFO | [+] Execute playbook: '/data_ansible/2024_07_29_11_49_08-/playbooks/2024_07_29_11_49_08/playbook.yaml'
2024-07-29 13:49:10.644 | INFO | [+]
2024-07-29 13:49:10.644 | INFO | [+] PLAY [TARGET] ******************************************************************
2024-07-29 13:49:10.644 | INFO | [+]
2024-07-29 13:49:10.644 | INFO | [+] TASK [apt-get update] **********************************************************
2024-07-29 13:49:13.854 | INFO | [+]
2024-07-29 13:49:13.855 | INFO | [+] TASK [ensure nginx is at the latest version] ***********************************
2024-07-29 13:49:14.926 | INFO | [+]
2024-07-29 13:49:14.926 | INFO | [+] TASK [start nginx] *************************************************************
2024-07-29 13:49:15.989 | INFO | [+]
2024-07-29 13:49:15.990 | INFO | [+] PLAY RECAP *********************************************************************
2024-07-29 13:49:15.990 | INFO | [+] TARGET : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2024-07-29 13:49:15.990 | INFO | [+]
2024-07-29 13:49:16.128 | INFO | [+] Provisioning was correctly executed in 7 seconds
Les paramètres de la commande provisioning ansible
sont :
- `--stream-ansible``: pour afficher les journaux en temps réel d'ansible.
-c
: attend un chemin vers un répertoire contenant un fichier ansible nomméplaybook.yaml
.-n
: permet de spécifier le nom de la cible (une utilisation multiple de cette option est autorisée afin d'exécuter le playbook ansible sur plusieurs cibles).-e
: permet de transmettre des arguments supplémentaires au playbook ansible.
Un utilisateur peut évaluer si le playbook s'est exécuté avec succès soit :
- en vérifiant les valeurs
failed
etskipped
de la sortie de l'exécution du playbook ansible ou - depuis la plateforme M&NTIS directement, en se connectant avec un accès VNC ou Spice.
Conclusion
Vous êtes maintenant capable de déployer différents types de fichiers et de données ou même des logiciels sur un lab en fonctionnement.