Automatiser l'administration

Pourquoi automatiser, script impératif contre état décrit, idempotence, pousser sans agent ou tirer avec agent, et Ansible : inventaire, playbook, tâches, modules, variables, handlers et lecture d'une exécution.

  • 25 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Gestion de configuration : de quoi s'agit-il ?

    Voir la réponse

    Pratique qui consiste à mettre et à maintenir un parc de machines dans l'état voulu par des outils, plutôt qu'en tapant des commandes à la main sur chacune.

    Deux serveurs installés à la main finissent par différer sans que personne sache pourquoi. Un outil applique la même description à tous, la rejoue après une panne et la rend relisible.

  • Voici un playbook et la sortie de sa première exécution. On le relance sans rien changer. Quel récapitulatif de fin affiche-t-il ?

    ```yaml
    - hosts: localhost
    connection: local
    gather_facts: false
    tasks:
    - name: Create the site directory
    ansible.builtin.file: { path: /tmp/ans/www, state: directory }
    - name: Write the config
    ansible.builtin.copy: { content: "port 80\n", dest: /tmp/ans/www/app.conf }
    notify: Restart app
    - name: Count the files
    ansible.builtin.command: ls /tmp/ans/www
    handlers:
    - name: Restart app
    ansible.builtin.debug: { msg: restarted }

    TASK [Create the site directory] ***
    changed: [localhost]

    TASK [Write the config] ***
    changed: [localhost]

    TASK [Count the files] ***
    changed: [localhost]

    RUNNING HANDLER [Restart app] ***
    ok: [localhost] => {
    "msg": "restarted"
    }

    PLAY RECAP ***
    localhost : ok=4 changed=3 unreachable=0 failed=0
    `

    • ok=3 changed=1
    • ok=3 changed=0
    • ok=4 changed=3
    • ok=4 changed=1
    Voir la réponse

    ok=3 changed=1

    file et copy constatent que l'état voulu est déjà là : ok. Le module command ne sait pas ce qu'il change et rapporte toujours changed. Comme copy n'a rien changé, le handler n'est pas notifié et ne tourne pas. Le compteur ok compte toute tâche réussie, changée ou non : 3 tâches, dont 1 changed.

  • Ansible agit par … depuis le poste de contrôle, sans … installé sur les machines gérées : c'est un fonctionnement en poussée.

    Voir la réponse

    Ansible agit par SSH depuis le poste de contrôle, sans agent installé sur les machines gérées : c'est un fonctionnement en poussée.

    En poussée, c'est l'administrateur qui déclenche l'exécution quand il veut. En tirée (Puppet, Chef), chaque machine interroge périodiquement un serveur central.

  • Infrastructure as code : de quoi s'agit-il ?

    Voir la réponse

    Décrire les serveurs, leurs réglages et leurs logiciels dans des fichiers texte, versionnés et relus comme du code.

    Les fichiers vivent dans Git : on voit qui a changé quoi, on peut revenir en arrière et recréer la machine à l'identique au lieu de la réparer à la main.

  • Un script Bash exécute echo 'port 80' >> app.conf pour configurer chaque serveur. Après trois exécutions, le fichier contient trois lignes port 80. Quelle correction applique l'approche déclarative ?

    • Une tâche lineinfile qui assure que la ligne port 80 est présente
    • Une tâche shell qui lance le même echo, mais seulement une fois par jour
    • Un second script qui supprime ensuite toutes les lignes en double du fichier
    • Une boucle qui relance le script jusqu'à ce que le fichier ne change plus du tout
    Voir la réponse

    Une tâche lineinfile qui assure que la ligne port 80 est présente

    L'ajout est une action : chaque passage la répète. lineinfile décrit un état (cette ligne est présente) : si elle y est déjà, la tâche est ok et le fichier reste intact.