Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Limiti di shell provisioning e provisioning avanzato

Sfruttare le recipes di Chef Solo per ottenere rapidamente configurazioni di componenti eleganti e già pronte per molte esigenze.
Sfruttare le recipes di Chef Solo per ottenere rapidamente configurazioni di componenti eleganti e già pronte per molte esigenze.
Link copiato negli appunti

Sebbene lo shell provisioning sia immediato e di facile implementazione, utilizzandolo bisogna fare attenzione ad alcuni tranelli. Uno su tutti: gli script tendono a diventare caotici su configurazioni più complesse, rendendoli poco comprensibili a chi arriva dopo (soprattutto per sviluppatori a digiuno di Linux). Per evitare questo si tende ad usare commenti all'interno degli script di provisioning, strumento valido all'inizio ma che viene poi tralasciato generando ancora più confusione.

Per ovviare a queste situazioni esistono strumenti ad hoc, tra i più noti si attestano Chef e Puppet. Entrambi i sistemi si basano su dei pacchetti (in Chef vengono chiamati recipe, in Puppet module) che contengono al loro interno le istruzioni per installare e configurare (con dei valori di default) una determinata componente. A questo punto nel Vagrantfile specificheremo solo il nome del pacchetto da utilizzare, qualche parametro da personalizzare ed il gioco è fatto.

Il provisioning con Chef

Chef è uno strumento piuttosto complesso e una trattazione esaustiva non si esaurisce in poche righe, tuttavia possiamo tentare un approccio vedendo come effettuare il provisioning di MongoDB versione 2.6.4 utilizzando Chef Solo.

Chef Solo è una versione light di Chef, più adatta a chi si avvicina al prodotto per la prima volta, offre un ambiente gestito dalla community, chiamato Supermarket, in cui è possibile recuperare i recipe delle componenti che vogliamo installare.

Il nostro obbiettivo è installare MongoDB, quindi andremo sull'home page del Supermarket e cercheremo un recipe che fa al caso nostro. Clicchiamo su download, scarichiamo il file compresso e decomprimiamolo in una directory che chiameremo cookbooks all'interno della nostra directory di progetto.

Poiché il cookbook appena scaricato ha delle dipendenze da soddisfare le soddisferemo una per volta. In totale sarà necessario scaricare 11 cookbooks (procedura ovviamente automatizzabile ma esula dallo scopo del corso). Alla fine la nostra directory di progetto sarà qualcosa del genere:

.
|-- cookbooks
|   |-- 7-zip
|   |-- apt
|   |-- build-essential
|   |-- chef_handler
|   |-- mongodb
|   |-- packagecloud
|   |-- python
|   |-- runit
|   |-- windows
|   |-- yum
|   `-- yum-epel
|-- .vagrant (directory nascosta)
|   `-- machines
`-- Vagrantfile

Fatto ciò modificheremo il nostro Vagrantfile specificando quali recipe installare col comando add_recipe e ridefiniremo poi la proprietà package_version affinché installi la 2.6.4. Fatto!

Vagrant.configure(2) do |config|
    config.vm.box = "hashicorp/precise64"
    config.vm.provision "chef_solo" do |chef|
         chef.add_recipe "mongodb::mongodb_org_repo"
         chef.add_recipe "mongodb"
         chef.json = {
              "mongodb" => {
                   "package_version" => "2.6.4"
              }
         }
    end
    config.vm.network "forwarded_port", guest: 27017, host: 27017
end

A questo punto, a seconda che la macchina virtuale sia spenta o meno, lanciamo i comandi:

vagrant up --provision

o

vagrant reload --provision

Per provare che tutto sia andato per il verso giusto proviamo a connetterci dalla macchina host all'indirizzo localhost:27017 dove dovrebbe risponderci l'istanza MongoDB 2.6.4 appena installata sulla macchina virtuale.

Se vi state chiedendo come dalla macchina host possiamo tranquillamente raggiungere la macchina guest la risposta è nella penultima riga del Vagrantfile e ne parleremo nella prossima lezione.

Ti consigliamo anche