Premier Training & Business Partner Red Hat

Principi di configurazione di Puppet su RHEL / CentOS 6

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo vedremo come centralizzare e automatizzare delle configurazioni tra macchine Linux tramite Puppet.
Andremo a creare delle configurazioni specifiche su di un server che si riverseranno automaticamente sui client connessi alla rete facendo si che tutti i client abbiano le stesse configurazioni.

Per configurazioni intendiamo la creazione di file o directory con specifici permessi piuttosto che la creazione di utenti piuttosto che l’installazione di software con annesso la gestione dei servizi.

Praticamente ci permette di automatizzare alcune attività sistemistiche cambiando di fatto il modo con sui si opera.

Il suo funzionamento è il seguente:

Sul client viene lanciato il servizio che si connette al server da cui recupera il profilo di configurazione

Sul server sono configurati dei file con estensione .pp dove risiede la configurazione da implemetare.
Vediamo come implementare una struttura di questo tipo:

 

L’installazione del Puppet Master sul Server viene fatta tramite EPEL tramite i seguenti comandi:

rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-6.noarch.rpm

Verrà creato in /etc/yum.repos.d il file .repo necessario per l’installazione

pu1

A questo punto procediamo alla sua installazione:

yum install puppet-server

pu2

Avviamo il servizio e impostiamo l’autoavvio:

service puppetmaster start

chkconfig puppetmaster on

pu3

Vediamo adesso tramite alcuni esempi di diversa tipologia come strutturare il file che utilizzeranno i vari client per la loro configurazione.

Il file deve essere creato nella directory manifest in /etc/puppet/manifest e deve avere estensione .pp che si chiamerà site.pp

Vediamo alcuni esempi di come poter strutturare il file in base a diverse esigenze:

# CREARE UNA DIRECTORY:

file { “/percorso”: ensure => “directory” }

 

# CREARE PIU DIRECTORY IN UN PERCORSO:

file { [ “/tmp”, “/tmp/dir1”, “/tmp/dir1/dir2”, “/tmp/dir3” ]:

ensure => “directory”,

}

# CREARE DIRECTORY SPECIFICANDO PROPRIETARIO GRUPPO e PERMESSI:

file { “/tmp/dir1”:

ensure => “directory”,

owner => “pippo”,

group => “root”,

mode => 757,

}

 

# CREARE UN FILE CON PERMESSI:

file { “/tmp/file1”:

ensure => “present”,

owner => “root”,

group => “root”,

mode => 666,

}

 

# CREARE UN FILE SE NON PRESENTE CON PERMESSI:

file { “/tmp/miofile”:

replace => “no”,

ensure => “present”,

content => “hello world”,

mode => 646,

}

 

# CREARE UN UTENTE:

user { “pippo”:

ensure => “present”,

managehome => “true”,

}

 

# INSTALLARE UN PACCHETTO:

package { “httpd”: ensure => “installed”, }

 

# INSTALLARE PIU PACCHETTI:

package { “httpd”: ensure => “installed”, }

package { “samba”: ensure => “installed”, }

 

# RIMUOVERE UN PACCHETTO:

package { “httpd”: ensure => “absent” }

 

# AVVIO DI SERVIZI E AVVIO AL BOOT:

service { “sshd”:

enable => “true”,

ensure => “running”,

}

 

Ipotizziamo di avere diverse macchine client linux dove su ciascuna devono essere fatte delle configurazioni comuni a tutte come ad esempio:

  • Installare Apache e samba
  • Assicurarsi che i servizi siano in eseguzione e attivi al boot
  • Creare un utente di nome mario
  • Creare una Directory in /var di nome documenti con permessi 757
  • Creare un gruppo studenti con GID 563

 

Il file sarà creato in /etc/puppet/manifest e si chiamerà site.pp e sarà cosi strutturato:

package {“httpd”: ensure => “installed”}

package {“samba”: ensure => “installed”}

service {“httpd”:

ensure => “running”,

enable => “true”,

}

service {“smb”:

ensure => “running”,

enable => “true”,

}

user { “mario”:

ensure => “present”,

managehome => “true”,

}

file {“/var/documenti”:

ensure => “directory”,

mode => 757,

}

group {“studenti”:

gid => 563,

}

 

pup5

 

Non resta che riavviare il servizio PuppetMaster:

service puppetmaster restart

 

Detto questo procediamo alla preparazione di uno dei Client iniziando con l’installazione di Puppet sempre tramite EPEL:

rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-6.noarch.rpm

E successivamente installiamo Puppet:

yum install puppet

pu4

Sul file /etc/hosts diamo la mappatura IP – Hostname inserendo l’indirizzo ip della macchina dove è installato il Puppet Master con accanto il suo hostname che nel nostro caso è 192.168.0.100 e il suo hostname è pc2.talla.it.

pu5

Andiamo a ultimare la procedura configurando l’intervallo di tempo ( espresso in secondi ) entro il quale il client interrogerà il server per attuare/verificare la configurazione preimpostata dichiarando tramite hostname il nome del server a cui il client deve far riferimento.

 

Inseriamo il nome del server ossia pc2.talla.it nel file /etc/sysconfig/puppet

nano /etc/sysconfig/puppet

pu6

 

Infine il tempo espresso in secondi nel file /etc/puppet/puppet.conf

nano /etc/puppet/puppet.conf

pu7

Non resta che riavviare il servizio Puppet:

service puppet restart

 

Dopo poco vediamo infatti che la configurazione inizia ad attuarsi:

pu8

Al termine vediamo che la configurazione sul file site.pp viene completata sul client:

pu9

Info about author

Michele Milaneschi

RHCE Consultant