Comme annoncé, nous allons commencer tout petit : nous sommes sur une session Unix et notre but est d’exécuter la commande « show clock » en pilotant à distance un équipement Cisco. Si vous disposez d’un autre équipement (voir en fin de chapitre), vous pouvez évidemment substituer le show clock par toute autre commande brève.
En automatisation, une bonne habitude est de faire le travail au moins une fois à la main. Aussi, nous nous plaçons sur notre station linux et exécutons les commandes suivantes :
$ ssh -l cisco 10.0.0.230
Warning: Permanently added '10.0.0.230' (RSA) to the list of known hosts.
Password:
csrv1k-230#show clock
*15:29:59.820 UTC Tue May 26 2020
csrv1k-230#
csrv1k-230#exit
Connection to 10.0.0.230 closed.
$
Arrêtons-nous quelques instants sur cette requête de routine pour tout expert réseau. Nous avons eu à fournir les données suivantes :
donnée | description |
---|---|
10.0.0.230 | L’adresse IP de mon routeur |
show clock | La commande à exécuter (bon là je ne vous apprends rien) |
cisco | Le compte utilisé |
cisco | Le password |
Nous avons aussi reçu une notification du système sur l’échange des clefs publiques via la session SSH.
Evidemment, toutes ces informations devront être passées en paramètre à Ansible (et non, il ne les devine pas encore tout seul !).
Installer ansible
Je vais passer rapidement sur l’installation d’Ansible, car cette partie est très bien documentée par ailleurs, et, à part peut-être montrer comment installer une version spécifique, ma valeur ajoutée devrait être faible.
L’installation
Il faut disposer a minima d’un linux en mode serveur. Si vous ne pouvez pas installer une VM sous vmWare, une excellente alternative est d’installer VirtualBox sur un PC Windows ou sur un MacBook et de créer sa VM sous VirtualBox. Pour des tests, un système avec 2gb de RAM et 10Gb de disque suffit amplement. Attention de sélectionner un réseau en mode pont (Bridged Adapter), plutôt que NAT.
Par fainéantise habitude, j’utilise la distribution debian, mais ubuntu convient également et CentOS est probablement le meilleur choix, puisque Ansible, comme CentOS sont maintenus par la même société.
Une fois connecté sur la VM, on lance l’installation :
$ apt-get install ansible
Ou
$ yum install ansible
Cette procédure prend en charge l’installation de plusieurs applications :
application | |
---|---|
python | langage de programmation de Ansible |
pip | utilitaire de mise à jour des librairies python |
jinja2 | un langage de templating codé en python |
ansible | ça c’est ce qu’on voulait |
modules standard d’ansible | Une collection de modules |
La mise à jour
La version installée d’Ansible dépend de la distribution linux installée. On le vérifie en tapant :
$ ansible --version
L’utilisation du module cli_command nécessite la version 2.5. Si le package installé est inférieur, on procède à un upgrade via pip :
$ pip install –upgrade "ansible==2.7.8"
Ma toute première commande
La commande à exécuter est la suivante :
$ ansible all --inventory="csrv1k-230," --module-name=raw --args="show clock" \
--extra-vars="ansible_host=10.0.0.230 ansible_user=cisco ansible_ssh_pass=cisco" \
--ssh-extra-args="-o StrictHostKeyChecking=no"
Bien entendu, l’adresse IP du routeur doit être changée, ainsi qu’éventuellement l’authentification SSH.
On fera aussi bien attention à la virgule qui termine le paramètre inventory.
Nous pouvons également lancer cette même commande en mode verbose, en ajoutant l’argument –vvv :
Nous voyons bien notre commande exécutée correctement même si la mise en forme de la réponse nous déçoit un peu.
Nous y reviendrons bien sûr sur la forme. Mais l’objectif de la semaine prochaine est d’apprendre à lancer cette commande sur plusieurs équipements.
Pour ceux qui n’ont pas de routeurs Cisco sous la main
Eventuellement, il est possible d’utiliser une VM VyOS. L’installation et la configuration initiale sont plutôt bien décrites ici : https://www.tech2tech.fr/installation-dun-routeur-virtuel-leger-avec-vyos/. Pensez à toujours configurer le réseau virtuel en mode pont et non NAT.
La commande ansible devient du type :
$ ansible all --inventory="my_vyos," --module-name=raw --args="vbash -ic 'show date'" \
--extra-vars="ansible_host=10.0.0.230 ansible_user=vyos ansible_ssh_pass=vyos" \
--ssh-extra-args="-o StrictHostKeyChecking=no"