Download - Agileday2013 pratiche agili applicate all'infrastruttura

Transcript
Page 1: Agileday2013 pratiche agili applicate all'infrastruttura

Pratiche Agili applicate all'Infrastruttura

Marco Trincardi - @trink0Giuseppe Leone - @joebew42

Page 2: Agileday2013 pratiche agili applicate all'infrastruttura

La nostra esperienza ...

• L'adozione di pratiche DevOps nasce dalla necessità di poter creare, gestire, condividere e replicare configurazioni di ambienti complessi

• Circa nove mesi di esperienza su progetti con diversi gradi di complessità

Page 3: Agileday2013 pratiche agili applicate all'infrastruttura

Di cosa parliamo

• Vi raccontiamo una nostra esperienza

• Casi reali

• DevOps: Unified Tooling

• Come ci siamo arrivati

• Conoscenza acquisita sul campo

• Un esempio pratico :)

Page 4: Agileday2013 pratiche agili applicate all'infrastruttura

Il nostro primo progetto

• Infrastruttura particolarmente complessa

• Necessità di simulare una rete privata con due server

Page 5: Agileday2013 pratiche agili applicate all'infrastruttura

Le componenti in gioco?

• Esigenza:

• Creare ambiente per lo sviluppo

• Replicare questo ambiente dal cliente

Page 6: Agileday2013 pratiche agili applicate all'infrastruttura

Grafo delle dipendenze dell'Infrastruttura

Page 7: Agileday2013 pratiche agili applicate all'infrastruttura

Problemi comuni

• Gestire tutte le dipendenze

• Perdersi in configurazioni complesse

• Sporcare l'ambiente con componenti non più necessarie

• Non riuscire più a riprodurre fedelmente l'ambiente

• Figuriamoci per un Dev...

Page 8: Agileday2013 pratiche agili applicate all'infrastruttura

Problemi comuni

Page 9: Agileday2013 pratiche agili applicate all'infrastruttura

Virtualizziamo?

• Virtualizzare è stata la prima scelta

• Non vogliamo sporcare il nostro computer

Page 10: Agileday2013 pratiche agili applicate all'infrastruttura

Virtualizzare non basta

• Condividiamo le VM tra sviluppatori?

• Mantengo snapshot di VM stabili e poi continuo a provare nuove configurazioni?

• E se poi vogliamo fare il deploy?

• Troppo meccanico

• Troppo costoso

• Non funziona!

Page 11: Agileday2013 pratiche agili applicate all'infrastruttura

Parliamone … !!

Vediamo un po' se esistono metodi e tool che possono tornarci utili!

Page 12: Agileday2013 pratiche agili applicate all'infrastruttura

DevOpsUnified tooling

• Replicabilità, distribuzione e manutenibilità di ambienti complessi

• Gestione di più ambienti di deploy

• Codice per Documentazione

• Sviluppo incrementale

• Dev e Ops finalmente riescono a capirsi!

Page 13: Agileday2013 pratiche agili applicate all'infrastruttura

Quali tool utilizzabili?

• Software Configuration Management

• Git, SVN, Mercurial, etc ...

• Deeply Modeled-System

• Puppet, Chef, Salt Stack, etc ...

• Automation of repetitive tasks

• Vagrant

• Capistrano, Fabric, ...

• Maven

Page 14: Agileday2013 pratiche agili applicate all'infrastruttura

Vagrant

http://www.vagrantup.com

È una interfaccia per diversi provider di Virtual Machine: VirtualBox, Amazon EC2, digitalOcean e altri.

Vagrant esegue le VM su diversi provider e fornisce i primi parametri di configurazione.

Page 15: Agileday2013 pratiche agili applicate all'infrastruttura

Puppet

http://www.puppetlabs.com

È un software di automazione che ci consente di descrivere e gestire configurazioni molto dettagliate di infrastrutture.

Page 16: Agileday2013 pratiche agili applicate all'infrastruttura

Le nostre scelte

• Perché questi strumenti?

• Più vicini al nostro mondo Dev:Vagrant e Puppet sono Ruby!

Page 17: Agileday2013 pratiche agili applicate all'infrastruttura

Vagrant in action!

Vagrantfile di esempio

Page 18: Agileday2013 pratiche agili applicate all'infrastruttura

Puppet in action!

Puppet per installare econfigurare Cube

Page 19: Agileday2013 pratiche agili applicate all'infrastruttura

Vagrant & Puppet in action

Le configurazioni Vagrant e Puppet sono codice Ruby!

Page 20: Agileday2013 pratiche agili applicate all'infrastruttura

Vagrant & Puppet in action

Le configurazioni Vagrant e Puppet sono codice Ruby!

Quindi l'Infrastruttura è codice?

Page 21: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice?

• Come sviluppatori siamo abituati a gestire diverse dipendenze tra componenti software (classi, package e librerie)

• Ma anche le infrastrutture hanno delle dipendenze!

• File e Directory

• Utenti

• Software e loro configurazione

Page 22: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice!

Cominciamo a capirci!

Se possiamo descrivere una infrastruttura complessa tramite del

codice, allora ...

Page 23: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice!

Possiamo usare un software per il controllo di versione e sfruttarne tutte le

potenzialità.

Page 24: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice!

Possiamo seguire uno sviluppo incrementale.

Page 25: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice!

Possiamo applicare metodi di sviluppo Agili:Test Driven Development

Page 26: Agileday2013 pratiche agili applicate all'infrastruttura

Testing dell’infrastruttura

Come facciamo il Testing dell'Infrastruttura?

Page 27: Agileday2013 pratiche agili applicate all'infrastruttura

