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" ./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_* :