Ajout du contenu de la séance 3
parent
2a44793663
commit
02b5122cb8
|
@ -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 <le champ listen> <liste param> ssl verify none`
|
||||
5. Même chose mais sinon écrire `bind <le champ listen> <liste param>`
|
||||
|
||||
|
||||
#### 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 %}
|
||||
```
|
Loading…
Reference in New Issue