<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mia mamma usa Linux! &#187; Puppet</title>
	<atom:link href="http://www.miamammausalinux.org/category/software/puppet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Puppet: Automatizzazione dei task di amministrazione</title>
		<link>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/</link>
		<comments>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 15:47:42 +0000</pubDate>
		<dc:creator>Marco Bonetti</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Automatizzazione task]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=343</guid>
		<description><![CDATA[Puppet è una infrastruttura per l&#8217;automatizzazione della gestione e amministrazione di un parco macchine UNIX-like. Il framework è composto da un puppet master che è il server centrale incaricato di raccogliere tutte le azioni e i file di configurazione utilizzati e da svariati puppet, agenti che vengono installati sulle macchine che si vogliono controllare e [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/puppet.png" alt="puppet" width="151" height="44" class="alignnone size-full wp-image-357" /></p>
<p><a href="http://reductivelabs.com/trac/puppet/">Puppet</a> è una infrastruttura per l&#8217;automatizzazione della gestione e amministrazione di un parco macchine UNIX-like.<br />
Il framework è composto da un <em>puppet master</em> che è il server centrale incaricato di raccogliere tutte le azioni e i file di configurazione utilizzati e da svariati <em>puppet</em>, agenti che vengono installati sulle macchine che si vogliono controllare e periodicamente contattano il master per conoscere nuove configurazioni e controllare se il proprio stato è in linea con quanto richiesto dal server centrale. Per ultime ci sono le <em>recipe</em>, le ricette, file di testo che descrivono le azioni da intraprendere sui puppet e i file di configurazione da utilizzare.</p>
<p>Puppet è disponibile già pacchettizzato per la maggior parte delle distribuzioni Linux, vediamo come è possibile eseguire un setup di prova di un puppet master e di un singolo client su macchine Debian Etch. Prima di proseguire, però, una piccola nota: la versione inclusa in Etch è piuttosto vecchia e non implementa alcune feature interessanti, come la gestione delle ricette via moduli, presenti in versioni più recenti del programma. Se si vuole sperimentare con queste nuove caratteristiche è comunque sempre possibile installare senza problemi i pacchetti dal repository Testing, in quanto gli sviluppatori si assicurano che tali pacchetti siano sempre compatibili con la versione Stable della distribuzione.</p>
<p><strong>1. Il puppet master</strong><br />
Raggiungete la macchina prescelta come puppet master che chiameremo, senza troppa fantasia, master e installate i programmi necessari:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# apt-get install puppetmaster</pre></div></div>

<p>Questa operazione installerà anche le dipendenze, compreso il pacchetto per l&#8217;agent puppet.<br />
L&#8217;installazione terminerà con uno sconfortante errore: niente paura! Il master non è ancora stato configurato a dovere e gli script di init non sono in grado di avviarlo correttamente.<br />
Preoccupiamoci innanzitutto di permettere l&#8217;accesso ai file che verranno serviti dal nostro master, editate il file <em>/etc/puppet/fileserver.conf</em> e aggiungete una riga per permettere l&#8217;accesso alla sottorete 192.168.0.0/24 (per esempio):</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>files<span style="">&#93;</span></span>
  path /etc/puppet/files
  allow 192.168.0.0/<span style="">24</span></pre></div></div>

<p>A questo punto creiamo una configurazione iniziale, editate il file <em>/etc/puppet/manifests/site.pp</em> con il seguente contenuto:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Main puppet master configuration</span>
import <span style="color:#996600;">&quot;classes/*.pp&quot;</span>
&nbsp;
node default <span style="color:#006600; font-weight:bold;">&#123;</span>
  import sudo
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>La prima riga richiede l&#8217;inclusione dei file .pp (le ricette) presenti nella cartella classes, vedremo tra poco come crearli, le successive definiscono la configurazione di default da servire ai nodi e questa richiede l&#8217;implementazione della ricetta &#8220;sudo&#8221;.<br />
Vediamo, dunque, la nostra prima ricetta: &#8220;sudo&#8221;, questa ricetta si preoccupa di controllare che i permessi del file <em>/etc/sudoers</em> siano corretti. Creiamo la cartella per le ricette:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# mkdir /etc/puppet/manifests/classes</pre></div></div>

<p>Dopo di che scriviamo il file <em>/etc/puppet/manifests/classes/sudo.pp</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Testing class for sudoers permissions</span>
class <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
&nbsp;
        <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #ff0000;">&quot;/etc/sudoers&quot;</span>:
                owner =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #ff0000;">&quot;root&quot;</span>,
                group =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #ff0000;">&quot;root&quot;</span>,
                mode =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000;">440</span>,
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Il master è stato configurato correttamente, occupiamoci ora del client locale, editate <em>/etc/puppet/puppetd.conf</em> con i seguenti contenuti:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>puppetd<span style="">&#93;</span></span>
# Make sure all log messages are sent to the right directory
# This directory must be writable by the puppet user
<span style="color: #000099;">logdir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/log/puppet</span>
<span style="color: #000099;">vardir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/lib/puppet</span>
<span style="color: #000099;">rundir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/run</span>
<span style="color: #000099;">server</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">master</span></pre></div></div>

<p>Fatto! Master e puppet (locale) sono stati configurati correttamente, proviamo quindi la configurazione in locale, come prima azione simuliamo un guasto cambiando i permessi di sudoers:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# chmod 700 /etc/sudoers</pre></div></div>

<p>Ora, riavviamo i servizi del master e del puppet locale:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# /etc/init.d/puppetmaster restart
root@master:~# /etc/init.d/puppet restart</pre></div></div>

<p>Se ora controlliamo nuovamente sudoers dovremmo trovare i suoi permessi originali a 440 <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>2. I puppet</strong><br />
Un puppet master senza alcun puppet client non ha alcun senso di esistere, vediamo quindi come è possibile configurare un ipotetico client che ripsponda all&#8217;indirizzo puppet1 come client per il master configurato in precedenza. Il pacchetto necessario è puppet, quindi installiamolo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# apt-get install puppet</pre></div></div>

<p>Ed editiamo il suo file di configurazione, <em>/etc/puppet/puppetd.conf</em>, usando lo stesso identico contenuto già riportato in precedenza:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>puppetd<span style="">&#93;</span></span>
# Make sure all log messages are sent to the right directory
# This directory must be writable by the puppet user
<span style="color: #000099;">logdir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/log/puppet</span>
<span style="color: #000099;">vardir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/lib/puppet</span>
<span style="color: #000099;">rundir</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/var/run</span>
<span style="color: #000099;">server</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">master</span></pre></div></div>

<p>Il client è configurato e pronto a ricevere istruzioni. Prima di poter ricevere istruzioni, però, è necessario che il master conosca il client e lo autorizzi a ricevere le istruzioni registrate. Per fare ciò cominciamo ad avviare il client:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# /etc/init.d/puppet restart</pre></div></div>

<p>Spostiamoci sul server e controlliamo la coda di richieste:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# puppetca --list</pre></div></div>

<p>Dovrebbe apparire il nome del client, nel nostro esempio è puppet1, firmiamo quindi il suo certificato e abilitiamolo a ricevere le configurazioni:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@master:~# puppetca --sign puppet1</pre></div></div>

<p>Fine! Master e puppet sono ora configurati correttamente, facciamo un ultima prova simulando lo stesso guasto provato in precedenza sul nostro client: alterate i permessi di <em>/etc/sudoers</em> nel client, dopo di che riavviate il servizio:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">root@puppet1:~# /etc/init.d/puppet restart</pre></div></div>

<p>E il file sudoers verrà corretto, di nuovo <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Puppet non si limita a sistemare permessi sui files ma si occupa anche di trasferire contenuti e assicurare l&#8217;installazione di pacchetti o l&#8217;esecuzione di comandi, il <a href="http://reductivelabs.com/trac/puppet/wiki/DocumentationStart">wiki</a> raccoglie documentazione in quantità per creare le proprie ricette ed è un ottimo punto di partenza per ottenere più informazioni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/01/puppet-automatizzazione-dei-task-di-amministrazione/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

