Ansible - SW Cisco / Junip

De Wiki_DR13
Révision datée du 16 janvier 2023 à 17:21 par Alexis.pages (discussion | contributions) (Page créée avec « = Administrer switch Cisco / Junip avec Ansible = Cette page traite de l'installation et la configuration d'Ansible pour gérer la conf des switch Cisco et Juniper. = Pr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Administrer switch Cisco / Junip avec Ansible

Cette page traite de l'installation et la configuration d'Ansible pour gérer la conf des switch Cisco et Juniper.

Prérequis

Afin de mieux gérer le versionning de chacun des paquets, nous utiliserons uniquement des paquets Python en lieu et place des paquets fournis par notre distribution.

Environnement Python

Installer un environnement Python sur sa machine :

Gestionnaire de paquets Python

Installer un package manager pour Python :

Paquets Python

Installation des paquets

Installer Ansible et la librairie paramiko permettant de gérer la connexion SSH avec Ansible :

$ pip install --user ansible
$ pip install --user paramiko==2.8.1

Bugs identifiés

Version des paquets Python

Les versions suivantes ont été testées et sont fonctionnelles :

  • ansible - 6.7.0
  • ansible-compat - 2.2.7
  • ansible-core - 2.13.7
  • paramiko - 2.8.1

Switchs Cisco

Ajouter sa clé SSH sur le switch

Affichage de la clé publique :

$ cat /path/to/ssh/public/key

La clé s'affiche sur une seule ligne. Or, Cisco IOS supporte seulement 254 caractères. Afin de rendre la clé lisible auprès de Cisco IOS, utiliser la commande ci-après pour découper l'affichage en lignes de 100 caractères et enlever le premier champ "ssh-rsa" et le commentaire de fin de fichier.

$ cat /path/to/ssh/public/key | cut -d " " -f 2 | fold -b -w 100
...
...
...
...

Ajouter la clé publique sur le switch (les ... correspondent au résultat de la commande effectuée précédemment) :

(config)#ip ssh pubkey-chain 
(conf-ssh-pubkey)#username user.name
(conf-ssh-pubkey-user)#key-string
(conf-ssh-pubkey-data)#...
(conf-ssh-pubkey-data)#...
(conf-ssh-pubkey-data)#...
(conf-ssh-pubkey-data)#...
(conf-ssh-pubkey-data)#exit

Collections Ansible

Installer la collection cisco.ios :

$ ansible-galaxy collection install cisco.ios

Vérifier que l'on dispose bien des collections suivantes :

$ ansible-galaxy collection list
Collection            Version
--------------------- -------
ansible.netcommon     4.1.0  
ansible.utils         2.6.1  
cisco.ios             3.2.0
community.network     5.0.0

Variables Ansible

Utiliser les variables suivantes pour la connexion à un switch Cisco :

host_key_checking=false
ansible_ssh_user='user.name'
ansible_python_interpreter='/path/to/python/interpreter'
ansible_ssh_private_key_file='/path/to/ssh/private/key'
ansible_connection=ansible.netcommon.network_cli
ansible_network_os=cisco.ios.ios

Switchs Juniper

Paquets Python additionnels

Les switch Juniper nécessitent l'installation des paquets Python ci-après :

  • lxml - 4.9.2
  • ncclient - 0.6.13
$ pip install --user lxml ncclient

Ajouter sa clé SSH sur le switch

Afficher le contenu de sa clé publique :

$ cat /path/to/ssh/public/key
ssh-rsa ... user.name@myhost

Associer la clé à un utilisateur sur le switch :

[edit system login user user.name authentication]
user@host# set ssh-rsa "ssh-rsa ... user.name@myhost"
user@host# commit

Collections Ansible

Installer la collection junipernetworks.junos :

$ ansible-galaxy collection install junipernetworks.junos

Vérifier que l'on dispose bien des collections suivantes :

$ ansible-galaxy collection list
Collection            Version
--------------------- -------
ansible.netcommon     4.1.0  
ansible.utils         2.6.1
community.network     5.0.0
junipernetworks.junos 4.1.0

Variables Ansible

Utiliser les variables suivantes pour la connexion à un switch Cisco :

host_key_checking=false
ansible_ssh_user='user.name'
ansible_python_interpreter='/path/to/python/interpreter'
ansible_ssh_private_key_file='/path/to/ssh/private/key'
ansible_connection=ansible.netcommon.netconf
ansible_port=22
ansible_network_os=cisco.ios.ios

Activation de NETCONF

La configuration des switchs Juniper s'effectue via NETCONF pour tous les modules Ansible excepté junos_netconf. Il s'agit donc du mode à privilégier.

Activation de NETCONF sur le switch Juniper :

[edit system services]
user@host# set netconf ssh
user@host# set ssh
user@host# commit

Vérifier le bon fonctionnement de NETCONF en initiant une connexion SSH (OK si le mot de passe de la clé SSH est demandé) :

$ ssh user.name@host -p 22 -s netconf