Table des matières
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
- Résumé des commandes : https://docs.ansible.com/ansible/latest/cli/ansible-vault.html