From 20b345e07a91b15c3ca7a875156d5cf262e5b8ba Mon Sep 17 00:00:00 2001 From: Nicolas MASSE Date: Mon, 22 Feb 2021 15:12:45 +0100 Subject: [PATCH] 2021-02-22 update --- ...iguration-edgerouter-edgeswitch-ansible.md | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 content/french/blog/sauvegarder-configuration-edgerouter-edgeswitch-ansible.md diff --git a/content/french/blog/sauvegarder-configuration-edgerouter-edgeswitch-ansible.md b/content/french/blog/sauvegarder-configuration-edgerouter-edgeswitch-ansible.md new file mode 100644 index 0000000..9b4e477 --- /dev/null +++ b/content/french/blog/sauvegarder-configuration-edgerouter-edgeswitch-ansible.md @@ -0,0 +1,108 @@ +--- +title: "Sauvegarder la configuration de ses EdgeSwitch et EdgeRouter avec Ansible" +date: 2021-02-22T00:00:00+02:00 +opensource: +- Ansible +topics: +- IT Automation +--- + +J'utilise des équipements de marque Ubiquiti dans mon réseau informatique à la maison: un EdgeSwitch et un EdgeRouter. +Et jusqu'à présent, je n'avais pas mis en place de moyen simple et automatisé pour sauvegarder leur configuration. +C'est désormais chose faite avec ce playbook Ansible qui me sauvegarde la configuration des deux équipements et me l'enregistre dans un entrepôt Git. + + + +La sauvegarde du EdgeRouter est plutôt triviale car sa configuration est sauvegardée dans `/config/config.boot`. +Un simple **cat** appelé depuis le module **raw** récupère cette configuration et le module **copy** peut le sauvegarder localement. + +```yaml +- name: Backup EdgeRouter configuration + hosts: edgerouter + gather_facts: no + become: no + tasks: + - name: Create a folder for each device + file: + path: '{{ playbook_dir }}/{{ inventory_hostname }}' + state: directory + delegate_to: localhost + + - name: Fetch config.boot + raw: cat /config/config.boot + register: config_boot + + - copy: + dest: '{{ playbook_dir }}/{{ inventory_hostname }}/config.boot' + content: '{{ config_boot.stdout }}' + delegate_to: localhost +``` + +La sauvegarde du EdgeSwitch a été plus difficile. +Il n'existe pas d'accès SSH direct au système de fichiers ou à un shell: tout passe par une CLI type Juniper/Cisco. + +J'ai donc rusé: j'utilise les API REST de l'interface Web Ubiquiti. +Un appel avec le module **uri** d'Ansible pour poster le login / mot de passe et récupérer un jeton d'authentification. +Un second appel toujours avec le même module pour récupérer une sauvegarde de la configuration. + +```yaml +- name: Backup EdgeSwitch Configuration + hosts: edgeswitch + gather_facts: no + become: no + vars_prompt: + - name: ubnt_password + prompt: "EdgeSwitch Admin Password?" + tasks: + - name: Create a folder for each device + file: + path: '{{ playbook_dir }}/{{ inventory_hostname }}' + state: directory + delegate_to: localhost + + - name: Login on EdgeSwitch + uri: + url: 'https://{{ ansible_host }}/api/v1.0/user/login' + method: POST + body_format: json + body: + username: '{{ ubnt_username }}' + password: '{{ ubnt_password }}' + headers: + Accept: "application/json, text/plain, */*" + User-Agent: "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0" + Origin: 'https://{{ ansible_host }}' + Referer: 'https://{{ ansible_host }}/' + validate_certs: no + register: auth + delegate_to: localhost + + - name: Backup EdgeSwitch configuration + uri: + url: 'https://{{ ansible_host }}/api/v1.0/system/backup' + method: GET + headers: + x-auth-token: '{{ auth.x_auth_token }}' + return_content: no + dest: '{{ playbook_dir }}/{{ inventory_hostname }}/edgeswitch.tgz' + validate_certs: no + delegate_to: localhost + + - name: Extract EdgeSwitch configuration + command: + cmd: tar -xf {{ playbook_dir }}/{{ inventory_hostname }}/edgeswitch.tgz -C {{ playbook_dir }}/{{ inventory_hostname }} ./cfg-backup + warn: no + delegate_to: localhost +``` + +Je n'avais pas envie de stocker mon mot de passe administrateur dans l'inventaire c'est pourquoi le playbook le demande à l'utilisateur au démarrage (section **vars_prompt**). +Mais on pourrait tout à fait remplacer le **vars_prompt** par un accès au [coffre fort Ansible](https://docs.ansible.com/ansible/latest/user_guide/vault.html). + +Le login administrateur, lui, est stocké dans le fichier inventaire via la variable **ubnt_username**. + +```ini +[edgeswitch] +my-switch.example.test ansible_host=1.2.3.4 ubnt_username=nicolas +``` + +Les fichiers de configuration sont stockés dans un répertoire propre à chaque équipement... dont il n'y a plus qu'à suivre les versions dans un entrepôt Git !