Wiki adminsys - Cebador.fr

Wiki d'administration systèmes et réseaux.
Simples notes personnelles et non réelle documentation exhaustive.
Donc désolé pour les coquilles et les inexactitudes.
Doc sous licence GNU FDL 1.3

Outils pour utilisateurs

Outils du site


ansible

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

  1. Créer le fichier de variables :
    ansible-vault create ./secret_variables_playbook.yml
  2. Définir le mot de mot de passe
  3. Éditer le fichier pour y insérer les variables à protéger:
    ansible-vault edit ./secret_variables_playbook.yml
  4. 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
  5. 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.

  1. Créer la variable chiffrée :
    ansible-vault encrypt_string 'valeur_variable' --name 'nom_variable'
  2. 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) :

  1. Placer le contenu de la chaîne de caractère dans un fichier
  2. 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.

  1. 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'
  2. 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

ansible.txt · Dernière modification : de Administrateur