Les modules *_config
spécifiques aux fabricants de solutions permettent notamment de mettre à jour la configuration des périphériques du réseau. Il existe plusieurs manières d’utiliser le module *_config
.
Pour placer des commandes de configuration :
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
Pour placer un fichier de configuration :
tasks:
- name: ENSURE THAT ROUTERS ARE SECURE
ios_config:
src: secure_router.cfg
Ansible permet de valider l’impact d’une configuration proposée grâce à l’option --check
. Cette option utilisée en combinaison avec la verbosité --verbose
permet de vérifier les éventuels changements.
ansible-playbook router_configs.yml --check -v
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************************************************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************************************************************************************************
changed: [rtr3] => {"banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"],
"updates": ["snmp-server community ansible-test RO"]}
Nous venons d’apprendre qu’il est possible de mettre à jour la configuration des routeurs en poussant soit directement des commandes de configuration, soit en poussant un fichier de configuration.
Veuillez créer un nouveau fichier nommé router_configs.yml
(soit avec vim
, nano
ou encore en le poussant à partir de votre station de travail, à partir du repo github associé, …) et veuillez ajouter cette définition d’un jeu.
---
- name: SNMP RO/RW STRING CONFIGURATION
hosts: cisco
gather_facts: no
connection: network_cli
Veuillez ajouter une tâche qui s’assure que les communautés SNMP ansible-public
et ansible-private
sont présentes sur tous les routeurs avec le module ios_config
.
Il est toujours utile de relire la documentation des modules avec le binaire local
ansible-doc ios_config
ou à parit du site Web https://docs.ansible.com. Les exemples sont très instructifs.
---
- name: SNMP RO/RW STRING CONFIGURATION
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
Veuillez exécuter le livre de jeu :
ansible-playbook router_configs.yml
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************
changed: [rtr4]
changed: [rtr1]
changed: [rtr3]
changed: [rtr2]
PLAY RECAP **********************************************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0
rtr2 : ok=1 changed=1 unreachable=0 failed=0
rtr3 : ok=1 changed=1 unreachable=0 failed=0
rtr4 : ok=1 changed=1 unreachable=0 failed=0
N’hésitez pas à vous connecter sur les périphériques et à vérifier de visu la mise à jour de la configuration.
Le module ios_config
est idempotent. Cela signifie qu’un changement de configuration n’est réalisé sur le périphérique gérés seulement si cet élément n’existe pas sur la cible. Exécuter à plusieurs reprises l’action déjà réalisée ne devrait pas changer la situation.
Tentons de valider cette idée en relançant une nouvelle fois le même livre de jeu.
ansible-playbook router_configs.yml
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************************************************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************************************************************************************************
ok: [rtr1]
ok: [rtr2]
ok: [rtr4]
ok: [rtr3]
PLAY RECAP **********************************************************************************************************************************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0
Note : Le paramètre changed dans le PLAY RECAP indique aucun (0) changement.
Veuillez mettre à jour la tâche en ajoutant une communauté SNMP RO nommée “ansible-test”.
---
- name: UPDATE THE SNMP RO/RW STRINGS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
Tentons de valider les changements avant de les appliquer grâce aux options --check -v
.
ansible-playbook router_configs.yml --check -v
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************************************************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************************************************************************************************
changed: [rtr3] => {"banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"]}
changed: [rtr1] => {"banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"]}
changed: [rtr2] => {"banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"]}
changed: [rtr4] => {"banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"]}
PLAY RECAP **********************************************************************************************************************************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0
rtr2 : ok=1 changed=1 unreachable=0 failed=0
rtr3 : ok=1 changed=1 unreachable=0 failed=0
rtr4 : ok=1 changed=1 unreachable=0 failed=0
La combinaison des options --check
et de verbosité -v
indique les changements probables.
Vous pouvez vérifier que ces changements n’ont pas été appliqués.
Remarquez que cette trois commandes font partie d’un seule tâche, mais seule la commande manquante sera poussée sur le périphérique.
Finalement, on peut relancer ce livre de jeu sans les options -v
ou --check
pour appliquer les changements.
ansible-playbook router_configs.yml
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************************************************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************************************************************************************************
changed: [rtr1]
changed: [rtr2]
changed: [rtr4]
changed: [rtr3]
PLAY RECAP **********************************************************************************************************************************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0
rtr2 : ok=1 changed=1 unreachable=0 failed=0
rtr3 : ok=1 changed=1 unreachable=0 failed=0
rtr4 : ok=1 changed=1 unreachable=0 failed=0
Plutôt que de pousser chaque ligne de configuration de manière individuelle, un bloc entier de commande pourrait être appliqué sur les périphériques.
Veuillez créer un fichier appelé secure_router.cfg
dans le même dossier que le livre de jeu. Le fichier secure_router.cfg
devrait contenir les lignes Cisco IOS suivantes :
line con 0
exec-timeout 5 0
line vty 0 4
exec-timeout 5 0
transport input ssh
ip ssh time-out 60
ip ssh authentication-retries 5
service password-encryption
service tcp-keepalives-in
service tcp-keepalives-out
Pour rappel un livre de jeu est une liste de jeux.
Veuillez ajouter au livre de jeu router_configs.yml
un nouveau jeu appelé HARDEN IOS ROUTERS
---
- name: UPDATE THE SNMP RO/RW STRINGS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
- name: HARDEN IOS ROUTERS
hosts: cisco
gather_facts: no
connection: network_cli
Veuillez ajouter à ce nouveau jeu une tâche qui pousse la configuration contenue dans le fichier secure_router.cfg
que vous avez créé au moment de l’Étape 8.
---
- name: UPDATE THE SNMP RO/RW STRINGS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
- name: HARDEN IOS ROUTERS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT ROUTERS ARE SECURE
ios_config:
src: secure_router.cfg
Veuillez enfin exécuter ce livre de jeu.
ansible-playbook router_configs.yml
PLAY [UPDATE THE SNMP RO/RW STRINGS] ********************************************************************************************************************************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] *************************************************************************************************************************************
ok: [rtr3]
ok: [rtr2]
ok: [rtr1]
ok: [rtr4]
PLAY [HARDEN IOS ROUTERS] *******************************************************************************************************************************************************************
TASK [ENSURE THAT ROUTERS ARE SECURE] *******************************************************************************************************************************************************
changed: [rtr4]
changed: [rtr3]
changed: [rtr2]
changed: [rtr1]
PLAY RECAP **********************************************************************************************************************************************************************************
rtr1 : ok=2 changed=1 unreachable=0 failed=0
rtr2 : ok=2 changed=1 unreachable=0 failed=0
rtr3 : ok=2 changed=1 unreachable=0 failed=0
rtr4 : ok=2 changed=1 unreachable=0 failed=0