Come testare il provisioning e la configurazione nell'installazione Ansible?


33

Cercando di provare a creare un po 'di resilienza nella nostra configurazione Ansible che si occupa di provisioning e configurazione.

Comprendo alcuni metodi di test sul lato della configurazione delle cose, ma mi chiedo come implementare meglio i test sul lato del provisioning delle cose e se ci sono strumenti che possono aiutare con questo tipo di implementazione.

Attualmente molti dei nostri test vengono eseguiti in serie durante il playbook, il che ha molto senso per cose come "è arrivato il servizio; è il vip disponibile; ha terminato questo compito asincrono", ma ciò che veramente mi preoccupa è la nostra capacità di gestire la deriva di configurazione a livello di applicazione e di provisioning (come la configurazione della macchina virtuale). Sono consapevole che Ansible non è lo strumento migliore per lavorare con la deriva della configurazione, ma sono curioso di vedere le tue opinioni.

Se hai qualcosa per automatizzare completamente il processo ancora meglio. (abbiamo alcuni brutti script che riportano quotidianamente in forma rilassata).

Nota : al momento abbiamo alcune condizioni in cui potrebbe verificarsi una riprovision (ad es. Ricostruzione da backup, problema di sistemi critici) ma in genere passa in rassegna alcune delle attività di configurazione rispondenti e non ci pensa più.



Ansible viene eseguito solo una volta al provisioning? In caso contrario, con quale frequenza viene eseguita? Sto solo cercando di capire il problema prima di offrire una soluzione.
Woodland Hunter,

Ciao @Naphta, una qualsiasi delle risposte ha risolto la tua domanda, considera di accettarla facendo clic sul segno di spunta. Ciò indica alla comunità più ampia che hai trovato una soluzione e dà una certa reputazione sia al rispondente che a te stesso. Non vi è alcun obbligo di farlo.
Richard Slater,

I'm aware Ansible isn't the best tool for working with configuration drift Spiega per favore.
030

Risposte:


19

Alcune opzioni là fuori ..

Strumenti di test: ordinati per stelle github

  • Serverspec - Ruby, lo strumento più popolare là fuori, costruito su rspec di ruby
  • Goss - YAML, semplice, binario autonomo <10 MB, estremamente veloce, può generare test dallo stato del sistema
  • Inspec - Ruby, lo considera un serverpec migliorato, quasi la stessa sintassi, creato dai ragazzi dello chef. Costruito per essere più semplice da estendere rispetto a serverpec
  • Testinfra - Python, ha la caratteristica interessante di poter usare l'inventario / i varianti di Ansible

Principali differenze tra loro:

Alla fine, suggerirei di trascorrere una giornata a sperimentare con tutti loro per avere un'idea per loro prima di decidere da soli.

  • Ad eccezione di Goss, tutti i framework possono essere eseguiti su una macchina remota (es. Su ssh). Goss funziona solo localmente o nella finestra mobile con dgoss.
  • Tutti i framework possono essere eseguiti localmente su un server, ma richiedono l'installazione o l'incorporamento di Python o Ruby. Inspec fornisce un pacchetto autonomo <150 MB con una versione integrata di ruby. Goss è un singolo binario <10 MB senza dipendenze esterne.
  • Goss ha integrato il supporto per l'output nagios / sensu, ciò consente una più facile integrazione con gli strumenti di monitoraggio.
  • I test di goss tendono ad essere più semplici, ma meno flessibili poiché basati su YAML. Altri framework consentono di sfruttare tutta la potenza del linguaggio sottostante Python / Ruby per scrivere test o estendere le funzionalità dello strumento. (semplicità vs flessibilità)
  • Goss ti consente di generare test dallo stato attuale del sistema
  • Per quanto ne so, Testinfra è l'unico che ha il supporto integrato per l'inventario e le variabili responsabili
  • Inspec è supportato da Chef