Testing dell’infrastruttura

Trial & Error

Page 28: Agileday2013 pratiche agili applicate all'infrastruttura

Testing dell’infrastruttura

Dry run / No Op

Page 29: Agileday2013 pratiche agili applicate all'infrastruttura

Testing dell’infrastruttura

Test automatici

Page 30: Agileday2013 pratiche agili applicate all'infrastruttura

Testing dell’infrastruttura

Code standard compliant

VS

Page 31: Agileday2013 pratiche agili applicate all'infrastruttura

Ancora poca esperienza

Testing dell'Infrastruttra solo con“Trial & Error” e “Dry run”

• È come fare test manuali del software: funziona ma porta via molto tempo.

• Il test copre l'intero setup della configurazione piuttosto che le singole componenti.

Page 32: Agileday2013 pratiche agili applicate all'infrastruttura

Vantaggi per lo sviluppo

• Possibilità di distruggere e ricreare l'ambiente quando vogliamo

• A seguito di una prova o di un deploy, ho compromesso l'ambiente

• Impiego meno tempo a buttar via tutto e ricaricare da zero l'ambiente, piuttosto che cercare di risolvere manualmente I conflitti

Page 33: Agileday2013 pratiche agili applicate all'infrastruttura

Risultati ottenuti

• Documentazione della configurazione dell'ambiente come codice

• Sviluppo incrementale dell'infrastruttura

• Destroy e Reload dell'infrastruttura a costo zero.

• Alta manutenibilità dell'infrastruttura

• Replicabilità dell'Infrastruttura dal cliente

Page 34: Agileday2013 pratiche agili applicate all'infrastruttura

Ancora ...

Fornire codice e NON costanti aggiornamenti di documentazione.

spesso la documentazione non è fedele e può lasciare spazio a libere

interpretazioni.

Page 35: Agileday2013 pratiche agili applicate all'infrastruttura

Ma il nostro software?

Siamo Agili!

Deploy automatico con Capistrano

• Setup database

• Deploy di applicazioni Rails

• Deploy di servizi e gestione degli stessi (start, stop, restart)

Page 36: Agileday2013 pratiche agili applicate all'infrastruttura

Quali altri progetti?

• Beancounter

• Un grado di complessità più alto

Page 37: Agileday2013 pratiche agili applicate all'infrastruttura

Quali altri progetti?

• Qualcosa in più …

• Provision della VM su provider esterni:

• Amazon EC2 (automatico)

• Azure (manuale)

• Gestione di diversi stage

• Sviluppo

• Integration

• Produzione

Page 38: Agileday2013 pratiche agili applicate all'infrastruttura

Quali altri progetti?

• Hadoop

• Test automatici

• Code standard compliant

Page 39: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice! Quali tool?

• Rspec-Puppet

• Come funziona?

• Perché?

• Multi environment

• Regression test

Page 40: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice! Quali tool?

Ma se ho i test allora posso fare refactoring!

Page 41: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice! Quali tool?

Ma se ho i test allora posso fare refactoring!

Vediamo un esempio...

Page 42: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

Page 43: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoringdell'Infrastruttura

Ok, test “rossi”, facciamoli diventare verdi! Scriviamo codice!

Page 44: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

NODO DI ESEMPIO

Page 45: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

Page 46: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

POSSIAMO ESTRARRE QUESTOCODICE!

Page 47: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

Abbiamo estratto il codice interessato in una risorsa definita coma “User::Complete”.

Test!

Page 48: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

AGGIUNGIAMO UN NUOVO TEST PER IL NODO EXAMPLE.

DICIAMO CHE DEVE CONTENERE UNA RISORSA DI TIPO USER::COMPLETE

TUTTI I VECCHI TEST NON SERVONO PIÙ!BUTTIAMOLI VIA.

Page 49: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoring dell'Infrastruttura

Page 50: Agileday2013 pratiche agili applicate all'infrastruttura

Refactoringdell'Infrastruttura

• I test che avete visto non sono corretti

• Non ha senso testare la presenza di risorse che sono definite in modo espilicito nel puppet

• È utile ricorrere ai test solo se abbiamo delle strutture condizionali all'interno dei puppet

• È utile ricorrere ai test nei casi di regression test: aggiungiamo nuove feature

• I test che avete visto sono solo degli esempi!

Page 51: Agileday2013 pratiche agili applicate all'infrastruttura

Infrastruttura come codice! Quali tool?

• Puppet-lint

• Capire se il nostro codice è conforme agli standard

• Come funziona?

Page 52: Agileday2013 pratiche agili applicate all'infrastruttura

Cosa abbiamo capito?

La nostra esperienza termina qui, per ora!

Ma cosa abbiamo capito da quello che abbiamo fatto?

Siamo riusciti a trattare problematiche del mondo operational con un metodo a noi

familiare.

Dev e Ops non sono poi così distanti! :)

Page 53: Agileday2013 pratiche agili applicate all'infrastruttura

Finisce qui ...

Happy Infrastructure Coding :)

Page 54: Agileday2013 pratiche agili applicate all'infrastruttura

… Extra Time!

Extra Time!

• Replicare un ambiente per piattaforma Diaspora*

• Il progetto completo è su GitHub joebew42

• Demo pratica per chi è interessato!

Page 55: Agileday2013 pratiche agili applicate all'infrastruttura

Grazie...Sì, abbiamo finito!

• Website www.xpeppers.com

• E-Mail [email protected]

• Twitter @xpeppers, @trink0, @joebew42

• Sede Via Oss Mazzurana 45,

• Tel 0461 1823400