Tools/Ansible/Use Cases
Révision datée du 7 mai 2020 à 12:54 par Admin (discussion | contributions)
Sommaire
Include des variable depuis un fichier Ansible Vault
Ex, le fichier de variables dépend de l’environnement (prod,dev, qual etc ...)
---
# ./configure_app_servers.yml
- name: configure app servers
hosts: app_servers
pre_tasks:
- name: include env vars
include_vars: "{{ env }}.yml"
tags: ["always"]
- name: include vault for env
include_vars: "{{ env }}.vault.yml"
tags: ["always"]
roles:
...
Vous pouvez régler env
en passant l'option --extra-vars
à ansible-playbook
:
$ ansible-playbook configure_app_servers.yml --extra-vars "env=prod"
Inclure des "tasks"
gestion de boucles
Cette technique est utile chaque fois que vous devez exécuter plusieurs tâches pour chaque élément d'une boucle.
exemple :
---
# ./greet_tasks.yml
- name: set greeting fact
set_fact:
greeting: "Greeting {{ index }}: Hello, {{ name }}!"
- name: print greeting fact
debug: var=greeting
Vous pouvez exécuter ces tâches dans une bloucle comme ceci :
# ./greet.yml
- name: greet people
hosts: "*"
tasks:
- include_tasks: greet_tasks.yml
loop:
- World
- Percy
loop_control:
loop_var: name
index_var: index
Ce qui donne à l'exécution du playbook :
TASK [set greeting fact]
ok: [123.123.123.123]
TASK [print greeting fact]
ok: [123.123.123.123] => {
"greeting": "Greeting 0: Hello, World!"
}
TASK [set greeting fact]
ok: [123.123.123.123]
TASK [print greeting fact]
ok: [123.123.123.123] => {
"greeting": "Greeting 1: Hello, Percy!"
}
Inclure des "tasks" à partir de fichier dynamiques
L'inclusion de tâches avec un nom de fichier dynamique est le plus souvent utilisée pour faire varier les tâches en fonction du système d'exploitation de l'hôte distant.
Prenons l'exemple suivant :
# ./roles/redis/tasks/main.yml
- name: install redis on Debian based distros
apt:
name: redis-server
state: present
update_cache: true
become: true
when: ansible_os_family == 'Debian'
- name: ensure epel-release repo is installed on RHEL based distros
yum:
name: epel-release
state: present
update_cache: true
become: true
when: ansible_os_family == 'RedHat'
- name: install redis on RHEL based distros
yum:
name: redis
state: present
update_cache: true
become: true
when: ansible_os_family == 'RedHat'
Il peut être avantageusement factorisé en 3 tâches distinctes de la façon suivante :
---
# ./roles/redis/tasks/setup-Debian.yml
- name: install redis on Debian based distros
apt:
name: redis-server
state: present
update_cache: true
become: true
when: ansible_os_family == 'Debian'
---
# ./roles/redis/tasks/setup-RedHat.yml
- name: ensure epel-release repo is installed on RHEL based distros
yum:
name: epel-release
state: present
update_cache: true
become: true
when: ansible_os_family == 'RedHat'
- name: install redis on RHEL based distros
yum:
name: redis
state: present
update_cache: true
become: true
when: ansible_os_family == 'RedHat'
# ./roles/redis/tasks/main.yml
- include_tasks: "setup-{{ ansible_os_family }}.yml"