Test continuo / divergenza:

  • Conformità dello chef : collabora con inspec per testare continuamente i server, i prodotti a pagamento
  • Goss - Può essere facilmente agganciato a Nagios o Sensu. Supporta inoltre l'esposizione dei test del server come endpoint http.

Test di imbracature per lo sviluppo:

  • cucina - Testing harness tool, avvia istanza, esegue il codice di gestione della configurazione, esegue la suite di test. Realizzato dai ragazzi dello chef
  • Molecola - Simile alla cucina di prova, ma scritta appositamente per ansible

Full Disclosure: sono l'autore di goss

AGGIORNAMENTO: InSpec 4.xo superiore utilizza una licenza mista commerciale / open source - vedi commenti.


4
Comprendo che sei un po 'di parte, ma inspec non ha bisogno della conformità per essere eseguita periodicamente. E non ci sono dipendenze da gestire, tutte le lib libere e il framework (ruby) sono raggruppati nel pacchetto che può essere installato localmente su ciascun nodo, quando si esegue ssh / winrm, inspec si è messo in atto. Indichi un comando esclusivamente esterno, il che non è vero, molti test vengono eseguiti da un codice ruby ​​interno. (Penso che valga la pena di essere notato)
Tensibai,

Ho aggiornato la risposta per correggere il comando esterno e raggruppato ruby ​​per inspec. Potete chiarirmi o inviarmi un link che spieghi come Inspec può essere usato da solo per rilevare / riferire alla deriva?
Ahmed Elsabbahy,

Bene, la parte di segnalazione sarà a portata di mano, è davvero l'obiettivo di conformità fare una rappresentazione. Ma puoi eseguire inspec in un crontab e fare affidamento sulla posta crontab quando c'è un test che non ti avvisa (per esempio).
Tensibai,

Tutto sommato, tahnks per l'editing, che suona una buona esposizione del tuo strumento e di altri. Temo che questo potrebbe diventare obsoleto rapidamente, ma +1 comunque per l'elenco e i puntatori.
Tensibai,

Ah, sì .. tutti gli strumenti possono essere sfruttati in questo modo. Stavo cercando di fornire strumenti (o integrazioni con strumenti) che fornissero rapporti migliori. Per quanto ne so c'è conformità, o avvolgendo gli strumenti in un modo che li rende compatibili con nagios / sensu / some-other-monitoring-tool. Es: slideshare.net/m_richardson/… Mi scuso se inizialmente è stato distorto, non era previsto.
Ahmed Elsabbahy,

13

I due strumenti che ho visto per questo sono InSpec e ServerSpec . Serverspec è uno strumento basato su Ruby che si basa su RSpec . InSpec si ispira a RSpec e ServerSpec.

Ho usato ServerSpec. È bello, ma forse non stabile al 100%. Ho avuto problemi con i test per versioni specifiche di software su Ubuntu.

Ho letto i documenti InSpec ma non ho approfondito. Fa essenzialmente la stessa cosa di Serverspec.

A giudicare dagli impegni di Github, sembra che il lavoro su ServerSpec sia leggermente diminuito, mentre InSpec si sta appena intensificando.

AGGIORNAMENTO: InSpec 4.xo superiore utilizza una licenza mista commerciale / open source - vedi commenti.


1
"Ho avuto problemi con i test per versioni specifiche di software su Ubuntu." Ho risolto questo problema dopo aver notato una domanda al riguardo su: stackoverflow.com/questions/42417864/…
Matt Schuchard,

Per chiarire leggermente, InSpec emula RSpec ma non si basa su di esso.
coderanger

1
@MattSchuchard Grazie per quel riferimento!
Dave Swersky

bene "non stabile al 100%" per uno strumento di test non suona affatto bene
ᴳᵁᴵᴰᴼ

InSpec è ottimo come strumento di test e semplifica l'installazione di nulla sul server, mentre ServerSpec può farlo solo con un lavoro extra. Sarebbe necessario un po 'di lavoro per consentire a InSpec di utilizzare un inventario Ansible, probabilmente più semplice se l'inventario è in formato YAML (Ansible 2.4+).
RichVel,

