it2ndq/barman
(parte uno)Non è la prima volta che 2ndQuadrant si occupa di Puppet. Gabriele Bartolini aveva già scritto un articolo in due parti su come configurare un server PostgreSQL in modo rapido utilizzando Puppet e Vagrant, rilasciando il codice usato per il suo esempio su GitHub (https://github.com/2ndquadrant-it/vagrant-puppet-postgresql).
Obiettivo di questo articolo, sviluppato in tre parti, sarà quello di automatizzare l’installazione di Barman e di configurarlo, sempre in modo automatico, per eseguire backup da un server PostgreSQL di test.
Questa prima parte è un aggiornamento di quanto scritto da Gabriele, ma con l’idea di creare due macchine virtuali invece di una sola.
it2ndq/barman
è il modulo rilasciato da 2ndQuadrant Italia per gestire l’installazione di Barman tramite Puppet. Il modulo ha licenza GPLv3 ed è disponibile su GitHub all’indirizzo https://github.com/2ndquadrant-it/puppet-barman.
La procedura che segue è stata scritta avendo come base una Ubuntu 14.04 Trusty Tahr, ma può essere eseguita in modo simile su altre distribuzioni.
Per avviare il modulo per Barman su una macchina virtuale, abbiamo bisogno dei seguenti software:
Vagrant è un software per la gestione di macchine virtuali in grado di supportare numerosi software di virtualizzazione, con VirtualBox come default.
Installiamo quindi VirtualBox:
$ sudo apt-get install virtualbox virtualbox-dkms |
L’ultima versione di Vagrant può essere scaricata dal sito e poi installata con il comando:
$ sudo dpkg -i /path/to/vagrant_1.7.2_x86_64.deb |
Per Ruby, il consiglio è di utilizzare rbenv
, che permette di crearsi un ambiente di sviluppo Ruby in cui specificare la versione da usare.
Per installare rbenv
il suggerimento è quello di usare rbenv-installer
(https://github.com/fesplugas/rbenv-installer) e configurare Ruby per l’utente corrente, evitando così di sporcare l’ambiente Ruby di sistema.
Scarichiamo ed eseguiamo lo script:
$ curl https://raw.githubusercontent.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash |
Al termine, lo script chiederà di aggiungere le seguenti linee all’interno del file ~/.bash_profile
:
export RBENV_ROOT="${HOME}/.rbenv" if [ -d "${RBENV_ROOT}" ]; then export PATH="${RBENV_ROOT}/bin:${PATH}" eval "$(rbenv init -)" fi |
Ricarichiamo il ~/.bash_profile
appena modificato:
$ exec bash -l
|
A questo punto installiamo una versione di Ruby e impostiamo l’utente per usare questa versione invece che quella di sistema:
$ rbenv install 2.1.5 $ rbenv global 2.1.5 |
È necessario avere Puppet installato sulla macchina host. Installiamo quindi la gemma relativa:
$ gem install puppet |
Infine, librarian-puppet
è un tool per automatizzare la gestione dei moduli Puppet. Anche librarian-puppet
è installabile come gemma:
$ gem install librarian-puppet |
Adesso che abbiamo le dipendenze a posto, possiamo iniziare a scrivere le configurazioni di Vagrant e Puppet per il nostro sistema di backup.
Iniziamo creando una directory in cui lavorare:
$ mkdir ~/vagrant_puppet_barman $ cd ~/vagrant_puppet_barman |
Vagrant ha bisogno di un file chiamato Vagrantfile
dove leggere le configurazioni delle VM da avviare. Procediamo quindi con la scrittura del file.
Il seguente Vagrantfile
avvia due VM Ubuntu Trusty, chiamate pg
e backup
, con indirizzi ip rispettivamente 192.168.56.221
e 192.168.56.222
. Su entrambe le macchine verrà effettuato un provisioning attraverso uno script shell definito inline all’interno del file stesso. Tale script lancia puppet-bootstrap
(https://github.com/hashicorp/puppet-bootstrap), uno script che automaticamente installa e configura Puppet su vari tipi di macchine. Siccome non è necessario che sia eseguito più di una volta, nello script inline è stato inserito un test per evitare ulteriori esecuzioni.
Vagrant.configure("2") do |config| { :pg => { :ip => '192.168.56.221', :box => 'ubuntu/trusty64' }, :backup => { :ip => '192.168.56.222', :box => 'ubuntu/trusty64' } }.each do |name,cfg| config.vm.define name do |local| local.vm.box = cfg[:box] local.vm.hostname = name.to_s + '.local.lan' local.vm.network :private_network, ip: cfg[:ip] family = 'ubuntu' bootstrap_url = 'https://raw.github.com/hashicorp/puppet-bootstrap/master/' + family + '.sh' # Run puppet-bootstrap only once local.vm.provision :shell, :inline => <<-eos if [ ! -e /tmp/.bash.provision.done ]; then curl -L #{bootstrap_url} | bash touch /tmp/.bash.provision.done fi eos end end end |
Abbiamo definito due Ubuntu contenenti Puppet. Questo non è ancora il Vagrantfile
definitivo, ma già permette di creare le due macchine. Se siete curiosi, è possibile controllare che le due macchine siano effettivamente create con il comando:
$ vagrant up |
e successivamente connettersi usando i comandi:
$ vagrant ssh pg $ vagrant ssh backup |
Infine, le macchine possono essere distrutte con:
$ vagrant destroy -f |
In questa prima parte di tutorial abbiamo visto come configurare le dipendenze e siamo arrivati ad avere le due macchine virtuali su cui andare a installare, via Puppet, PostgreSQL e Barman.
La scrittura del manifesto Puppet per l’installazione vera e propria sarà argomento del prossimo articolo, in uscita la prossima settimana. A presto!
[…] Automatizzare Barman con Puppet: it2ndq/barman (parte uno) → […]