navigation

frontimage

Infrastructure as Code

Description

Infrastructure as Code Ansible Terraform Packer, © François-Emmanuel Goffinet, 2019

Support de formation de formation sur l’Infrastructure as Code (IaC), ses concepts et ses outils : Ansible, Terraform, Packer.

Sujets

  • Ansible Fonfamental
  • Ansible & Linux
  • Ansible & Networks
  • Ansible & API
  • Ansible & AWS
  • Ansible & Containers
  • Ansible & Windows

Livres de jeu utilisés dans le document

Livres de jeu du guide Ansible

Infrastructure as Code Ansible Terraform Packer, © François-Emmanuel Goffinet, 2019

Copyright © Red Hat, Inc | Ansible.

Ansible is released under the terms of the GPLv3 License.

License MIT github.com/network-automation/linklight

Copyright © Cisco Systems

Sommaire du document

  • Introduction à l'IaC
  • Partie I Introduction à l’Infrastructure as Code Partie Introduction Infrastructure as Code. Principes Iac L'Infrastructure en tant que Code (IaC) est un type d'infrastructure informatique que les équipes d'exploitation peuvent automatiquement gérer et approvisionner via du code, plutôt que d'utiliser un processus manuel ou interactif. L'IaC suppose que l'infrastructure soit écrite dans des fichiers maintenus dans un logiciel de contrôle de sources (SCM). L'IaC se fonde aussi sur l'usage d'outils spécifiques qui se différencient en termes de fonctionnement, d'objectif (de départ), de capacités ou de support.

    • Principes Iac
    • L'Infrastructure en tant que Code (IaC) est un type d'infrastructure informatique que les équipes d'exploitation peuvent automatiquement gérer et approvisionner via du code, plutôt que d'utiliser un processus manuel ou interactif. L'IaC suppose que l'infrastructure soit écrite dans des fichiers maintenus dans un logiciel de contrôle de sources (SCM). L'IaC se fonde aussi sur l'usage d'outils spécifiques qui se différencient en termes de fonctionnement, d'objectif (de départ), de capacités ou de support. Les outils d'automatisation de l'infrastructure sont souvent inclus comme composants d'une chaîne d'outils DevOps.

      • Objectifs Outils Iac
      • 1. Configuration Management tool En génie logiciel, la gestion de la configuration logicielle (SCM ou S / W CM) consiste à suivre et à contrôler les modifications apportées au logiciel, dans le cadre plus large du domaine multidisciplinaire de la gestion de la configuration. Les pratiques SCM incluent le contrôle des révisions et l’établissement de “baselines”. Si quelque chose ne fonctionne pas, SCM peut déterminer ce qui a été changé et qui l’a modifié.

        • Marchés des Outils Iac
        • Homogénéité/hétérogénité des outils, adoption du marché, courbe d’apprentissage … 1. Google Trends Ansible, Puppet, Terraform Google Trends : Ansible Puppet Terraform Google Trends Ansible, Puppet, Terraform 2. Adoption d’Ansible dans la gestion du nuage Dans le cadre des technologies en nuage, RightScale a mené une enquête sur leur usage. Ansible prend la première place parmi les outils de configuration utilisés dans le nuage. Parmi tous les répondants, Ansible est à 41 % d’adoption, suivi de Chef et Puppet à 37 % d’adoption.

          • Présentation des Outils IaC
          • On trouvera ici la présentation des projets Ansible, Chef, SaltStack, CFEngine, Puppet et Terraform.

          • Ansible Fondamental
          • Partie II.1. Ansible Fondamental Partie Ansible Fondamental. Projet Ansible 1. Projet Ansible Ansible est une plate-forme logicielle pour la configuration et la gestion des ordinateurs. Le logiciel combine le déploiement de logiciels multi-noeuds, l’exécution des tâches ad-hoc, et la gestion des configurations. Il gère les différents noeuds avec un accès à distance natif (tels que les protocoles SSH ou Remote PowerShell ou encore des APIs natives) et ne nécessite l’installation d’aucun logiciel supplémentaire à distance, avec parallélisation, collecte de métadonnées et gestion des états.

            • Projet Ansible
            • 1. Projet Ansible Ansible est une plate-forme logicielle pour la configuration et la gestion des ordinateurs. Le logiciel combine le déploiement de logiciels multi-noeuds, l’exécution des tâches ad-hoc, et la gestion des configurations. Il gère les différents noeuds avec un accès à distance natif (tels que les protocoles SSH ou Remote PowerShell ou encore des APIs natives) et ne nécessite l’installation d’aucun logiciel supplémentaire à distance, avec parallélisation, collecte de métadonnées et gestion des états.

              • Solution Ansible
              • 1. Terminologie Ansible En vue de contrôler des noeuds distants, des utilisateurs lancent des “playbooks” à partir d’un noeud de contrôle grâce à Ansible Engine. Ansible Engine est composé de : Modules Plugins API Inventaire (inventory) Ansible Engine connecte et se pratique de manière différente sur les hôtes terminaux (Linux/Unix et Windows) et les périphériques du réseau. Il s’agit de périphériques dont les missions et la gestion sont bien différentes.

                • Installation Ansible
                • Ce document se fonde sur la page officielle Ansible Installation Guide 1 Installation via PIP Centos sudo easy_install pip sudo pip install ansible Debian/Ubuntu sudo apt update sudo apt -y install python-pip sudo pip install --upgrade pip sudo pip install ansible sudo apt -y install sshpass En supplément si vous rencontrez cette erreur à l’installation d’Ansible paramiko 2.4.2 has requirement cryptography>=1.5, but you'll have cryptography 1.2.3 which is incompatible. :

                  • Configuration Ansible
                  • Le comportement d’Ansible peut être influencé de différentes manières : en configurant des variables d’environnement en passant directement les paramètres sur la ligne de commande ansible ou ansible-playbook en définissant un fichier de configuration ansible.cfg 1. Commande ansible-config La commande ansible-config list donne la liste des variables de configuration chargée dans le système de contrôle. Voyez-vous même : ansible-config list 2. Fichier de configuration ansible.cfg On peut changer ces variables de configuration en renseignant un fichier de configuration.

                    • Binaires Ansible
                    • Références : Working with Command Line Tools Binaire Description ansible Binaire initial pour l’exécution de commandes ad-hoc ansible-config Vérifie la configuration courante d’Ansible ansible-inventory Liste les informations de l’inventaire en format JSON ou YAML ansible-doc Permet de consulter la documentation hors-ligne ansible-playbook Permet d’exécuter des livres de jeu ansible-vault Permet de chiffrer les fichiers qui contiennent des données sensibles ansible-galaxy Permet de gérer des rôles sur Ansible galaxy ansible-console Offre une console interactive REPL pour l’exécution de tâches Ad-Hoc ansible-pull ansible-pull est un petit script qui prend ses informations de configuration d’un repo git et qui exécute un livre de jeu Ansible sur ce contenu ansible-test Utilitaire de test 1.

                      • Modules Ansible
                      • Les modules Ansible sont des bouts de codes écrits principalement en Python (mais tout langage supportant les retours JSON sont autorisés) pour modifier l’état d’une propriété d’un hôte. Les modules sont invoqués par l’exécution de tâches soit directement dans la ligne de commande ansible ou dans des livres de jeu. 1. Documentation des modules Certains trouveront la documentation en ligne des modules plus agréable à lire : https://docs.ansible.com/ansible/latest/modules/modules_by_category.html. Mais on obtient le même résultat localement sur la machine de contrôle :

                        • Format JSON Ansible
                        • Ansible présente en sortie standard les résultats de ses actions en format JSON. 1. JavaScript Object Notation (JSON) JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information structurée comme le permet XML par exemple. Les types de données de base de JSON sont les suivantes : Nombre Chaîne de caractères : une séquence de zéro ou plus de caractères Unicode.

                          • Format YAML pour Ansible
                          • Pour Ansible, presque tous les fichiers YAML commencent par une liste. Chaque élément de la liste est une liste de paires clé / valeur, communément appelée “hash” ou “dictionary”. Il est donc nécessaire de savoir écrire des listes et des dictionnaires en YAML.1 On ici trouvera le minimum à connaître pour utiliser Ansible. 1. Début du fichier Tous les fichiers YAML (indépendamment de leur association avec Ansible ou non) peuvent éventuellement commencer par --- et se terminer par .

                            • Inventaire Ansible
                            • La portée d’un jeu (“play”) au sein du livre de jeu, le “playbook”, est limitée aux groupes d’hôtes définis dans l’inventaire (”inventory”). La page de documentation sur l’inventaire est certainement à consulter : Introduction à l’inventaire Ansible. Une inventaire peut être une collection d’hôtes définis dans un fichier plat ou un script dynamique (qui interroge un CMDB par exemple) qui génère une liste de périphériques à utiliser dans “playbook”. Il est peut être statique, soit défini d’avance ; il peut se créer dynamiquement ou encore être mis à jour dynamiquement.

                              • Livres De Jeu Ansible
                              • 1. Introduction Un livre de jeux (playbook) est un fichier YAML constitué d’une liste de jeux. Chaque jeu comporte des sections qui définissent de manière obligatoire sa portée en désignant les hôtes ou les groupes d’inventaire (hosts:), et de manière optionnelle des paramètres de connexion, des paramètres d’élévation de privilèges, des variables et différentes actions qui comportent des listes de tâches (tasks:, roles:, handlers:, etc.). Un premier exemple de livre de jeu pourrait être celui-ci :

                                • Tâches en Blocks Ansible
                                • Blocks Les blocs permettent le regroupement logique des tâches et la gestion des erreurs dans le jeu. Tout ce que l’on peut appliquer à une tâche unique peut être appliqué au niveau du bloc ce qui facilite également la définition de données ou de directives communes aux tâches. Cela ne signifie pas que la directive affecte le bloc lui-même, mais elle est héritée par les tâches délimitées dans un bloc.

                                  • Actions Locales et Délegation
                                  • Delegation, Rolling Updates, and Local Actions Si vous souhaitez exécuter une tâche sur un hôte en faisant référence à d’autres hôtes, utilisez le mot-clé delegate_to sur une tâche. --- - hosts: webservers serial: 5 tasks: - name: take out of load balancer pool command: /usr/bin/take_out_of_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 - name: actual steps would go here yum: name: acme-web-stack state: latest - name: add back to load balancer pool local_action: command /usr/bin/add_back_to_pool {{ inventory_hostname }} Il existe également une syntaxe abrégée local_action: qui inclut la tâche locale au lieu delegate_to: 127.

                                    • Tags Ansible
                                    • Tags Si vous avez un grand livre de jeu, il peut s’avérer utile de ne pouvoir en exécuter qu’une partie spécifique plutôt que de tout lire dans le livre. Ansible prend en charge un attribut «tags:» pour cette raison. Lorsque vous exécutez un livre de jeu, vous pouvez filtrer les tâches en fonction des “tags” de deux manières: Sur la ligne de commande, avec les options --tags ou --skip-tags Dans les paramètres de configuration Ansible, avec les options TAGS_RUN et TAGS_SKIP Les “tags” peuvent être appliqués à de nombreuses structures dans Ansible :

                                      • Gestion des Erreurs Ansible
                                      • 1. Ignorer les tâches en échec Une tâche qui échoue (failed) arrête la lecture du livre de jeu. ignore_errors permet d’outrepasser ce comportement. - name: this will not be counted as a failure command: /bin/false ignore_errors: yes 2. Contrôler l’état changed Annulation du résultat “changed”. Lorsqu’un shell, une commande ou un autre module s’exécute, il indique généralement le statut “changed” selon qu’il pense ou non qu’il affecte l’état de la machine.

                                        • Gestion Connexions Ansible
                                        • - name: "PLAY 1: demo playbook" hosts: localhost connection: local …

                                          • Elevation de Privileges Ansible
                                          • https://docs.ansible.com/ansible/latest/user_guide/become.html - name: "PLAY 1: demo playbook" hosts: localhost remote_user: root become: yes become_user: user become_method: sudo

                                            • Ansible Vault
                                            • Ansible-Vault et Variables and Vaults best practices Il y a certainement beaucoup d’approches pour protéger des variables confidentielles utilisées dans les livres de jeu : Selon un certain niveau de sécurité, on pourra utiliser des variables d’environnement (notamment pour stocker des TOKEN). Chiffrer un fichier de variables secrètes et encoder un mot de passe à chaque usage. Chiffrer la valeur uniquement. … Une autre approche fonctionnelle consiste à placer son mot de passe dans un fichier dans un emplacement protégé avec des droits restreints, en tout cas en dehors du livre de jeu et de dépôt de contrôle de version.

                                              • Import Include Ansible
                                              • 1. Inclusions Il est possible d’ “inclure” dans un livre de jeu des fichiers qui comprennent une liste de jeux ou de tâches avec un module include*. Notons que le module include est déprécié depuis la version Ansible 2.4 au profit de include_tasks et import_tasks Le module include_tasks est appelé sur le bon niveau hiérarchique. Un liste de tâches se trouvera sous la directive tasks. Par exemple : - hosts: all tasks: - debug: msg: task1 - name: Include task list in play include_tasks: stuff.

                                                • Roles Ansible-Galaxy
                                                • Ansible Galaxy fait référence au site Web de Galaxy à partir duquel les utilisateurs peuvent partager des rôles. Il fait aussi référence à un outil en ligne de commande pour l’installation, la création et la gestion de rôles à partir de dépôts git. Les rôles permettent de charger automatiquement certains fichiers vars_files, tasks et handlers en fonction d’une structure de fichier connue. Le regroupement de contenu par rôles permet également de les partager facilement avec d’autres utilisateurs.

                                                  • Ansible Tower Awx Ansible
                                                  • 1. Description Ansible Tower est Ansible au niveau de l’entreprise. Il s’agit d’une solution Web permettant de gérer une organisation avec une interface utilisateur très simple qui fournit un tableau de bord avec des résumés de l’état de tous les hôtes, qui permet des déploiements rapides et surveille toutes les configurations. Tower permet de partager les informations d’identification SSH sans les exposer, de consigner tous les travaux, de gérer graphiquement les inventaires et de les synchroniser avec un large éventail de fournisseurs clouds.

                                                    • Glossaire Ansible
                                                    • https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html Action Une action fait partie d’une tâche qui précise les modules à exécuter et les arguments à transmettre à ce module. Chaque tâche ne peut avoir qu’une seule action, mais elle peut aussi avoir d’autres paramètres. Ad Hoc Désigne l’exécution d’Ansible pour exécuter une commande rapide, en utilisant /usr/bin/ansible, plutôt que le langage d’orchestration, qui est /usr/bin/ansible-playbook. Un exemple de commande ad hoc pourrait être le redémarrage de 50 machines dans votre infrastructure.

                                                    • Automation Ansible Linux
                                                    • Partie II.2. Automation Ansible Linux Partie Automation Ansible Linux. Environnement de lab Linux Ansible 1. Installation du stack Libvirtd Afin de mieux profiter des capacités de virtualisation d’un hôte Linux, il est recommandé d’installer le stack “libvirtd”. Installation des pré-requis : echo "Go to the home folder" cd echo "Install Git" apt-get -y install git echo "Clone the virt-script repo on Github" git clone https://github.com/goffinet/virt-scripts echo "Go to the virt-scripts folder" cd virt-scripts echo "Install the requirements" .

                                                      • Environnement de lab Linux Ansible
                                                      • 1. Installation du stack Libvirtd Afin de mieux profiter des capacités de virtualisation d’un hôte Linux, il est recommandé d’installer le stack “libvirtd”. Installation des pré-requis : echo "Go to the home folder" cd echo "Install Git" apt-get -y install git echo "Clone the virt-script repo on Github" git clone https://github.com/goffinet/virt-scripts echo "Go to the virt-scripts folder" cd virt-scripts echo "Install the requirements" ./autoprep.sh systemctl stop apache2 Test en lançant trois invités :

                                                        • Mode Ad-Hoc
                                                        • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/08-mode-adhoc Liste des modules utilisés ping setup apt service yum easy_install iptables mysql_user user group stat copy fetch file git 1. Pré-requis Le mode ad-hoc permet d’exécuter des tâches ad-hoc. Rappelons qu’une tâche n’est rien d’autre que l’appel à un module. Un fichier de configuration et un inventaire sont nécessaires. [webservers] app1 app2 [dbservers] db [all:vars] ansible_connection=ssh ansible_user=root ansible_ssh_pass=testtest 2. Se documenter Se documenter sur la commande ansible La commande ansible offre la possibilité d’exécuter des modules ansible de manière “ad-hoc”, c’est à dire tâche par tâche, commande par commande.

                                                          • Un premier playbook
                                                          • 1. Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/09-un-premier-playbook 2. Variables Il est de bonne pratique d’organiser ses procédures avec des variables. Les variables Ansible peuvent être déclarées à différents endroits. Dans l’inventaire ou dans les group_vars/’ ou ‘host_vars/. Mais aussi dans le livre de jeu, sous forme de : valorisation directe en référence à un fichier en incluant des variables d’environnement par “inclusion” sont générés ou récoltées dynamiquement (facter) viennent de l’inventaire sont définies par défaut dans un rôle Les variables sont applées en format Jinja2 sous la forme : {{ interface }} ou encore {{ ipv4.

                                                            • Déployer un serveur Node.JS sur Centos
                                                            • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/10-deployer-un-serveur-nodejs-centos Objectifs Un second livre de jeux. Enregistrement de variables (register:) et appel de la variable dans une autre tâche sous condition (when:) 1. Présentation Dans cet exemple, on déploie une application Node.JS avec NPM sur Centos. Il s’agit d’un exemple de déploiement simple d’un stack de développement. 2. Variables On définit une variable node_apps_location dans le jeu. On peut définir la variable dans la ligne de commande --extra-vars="node_apps_location=/usr/local/opt/node"

                                                              • Drupal sur plateforme LAMP sur Ubuntu
                                                              • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/11-lamp-drupal-ubuntu 1. Défintion du jeu --- - hosts: all become: yes vars_files: - vars.yml pre_tasks: - name: Update apt cache if needed. apt: update_cache=yes cache_valid_time=3600 handlers: - name: restart apache service: name=apache2 state=restarted 2. Variables Le livre de jeu est accompagné d’un fichier vars.yml qui contient des variables : --- # The core version you want to use (e.g. 8.5.x, 8.6.x). drupal_core_version: "8.6.x" # The path where Drupal will be downloaded and installed.

                                                                • Jouer avec les facts et les variables
                                                                • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/12-jouer-facts Objectifs Jouer avec les Ansible Conditionals Créer, récupérer et stocker des données Variables et facts boucles 1. Valeurs de retour Valeurs de retour 2. Définir des variables vars et vars_files register, setfact 3. Créer un fichier de données Le fichier data.yml par exemple. --- group: "omega" users: - name: alfa password: testtest - name: beta password: testtest 4. Utiliser les données - name: print out data.

                                                                  • Inclusions, imports et rôles
                                                                  • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/14-includes-ansible https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/14-roles-ansible Objectifs Transformer les deux scripts d’application Web avec des includes sur debian/ubuntu (Drupal) et en rôle sur Centos (Node.js). 1. Inclusions, imports et rôles Including and Importing Roles Ansible Galaxy 2. Inclusions Il est possible d’ “inclure” dans un livre de jeu des fichiers qui comprennent une liste de jeux ou de tâches avec un module include*.

                                                                    • Infrastructure LAMP
                                                                    • Source Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/15-infrastructure-lamp 1. Architecture The architecture for the example web application will be: -------------------------- | varnish.test (Varnish) | | 192.168.2.2 | -------------------------- / \ ---------------------- ---------------------- | www1.test (Apache) | | www2.test (Apache) | | 192.168.2.3 | | 192.168.2.4 | ---------------------- ---------------------- \ / ------------------------------ | memcached.test (Memcached) | | 192.168.2.7 | ------------------------------ / \ ----------------------------- ---------------------------- | db1.test (MySQL - Master) | | db2.test (MySQL - Slave) | | 192.

                                                                      • Solutions
                                                                      • 1. Git en mode Ad-hoc ansible localhost -m git -a "repo=https://github.com/goffinet/guide-ansible-playbooks dest=/home/userlab/guide-ansible-playbooks" 2. Certificats TLS auto-signés Solution 1 : Module command Voici une solution fonctionnelle avec le module command mais elle est “brut de décoffrage”. - name: Install nginx and python-openssl apt: name: - nginx - python-openssl update_cache: yes cache_valid_time: 3600 - name: Create self-signed certificate, if configured. command: > openssl req -x509 -nodes -subj '/CN=localhost' -days 365 -newkey rsa:4096 -sha256 -keyout {{ key_file }} -out {{ cert_file }} creates={{ cert_file }} notify: restart nginx - name: "fix right on key file" file: name: "{{ key_file }}" mode: 0600 notify: restart nginx Solution 2 : Modules openssl_* Voici une solution avec des variables et des tâches idempotentes grâce aux modules Ansibles openssl_* :

                                                                      • Ansible Réseau
                                                                      • Partie II.3. Ansible Réseau Partie Ansible Réseau. Prérequis Lab Ansible automation réseau 1. Installation de GNS3 Server sur un serveur (distant) Installation de GNS3 Server sur un serveur (distant). cd /tmp curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh \ > gns3-remote-install.sh bash gns3-remote-install.sh --with-openvpn Il sera nécessaire de redémarrer matériellement le serveur. On charge une topologie mise à disposition et on attaque la gestion directement à partir de l’hôte de virtualisation ou à partir d’un hôte dans la topologie.

                                                                        • Prérequis Lab Ansible automation réseau
                                                                        • 1. Installation de GNS3 Server sur un serveur (distant) Installation de GNS3 Server sur un serveur (distant). cd /tmp curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh \ > gns3-remote-install.sh bash gns3-remote-install.sh --with-openvpn Il sera nécessaire de redémarrer matériellement le serveur. On charge une topologie mise à disposition et on attaque la gestion directement à partir de l’hôte de virtualisation ou à partir d’un hôte dans la topologie. 2. Préparation des périphériques Les noeuds gérés, s’ils sont Unix, doivent disposer de Python 2.

                                                                          • Explorer l'environnement de lab
                                                                          • Étape 1 : Dossier de travail Créer si n’est déjà fait le dossier networking-workshop et s’y rendre. mkdir networking-workshop cd networking-workshop/ Étape 2 : Vérification de la configuration Lancer la commande ansible avec l’option --version pour examiner sa configuration. ansible --versionansible 2.6.2 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.

                                                                            • Écrire un premier playbook
                                                                            • 1. Rappel théoriques Maintenant que vous en savez assez sur le fichier d’inventaire et les variables de groupe et d’hôte, nous allons écrire notre premier livre de jeu. Playbook definition for network automation La cible d’un jeu est défini par la directive hosts Définir le type de connexion : connection : network_cli À propos de gather_facts Exécuter un livre de jeu --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco connection: network_cli gather_facts: no tasks: - name: GATHER ROUTER FACTS ios_facts:ansible-playbook gather_ios_data.

                                                                              • Module documentation, Registering output & tags
                                                                              • 1. Théorie Modules Modules do the actual work in ansible, they are what gets executed in each playbook task. Typically written in Python (but not limited to it) Modules are idempotent Modules take user input in the form of parameters Network modules Ansible modules for network automation typically references the vendor OS followed by the module name. *_facts *_command *_config more modules depending on platform

                                                                                • Mise à jour de configuration
                                                                                • 1. Théorie The *_config module Vendor specific config modules allow the user to update the configuration on network devices. Different ways to invoke the *_config module: 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 ROtasks: - name: ENSURE THAT ROUTERS ARE SECURE ios_config: src: secure_router.cfg Validating changes before they are applied Ansbile lets you validate the impact of the proposed configuration using the –check flag.

                                                                                  • Backing and Restoring router configuration
                                                                                  • 1. Théorie Backing up router configuration --- - name: BACKUP ROUTER CONFIGURATIONS hosts: cisco connection: network_cli gather_facts: no tasks: - name: BACKUP THE CONFIG ios_config: backup: yes register: config_output The backup parameter of the ios_config module triggers the backup and automatically stores device configuration backups within a backups directory Cleaning up the backed up configuration The backed up configuration has 2 lines that should be removed: Building configuration... Current configuration with default configurations exposed : 393416 bytes The lineinfile module is a general purpose module that is used for manipulating file contents.

                                                                                    • Introduction modèle Jinja2
                                                                                    • 1. Théorie Templates Ansible has native integration with the Jinja2 templating engine Render data models into device configurations Render device output into dynamic documentation Jinja2 enables the user to manipulate variables, apply conditional logic and extend programmability for network automation. Using templates to generate configuration Data model: vlans: - id: 10 name: WEB - id: 20 name: APP - id: 30 name: DB Jinja2 template vlan {{ vlan.

                                                                                      • Documentation dynamique
                                                                                      • 1. Données structurées et rôles Structured data from show commands rtr2#show interfaces GigabitEthernet1 is up, line protocol is up Hardware is CSR vNIC, address is 0e56.1bf5.5ee2 (bia 0e56.1bf5.5ee2) Internet address is 172.17.16.140/16 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full Duplex, 1000Mbps, link type is auto, media type is Virtual output flow-control is unsupported, input flow-control is unsupported ARP type: ARPA, ARP Timeout 04:00:00 .

                                                                                        • Ansible Cisco CCNA
                                                                                        • https://github.com/goffinet/ansible-ccna-lab/blob/master/README.md 1. Mise en place minimale Images GNS3 image IOSv (kvm) image IOSv-L2 (kvm) image Centos (kvm) Routeurs On utilise des IOSv pour les routeurs L3 avec 8 interfaces GigabitEthernet. L’interface GigabitEthernet0/7 sert de console de contrôle TCP/IP et ne participe pas au routage. SSH est activé de la manière suivante, sur R1 par exemple : hostname R1 int GigabitEthernet0/7 ip address dhcp no shutdown no cdp enable ip domain-name lan username root privilege 15 password testtest crypto key generate rsa modulus 2048 ip ssh version 2 ip scp server enable line vty 0 4 login local transport input ssh end wr Commutateurs On utilise des IOSv-L2 pour les commutateurs multicouches.

                                                                                        • Ansible Avancé
                                                                                        • Partie II.4. Ansible Avancé Partie Ansible Avancé. Ansible et Docker 1. Démarrer une automation Ansible de Docker Voir Getting Started with Docker. 2. Ansible pour gérer des conteneurs Docker ansible-container, ansible-container on Github “ansible-container” fournit un workflow basé sur Ansible pour la création, l’exécution, le test et le déploiement de conteneurs. Ansible Container vous permet de créer des images de conteneur et de les orchestrer en utilisant uniquement les livres de jeu Ansible.

                                                                                          • Ansible et Docker
                                                                                          • 1. Démarrer une automation Ansible de Docker Voir Getting Started with Docker. 2. Ansible pour gérer des conteneurs Docker ansible-container, ansible-container on Github “ansible-container” fournit un workflow basé sur Ansible pour la création, l’exécution, le test et le déploiement de conteneurs. Ansible Container vous permet de créer des images de conteneur et de les orchestrer en utilisant uniquement les livres de jeu Ansible. Décrivez votre application dans un seul fichier YAML et, plutôt que d’utiliser un fichier Dockerfile, répertoriez les rôles Ansible qui constituent vos images de conteneur.

                                                                                            • Testing avec Ansible
                                                                                            • Source : https://gist.github.com/michaellihs/dce661376674692f0e8a5694ece2ffb6 Testing avec Ansible https://www.ansible.com/blog/testing-ansible-roles-with-docker http://docs.ansible.com/ansible/latest/test_strategies.html https://www.ansible.com/blog/five-questions-testing-ansible-playbooks-roles https://github.com/chrismeyersfsu/provision_docker Testing Ansible Roles & Projects https://www.youtube.com/watch?v=5nddt6X2Alg&feature=youtu.be

                                                                                              • Jouer des APIs REST HTTP
                                                                                              • Voir guide-ansible-playbooks/ansible-api-gns3 Module uri Module wait_for_connection Module wait_for

                                                                                              • Terraform
                                                                                              • Partie III Automation Terraform Lorem Ipsum.

                                                                                                • Packer
                                                                                                • Partie IV Construction d’images avec Packer Lorem Ipsum.

                                                                                                  • Annexes
                                                                                                  • Partie V. Annexes Annexes. Bibliographie Ansible Bibliographie Ansible Documentation Ansible Jason Edelman, Network Automation with Ansible, O’Reilly Media, Inc, 2016. Lorin Hochstein, Rene Moser, Ansible: Up and Running, 2nd Edition, O’Reilly Media, Inc, 2018., Github Repo Ansible Automation Workshops Jeff Geerling, Ansible for DevOps, Server and configuration management for humans, LeanPub, 2018 Github Repo Liens Ansible Training Course for Ansible Network Automation Ansible role for hardening a Cisco IOS router or switch https://www.

                                                                                                    • Bibliographie Ansible
                                                                                                    • Bibliographie Ansible Documentation Ansible Jason Edelman, Network Automation with Ansible, O’Reilly Media, Inc, 2016. Lorin Hochstein, Rene Moser, Ansible: Up and Running, 2nd Edition, O’Reilly Media, Inc, 2018., Github Repo Ansible Automation Workshops Jeff Geerling, Ansible for DevOps, Server and configuration management for humans, LeanPub, 2018 Github Repo Liens Ansible Training Course for Ansible Network Automation Ansible role for hardening a Cisco IOS router or switch https://www.

                                                                                                      • Notes Ansible
                                                                                                      • ansible-interactive-tutorial https://github.com/turkenh/ansible-interactive-tutorial Tâches supplémentaires désactiver les bannières Spécificités automation réseau : https://docs.ansible.com/ansible/2.5/network/getting_started/network_differences.html Types de connexion Ansible https://docs.ansible.com/ansible/latest/network/user_guide/platform_index.html Connexion IOS CLI Exemple IOS CLI group_vars/ios.yml ansible_connection: network_cli ansible_network_os: ios ansible_user: myuser ansible_ssh_pass: !vault... ansible_become: yes ansible_become_method: enable ansible_become_pass: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' Exemple NXOS CLI group_vars/nxos.yml ansible_connection: network_cli ansible_network_os: nxos ansible_user: myuser ansible_ssh_pass: !vault... ansible_become: yes ansible_become_method: enable ansible_become_pass: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' Exemple NX-API group_vars/nxos.

                                                                                                        • Programmes de formation Ansible
                                                                                                        • Formation Ansible Essentials: Simplicity in Automation Technical Overview Découvrez les bases de l’automatisation et de la gestion de la configuration avec Ansible et bien plus encore Les vidéos de la série L’essentiel d’Ansible : automatiser en toute simplicité - Présentation technique (DO007) sont disponibles en ligne et à la demande. Elles vous permettront de tout savoir sur Ansible : automatisation, gestion de la configuration, provisionnement, déploiement et gestion d’une infrastructure de calcul dans des environnements physiques, virtuels et cloud.