Ansible

È un sistema per la generazione della configurazione di sistemi informatici. Per funzionare utilizza due classi di dati principali:

  • un inventario di host, che identifica i sistemi e raggruppa arbitrariamente. Per ogni sistema o gruppo è possibile specificare una serie di variabili* espresse tramite dizionari YAML#;

  • dei playbook, che sono dei documenti YAML# che contengono comandi da eseguire sui sistemi designati.

Puoi trovare la sua documentazione online.

Tali comandi possono essere idempotenti, nel senso che un comando Ansible può essere un tradizionale comando imperativo tipo mkdir /srv/foo/bar che quindi viene eseguito incondizionatamente ad ogni esecuzione del playbook o può essere espresso in modo dichiarativo, ad esempio:

- name: Create a directory if it does not exist
  file:
    path: /srv/foo/bar
    state: directory
    mode: '0755'

Se un comando è idempotente, allora vuol dire anche che tale funzionalità è gestita da un modulo specifico.

Nonostante questa parziale disponibilità di idempotenza, Ansible viene solitamente accumunato con altri gestori della configurazione definiti covergenti come Chef e Puppet che in genere nei confronti si contrappongo a sistemi con le stesse finalità ma completamente dichiarativi come Nix e Terraform.

  • pyinfra è un applicativo con obiettivi e funzionalità simili, ma che però utilizza solo Python# anche per la parte di configurazione delle ricette dei comandi;

  • mitogen è una libreria che può aiutare a velocizzare l’esecuzione di playbook che coinvolgono molti sistemi:

  • KubeSpray è una distribuzione Kubernetes# che utilizza Ansible per la configurazione dei nodi;

  • Molecule può essere utile nel test dei ruoli (i ruoli sono delle forme particolari di playbook implementati con una enfasi particolare al loro riutilizzo);