Come fare il TDD con i moduli Ansible e AWS?

2

Sto utilizzando alcuni moduli AWS per sviluppare un ruolo che creerà utenti, gruppi, ruoli e gestiremo le politiche gestite su AWS.

Mi piacerebbe avere qualche pratica del TDD mentre sviluppo questo ruolo.

Ad esempio, ho il seguente compito:

- name: Create or delete an user
  iam:
    iam_type: user
    name: "{{ item.name }}"
    state: "{{ item.state }}"
  when: >
    item.state == 'present' or item.state == 'absent'
    and item.new_name is not defined
  with_items: "{{ iam_users }}"

Ed è così che sto facendo il test di integrazione per questo compito:

---

- hosts: localhost
  connection: local
  gather_facts: false

  vars:
    iam_users:
      - name: test-user-0
        state: present

  roles:
    - aws-iam

- hosts: localhost
  connection: local
  gather_facts: false

  vars:
    iam_users:
      - name: test-user-0
        state: absent

  roles:
    - aws-iam

Quindi, una volta eseguito questo test, dovrebbe funzionare senza errori. Funziona, ma non sono sicuro che questo sia il modo giusto per entrare nel regno di Ansible.

Qualcuno ha affrontato la stessa situazione prima? Non voglio testare il modulo stesso, voglio testare i risultati delle mie attività usando il modulo.

    
posta Valter Silva 14.12.2017 - 11:45
fonte

1 risposta

3

Ansible utilizza un paradigma di programmazione dichiarativa per la gestione della configurazione. Le unità di programmazione di base (attività) eseguono operazioni complesse in background e trasformano lo stato del sistema di destinazione al valore desiderato.

Quindi per aggiungere ulteriore complessità, lo stato iniziale del sistema di destinazione deve essere ripristinato tra i cicli TDD.

In un certo senso TDD può essere implementato usando il solo codice Ansible dove viene utilizzato lo stesso codice per i test e l'esecuzione:

  • ripristina lo stato del sistema di destinazione;
  • aggiungi un'attività ad una cartella di gioco Ansible che specifica lo stato desiderato;
  • esegui il playbook Ansible in modalità check - l'attività deve restituire lo stato di changed , che indica il rosso,
  • esegui il playbook Ansible in modalità normale - l'attività deve restituire changed ;
  • esegui di nuovo il playbook Ansible in modalità regolare (accentando: regular not check) - tutte le attività devono restituire lo stato di ok che indica il verde,
  • refactoring.

Per un TDD più completo, esistono già quadri per test automatizzati:

  • Molecola - un sistema di test completo e pronto all'uso per i ruoli di Ansible, che consente l'implementazione del TDD utilizzando framework di test esterni come Serverspec (mondo Ruby / RSpec) o TestInfra (mondo Python ).

    Questi test sono memorizzati in una sottodirectory di progetto separata e puoi sviluppare un ruolo nel ciclo TDD di:

    • scrivere un test,
    • esegue il processo completo di Molecule per il rosso,
    • scrivendo un'attività Ansible,
    • esecuzione completa del ciclo di Molecule per il verde,
    • refactoring.

    Per fare riferimento al tuo specifico esempio utente IAM, ci sono test Serverspec per IAM ( esempio di test ).

  • Test Kitchen (mondo Chef / Ruby)

    Non posso fornire dettagli, suppongo che sia simile a Molecule.

risposta data 14.12.2017 - 12:17
fonte

Leggi altre domande sui tag