10

Quando si utilizzano strumenti di gestione della configurazione, come Ansible, lo strumento stesso sarebbe responsabile di impedire la deriva della configurazione. Dopo aver utilizzato Ansible per impostare una determinata configurazione, l'esecuzione ripetitiva di Ansible assicurerà che la configurazione sia come definita. Questo richiede anche che il tuo codice Ansible sia scritto in modo idempotente.

Alla luce di quanto sopra, è possibile ottenere il provisioning dei test eseguendo i playbook Ansible in loop da alcuni server. Ad esempio, un lavoro cron, o Jenkins, può eseguire i playbook ogni 30 minuti e riferire in caso di errore. Non avere errori significa che la tua configurazione è sotto controllo, avere errori significa che c'è un problema nel portare i server nello stato desiderato .

Nel caso in cui non ci si possa fidare che il proprio codice sia scritto come idempotente, e quindi non è possibile eseguire Ansible ripetutamente in un ciclo da un server automatico, esiste una soluzione alternativa. Puoi fare come sopra (esegui Ansible in un ciclo) ma usa la sua modalità di esecuzione a secco . Ogni volta che Ansible segnala che sono necessarie modifiche, il lavoro Jenkins (o cron job) può avvisare che la configurazione fornita è stata modificata e che i server non sono nello stato desiderato .

Per assicurarti che il tuo codice Ansible stia effettivamente facendo quello che pensi che dovrebbe fare, si applicano le soluzioni menzionate da Dave Swersky. Sia InSpec che Serverspec sono strumenti che verificano in modo diverso che i tuoi playbook facciano realmente ciò che intendi. Un ottimo modo per eseguire questo tipo di strumenti in ambienti di test (anche contenitori docker) è usare kitchen.ci che gestisce tutta la colla tra i vari strumenti di test all'interno dell'unità e l'esecuzione dei tuoi playbook / moduli / libri di cucina.

Kitchen.ci è stato originariamente utilizzato per testare i libri di cucina dello chef, ma esistono plugin per Ansible e altri strumenti CM.


5

Test Kitchen ha un plug-in di provisioning in cucina per il test del codice Ansible. Non è così profondo come l'integrazione dello Chef, ma svolge il lavoro nella maggior parte dei casi. Esiste anche il più recente progetto Molecule che è un sistema di test Ansible dedicato.


0

È possibile tenere traccia delle discrepanze / deriva della configurazione / dell'infrastruttura utilizzando Outthentic , è facile creare una suite di test per "correggere" lo stato desiderato ed eseguirlo nuovamente ogni volta che è necessario tenere traccia delle modifiche indesiderate.


1
Benvenuto in DevOps.se Alexey. Sebbene il tuo strumento possa aiutare l'utente in questo caso, affinché questa sia una risposta qui dovrebbe esserci un po 'di più per comunicare quanto questo sia rilevante per la domanda. Altrimenti sembra un annuncio solo link.
pulcini

Ciao! Certo, ho appena dato maggiori dettagli.
Alexey Melezhik,

Dal mio punto di vista, questo non fa altro che ciò che il rundeck può fare ed è fuori dalla portata di questa domanda. Specialmente perché la risposta non spiega come può risolvere il controllo di un migliaio di server ed essere avvisato di una deriva o presentare un rapporto leggibile dall'uomo per un revisore fornendo un risultato analizzabile. Da quello che ho appena letto non fa altro che inspec può fare (per esempio) e fornire un output meno utilizzabile su larga scala, mentre richiede molti strumenti esterni per fare il lavoro ed essere quindi meno portabile.
Tensibai,

"come può risolvere l'auditing di un migliaio di server" - Ho trovato qualcosa su migliaia di server nella domanda
Alexey Melezhik,

"ed essere avvisato di una deriva o presentare un rapporto leggibile da un auditor dando un risultato analizzabile." né ho trovato questo nella domanda. L'ovvio avviso di deriva è il fatto che i test iniziano a fallire ...
Alexey Melezhik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.