script-playbook
Quelques scripts playbook avec ansible
Dans Ansible, les fichiers Playbook sont généralement utilisés pour exécuter des tâches sur des hôtes distants. Ces tâches vont de l'installation et de la configuration de services tels que des serveurs Web et de bases de données à des tâches simples telles que la vérification du temps de disponibilité.
Configure important user consistently
ansible -m user -a "name=newbie uid=4000 state=present" servera.lab.example.com
[Script-ansible-playbbok]
---
- name: Configure important user consistently
hosts: all
tasks:
- name: newbie exists with UID 4000
user:
name: newbie
uid: 4000
state: present
[playbook-httpd]
Ce playbook est décrit par son nom qui est : « update web servers » et est dirigé vers les machines web servers afin de contrôler si c'est bien la dernière version d'Apache qui est présente au niveau de tous ces serveurs
---
- name: Configure important user consistently
hosts: all
become:true
tasks:
- name: ensure apache is at the latest version
package:
name: httpd
state: latest
Exécution d'un playbook Ansible
L'exécution du playbook se fait en utilisant la commande:
ansible-playbook -i host.ini playbook.yml
Si vous rencontrer un error lors de l'exécution du playbook alors que vous avez bien générer vos clés ssh et copier dans le serveur distant.
ansible-playbook -i hosts.yml playbook.yml --ask-pass
La commande ansible-playbook affiche les résultats des tâches lancées.
ansible-playbook -v
La commande ansible-playbook -vv affiche non seulement les résultats de la tâche mais aussi une information supplémentaire.
ansible-playbook -vv
Elle permet d'avoir des précisions liées à l'exécution des scripts en plus des données de connexion, de configuration et des résultats de tâche
ansible-playbook -vvv
La commande ansible-playbook -vvvv
Avec la commande ansible-playbook -vvvv, vous avez des informations sur les états de configuration des tâches mais aussi et surtout sur les états de connexion de vos ordinateurs gérés.
ansible-playbook -vvvv
Vérifier la syntaxe d'un playbook écrit
Vérification de la syntaxe de son playbook avant de passer à l'exécution
ansible-playbook hosts.ini playbook -syntax -check
Simulation d'un appel de Playbook
Grâce à une simple simulation, il est possible de savoir si l'exécution du playbook permettra d'avoir l'effet désiré ou s'il faut penser à des changements. L'option -C
est utilisée pour procéder à un essai blanc.
L'idempotence des tâches avec Ansible implique
Que la répétition de l'exécution d'une tâche n'affecte pas l'effet obtenu
Création fichier avec playbook
sudo nano /etc/ansible/playbook.yaml
[file-empty-playbook]
Créer un fichier vide
hosts: Définit sur quels hôtes distants de votre fichier d'inventaire Ansible vous souhaitez exécuter la tâche. tasks: Annonce que l'hôte distant doit effectuer une tâche. name: Permet de définir un nom pour la tâche. Le nom est fourni à titre indicatif uniquement et n'a aucune influence sur la tâche elle-même. file: module ansible pour créer un nouveau fichier. path: Définit le chemin d'accès au nouveau fichier sur le disque dur de l'hôte distant. touch: Tout comme la commande touch dans le terminal Ubuntu, la saisie de touch crée un fichier vide à l'emplacement que vous avez choisi.
---
- hosts: all
become: yes
tasks:
- name: Creating an empty file
file:
path: "/your path"
state: touch
[file-empty-playbook] Créer un fichier avec un contenu
---
- hosts: all
tasks:
- name: Creating a file with content
copy:
dest: "/your path"
content: |
"mon contenu de test"
[creation-multiple-fichiers]
---
- hosts: all
tasks:
- name: Create multiple files
file:
path: "{{ item }}"
state: touch
with_items:
- test01.txt
- test02.txt
- test03.txt
- test04.txt
with_items: Ce paramètre permet de démarrer une liste de fichiers à créer. Listez autant de fichiers que vous le souhaitez. Dans notre exemple, nous avons créé une liste de quatre fichiers intitulée test.
[repertoire-ansible-file]
La création d'un nouveau répertoire utilise la même configuration que la création d'un fichier vide. La seule différence est que dans le paramètre state, vous entrez directory comme valeur :
---
- hosts: all
tasks:
- name: Creating a new directory
file:
path: "/your path"
state: directory
[remove-file]
---
- hosts: all
tasks:
- name: Removing a file
file:
path: "/your path"
state: absent
[setting-permissions-file]
---
- hosts: all
tasks:
- name: Create a new file with permissions
file:
path: "/your path"
state: touch
mode: 0755 # u=rwx,g=rx,o=rx marche aussi. ex: mode: u=rwx,g=rx,o=rx
owner: test
[module-apt]
- name: "nom du playbook"
hosts: all
become: yes
tasks:
- name: création répertoire
apt:
name: haproxy
default_release: stretch-packports
state: latest
update_cache: yes
cache_valid_time: 3600
[clean-reset-module]
- name: "nom du playbook"
hosts: all
become: yes
tasks:
- name: clean paquet
apt:
name: haproxy
state: absent
purge: yes
autoremove: yes
[module-directory]
- name: "nom du playbook"
hosts: all
become: yes
tasks:
- name: création répertoire
file:
state: directory
path: "/tmp/mekoo/{{ item }}"
recurse: yes
with_inventory_hostnames:
- " {{ groups['gp1'] }} "
Exécuter un playbook en local
Si vous souhaiter faire des configurations en local de votre machine, ansible va vous faciliter la tâche. Je vous propose un playbook-local.yml. Code:
commande pour exécuter le playbbok: ansible-playbook -i "ip_server," playbook-local.yml
---
- name: "ping remote hosts test"
become: yes
vars:
myvar: "ping test var"
ping_failed: []
hosts: localhost
connection: local
tasks:
- name: Setup host
setup:
filter: gather_facts
register: __host_fatcs
- name: debug host __host_fatcs
debug:
var: __host_fatcs
- name: Ping web servers
ping:
register: ping_result
- name: Collect ping results
set_fact:
ping_failed: "{{ ping_failed + [inventory_hostname] }}"
when: ping_result is failed
- name: apt update
apt:
update-cache: yes
cache_valid_time: 3600
- name: Install Nginx only on reachable servers
apt:
name: nginx,curl,tree,nodejs
state: present
when:
- ping_result is not failed
- ping_result.ping == 'pong'
- name: Add nodejs apt key
apt_key:
url: https://deb.nodesource.com/gpgkey/nodesource.gpg.key
state: present
when:
- ping_result is not failed
- __host_fatcs.ansible_facts != {}
- name: install nodejs
shell: |
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\
apt-get install -y nodejs
when:
- ping_result is not failed
- ping_result.ping == 'pong'
- name: Display OS information of reachable hosts
debug:
msg: "OS Name: {{ ansible_os_family }} {{ ansible_distribution }}"
when: ping_result.ping == "pong" # Only display facts for reachable hosts
[create-file-ansible] file