Infrastruttura come codice ci dice di utilizzare strumenti che automatizzano le build. Grande. Strumenti come ansible , chef , burattino , catasta di sale e altri ci spingono a scrivere come appare l'infrastruttura, risolvendo le differenze.
In Salt Stack quei bit sono chiamati stati . Se lo stato non corrisponde alla realtà, lo strumento lo risolverà per noi. In altre parole: stiamo scrivendo un test per la nostra infrastruttura e se il test fallisce, lo strumento lo risolverà da solo. Almeno questa è l'idea.
XP ci insegna a usare TDD e la domanda è se è applicabile all'infrastruttura? Gli strumenti suggeriscono che lo sia.
Posso immaginare alcuni tipi di test che possono essere molto utili.
Scriviamo test del fumo in bundle con il servizio distribuito per garantire che il servizio distribuito end-to-end funzioni e funzioni come previsto. Questa sarebbe una chiamata API o / e un controllo systemctl per assicurarsi che ciò che abbiamo appena distribuito funzioni. Molte di queste funzionalità possono essere coperte negli stessi stati poiché strumenti come Ansible hanno stati per assicurarsi che un servizio sia in esecuzione.
Esiste un progetto Molecule che consente di eseguire ruoli individuali (come ansible chiama i suoi stati) contro docker o un altro motore di virtualizzazione temporaneo. Ciò costringe a disaccoppiare i ruoli e consente di eseguirli separatamente dal playbook mentre ci si lavora. I test consentono principalmente di deridere le variabili con cui il ruolo dovrebbe funzionare. Altri esempi sembrano una duplicazione del motore ansible (asserire che un file appartiene a un utente ...).
ThoughtWorks techradar momento loda strumenti come 'ispezione , serverspec o Goss per la convalida che il server soddisfi le specifiche. Ma stiamo scrivendo una specifica, no?
Quindi, è utile approfondire le infrastrutture se stiamo descrivendo l'infrastruttura in stati / ruoli? Potrei sospettare che questo diventi più richiesto nelle organizzazioni più grandi in cui un team fornisce le specifiche e ne seguono altri, oppure se esiste un ampio set di ruoli, potresti voler eseguire un sottoinsieme di questi e ottenere un vantaggio in termini di velocità dai test? Faccio fatica a capire perché potresti scrivere un test se potessi avere in mente un ruolo / stato per la stessa domanda.
goss
. Ad esempio, RPM viene installato (rispondo) e quindi testato se il file predefinito previsto viene messo in atto o il servizio è in esecuzione e in attesa di una porta specifica. Non voglio risolvere questo problema automaticamente, ma essere avvisato e interrompere l'avanzamento. Sicuramente Ansible può testare il sistema anche per te, devi solo essere esplicito al riguardo, ma nel nostro caso, usiamogoss
per testare il comportamento del servizio all'interno di un container