====== Ansible ======
===== Commandes utiles =====
* Tester la syntaxe yaml d'un playbook : ansible-lint -v example.net.yml
* Lancer un playbook sur un hôte particulier avec demande de password pour escalade en sudo : ansible-playbook main.yml -K -i'example.org,' -t core_perso -D
==== Options liées au déroulement d'un playbook ====
* check_mode: no => Désactive la simulation du playbook pour cette task (utile pour récupérer des variables nécessaires au déploiement du reste du playbook)
* ignore_errors: {true|false}: Retour d'erreur lors du playbook
* changed_when:{true|false}: Signale ou non changement de fichier lors du déploiement du playbook
* tags: always => Étiquette sur une tache/script/template, etc. Permet de n’exécuter qu'une partie du playbook
**Options**
ansible-playbook [-h] [--version] [-v] [-k]
[--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
[-c CONNECTION] [-T TIMEOUT]
[--ssh-common-args SSH_COMMON_ARGS]
[--sftp-extra-args SFTP_EXTRA_ARGS]
[--scp-extra-args SCP_EXTRA_ARGS]
[--ssh-extra-args SSH_EXTRA_ARGS] [--force-handlers]
[--flush-cache] [-b] [--become-method BECOME_METHOD]
[--become-user BECOME_USER] [-K] [-t TAGS]
[--skip-tags SKIP_TAGS] [-C] [--syntax-check] [-D]
[-i INVENTORY] [--list-hosts] [-l SUBSET]
[-e EXTRA_VARS] [--vault-id VAULT_IDS]
[--ask-vault-password | --vault-password-file VAULT_PASSWORD_FILES]
[-f FORKS] [-M MODULE_PATH] [--list-tasks]
[--list-tags] [--step] [--start-at-task START_AT_TASK]
playbook [playbook ...]
Source : https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html
Pour définir une extra-vars de type booléen, il faut définir la variable avec la syntaxe json. Exemple : -e '{"ma_variable": true}'
===== Configuration =====
* Désactiver le SFTP pour privilégier le SCP lors d'un déploiement si SSh est activé :
# Dans ansible.cfg :
[ssh_connection]
scp_if_ssh = True
* Enlever les vaches dans le playbook (cowsay) : export ANSIBLE_NOCOWS=1
===== Ansible vault =====
==== Créer un fichiers de variables chiffrées ====
- Créer le fichier de variables : ansible-vault create ./secret_variables_playbook.yml
- Définir le mot de mot de passe
- Éditer le fichier pour y insérer les variables à protéger: ansible-vault edit ./secret_variables_playbook.yml
- Ajouter le fichier dans la liste des fichiers de variables du main.yml :
- name: Test Ansible
hosts: all
gather_facts: true
remote_user: root
vars_files:
- ./pass_playbook.yml
roles:
- test-ansible
- Lancer le playbook : ansible-playbook -i 'host.address.org,' -u root /home/user/Documents/ansible/main.yml -D --ask-vault-pass
==== Chiffrer un fichier déjà existant ====
ansible-vault encrypt /chemin/fichier.txt
==== Intégrer une variable chiffrées dans un YAML en clair ====
On part du principe que le chiffrement se fait à l'aide d'un mot de passe stocké dans un vault-password-file.
- Créer la variable chiffrée : ansible-vault encrypt_string 'valeur_variable' --name 'nom_variable'
- Intégrer le bloc créé dans le fichier YAML :nom_variable: !vault |
- $ANSIBLE_VAULT;1.1;AES256
30656663363363386366373534343739393031396531613531376136353266323866313934313534
6462343931613865616533393132653831623036313961640a633631643865396134303634653831
30336464666634616433353463636565656132656138633130663036333363303163616536366232
3632663035636536360a393661616165613065343361343139306332303031393932343964616331
3937
Pour chiffrer une chaîne de caractères complexe avec espaces et indentations à respecter (comme une clé privée SSH) :
- Placer le contenu de la chaîne de caractère dans un fichier
- Effectuer cette commande : cat sshkey.txt | ansible-vault encrypt_string --stdin-name 'ssh_key'
=== Intégration dans un fichier host_vars ===
Il est possible de n'intégrer que le contenu de la variable pour l'intégrer à une autre variable plus générique.
**Exemple**
Ici, on veut chiffrer les mots de passe des utilisateurs Mulder et Scully.
- On chiffre les mots de passe avec les commandes avec les commandes suivantes : ansible-vault encrypt_string 'ILoveSmokingMan' --name 'scully_session_pass'
ansible-vault encrypt_string 'ILoveAliens' --name 'mulder_session_pass'
- On intègre les variables chiffrées dans le yaml.
user_list:
- name: 'Mulder'
session_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
61316365326163326633346436643866383963623431643937383637623236353732623234666231
3139613361633064666263613932323738616363373232360a643764333836366562373733646439
65663033393335653330373532633962663333363766333238656335653465633735613232666539
6533323465646563360a643130663437643339316461316333653735353932663038373866613263
3032
- name: 'Scully'
session_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
38343333653535373964383464633464393666313235363461393666613764383838373362646138
3139303465303834653032363531353832386130646164300a643634306564333834653666663861
63366536633064323466643130663763303466323134613635313361616532333464633433373566
3933343237346435350a353765626235323935653639353465636163656661666463346366663136
3637
===== Sources/Infos complémentaires =====
* Présentation : [[https://docs.ansible.com/ansible/latest/user_guide/vault.html]]
* Résumé des commandes : [[https://docs.ansible.com/ansible/latest/cli/ansible-vault.html]]