From 02b5122cb84a5e9569c19f1af5db28b41f3b10a1 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 20 Nov 2020 19:10:07 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20contenu=20de=20la=20s=C3=A9ance=20?= =?UTF-8?q?3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapitre11.md | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 chapitre11.md diff --git a/chapitre11.md b/chapitre11.md new file mode 100644 index 0000000..e4f6432 --- /dev/null +++ b/chapitre11.md @@ -0,0 +1,164 @@ +# Chapitre 1.1 : Les templates pour Ansible +Comme nous l'avions vu dans le chapitre précédent l'un des objectifs principaux d'Ansible est de déployer des fichiers de configuration. + +Nous allons découvrir maintenant la syntaxe YAML et la création de templates Jinja2 pour Ansible. + +## YAML + +Il faut savoir que le YAML est complètement compatible avec JSON, la syntaxe est volontairement simplifié au maximum pour être facilement lisible. Il est en outre possible d'y insérer directement du JSON pour réaliser certaines structures complexes. + +### Les listes + +Voici quelques exemples : +```yaml +# YAML +vlans: + - id: 10 + name: wan + +# JSON +vlans = [{'id': '10', 'name': 'wan'}] +``` + +```yaml +# YAML +front: + - default_backend: user-in + name: https-in + bind: + - listen: '::443' + param: + - v4v6 + mode: 'tcp' + +# JSON +front = [{'default_backend':•'user-in',•'name':•'https-in',•'bind':•[{'listen':•':::443',•'param':•['v4v6']}],•'mode':•'tcp'}] +``` + +## Jinja2 + +Jinja2 est un moteur de templates, c'est à dire un langage qui permet de générer des fichier à partir de structures génériques et des variables. + +Documentation officielle : https://jinja.palletsprojects.com/en/2.11.x/templates/ + +### Les bases du langage + +Afficher une variable : + +```jinja2 +{{ variable }} +``` + +Parcourir une liste : + +```jinja2 +{% for frontend in haproxy_frontend %} +{{ frontend }} +{% endfor %} +``` + +Condition : + +```jinja2 +{% if haproxy_frontend is defined %} + +{% endif %} +``` + +Ecrire les valeurs d'une liste en les séparant par des virgules : + +```jinja2 +{{ liste | join(', ') }} +``` + +Écrire un commentaire : +``` +{# Ceci est un commentaire #} +``` + + +### Pour s'entrainer +Testeurs de template : +https://ansible.sivel.net/test/ +https://cryptic-cliffs-32040.herokuapp.com/ + + +#### Exercice +```yaml +haproxy_frontend: + - name: all-in + mode: tcp + bind: + - listen: ':::80' + param: + - v4v6 + - accept-proxy + - listen: ':::443' + param: + - v4v6 + default_backend: user-in +``` + +1. Afficher la valeur du champ name +2. Afficher la valeur du champ bind +3. Afficher le champ param de chaque élément de bind +4. Vérifier que accept-proxy est défini dans les champs param, si c'est le cas écrire `bind ssl verify none` +5. Même chose mais sinon écrire `bind ` + + +#### Correction +1. Code +```jinja2 +{% for frontend in haproxy_frontend %} +{{ frontend.name }} +{% endfor %} +``` + +2. Code +```jinja2 +{% for frontend in haproxy_frontend %} +{{ frontend.bind }} +{% endfor %} +``` + +3. Code +```jinja2 +{% for frontend in haproxy_frontend %} +{% for valeur in frontend.bind %} +{{ valeur.param }} +{% endfor %} +{% endfor %} +``` + +4. Code +```jinja2 +{% for frontend in haproxy_frontend %} +{% for valeur in frontend.bind %} +{% if 'accept-proxy' in valeur.param %} +bind {{ valeur.listen }} {{ valeur.param | join(' ') }} ssl verify none +{% endif %} +{% endfor %} +{% endfor %} +``` + +5. Code +```jinja2 +{% for frontend in haproxy_frontend %} +{% for valeur in frontend.bind %} +{% if 'accept-proxy' in valeur.param %} +bind {{ valeur.listen }} {{ valeur.param | join(' ') }} ssl verify none +{% else %} +bind {{ valeur.listen }} {{ valeur.param | join(' ') }} +{% endif %} +{% endfor %} +{% endfor %} +``` + +5. Code Optimisé +```jinja2 +{% for frontend in haproxy_frontend %} +{% for option in frontend.bind %} +bind {{ option.listen }} {{ option.param | join(' ') }}{% if 'accept-proxy' in option.param %} ssl verify none{% endif %} +{% endfor %} +{% endfor %} +```