Puppet

Descripción general del funcionamiento

Cliente

1- Instalación

#apt-get install puppet

2- Configuración
vim /etc/puppet/puppetd.conf

        [puppetd]

        # Make sure all log messages are sent to the right directory

        # This directory must be writable by the puppet user

        logdir=/var/log/puppet

        vardir=/var/lib/puppet

        rundir=/var/run

        report = true

        server = homero.lunix.com.ar

3- Arranque y espera de autorización

#puppetd —server homero.lunix.com.ar —waitforcert 60 —test

Servidor

1- Ver clientes a la espera de ser certificados
puppetca —list

2- Crear certicados
puppetca —sign HOSTNAME

3- Potpurri

En /etc/puppet/manifest:

- site.pp : aca se define lo que tiene el nodo base y si un cliente no esta en la lista de nodos de debe tomar la conf del nodo base
-nodes.pp : Acá se definen las rutas de la configuracion de cada nodo:

  1. Deficion de nodos de fich

import "nodes/fich/*.pp"

-nodes/ : los directorios de los nodos, y ahi dentro cada archivo .pp tiene la configuración de las variables y las clases que se incluyen (el archivo debe tener el nombre del hostname.pp)

-classes/ : los archivos de clases tienen los recursos (file, cron{talarchivo}:) y los comandos que deben ejecutarse, xej owner, group..

-templates : en /var/lib/puppet/templates/ se encuentran los archivos con extensión .erb que son las templates en donde cada cliente reemplazará con el contenido de sus variables

- archivos : si necesitamos que el cliente se baje un archivo de configuración o lo que sea, se deben almacenar en /etc/puppet/files/configs/. Luego en la clase (archivo .pp) se lo debe llamar con la directiva source… ver abajo el ejemplo de snmpd.

Ejemplo: cliente Cordoba - mondo

Para realizar pruebas, bajar el cliente puppet /etc/init.d/puppetd stop
y luego iniciarlo en modo debug: puppetd —debug

- Clase: /etc/puppet/manifest/classes/mondobackup.pp

class mondobackup{
        $mondo_dir = "/usr/local/sbin"
        $backup_mondo_sh="$mondo_dir/backup-mondo.sh"

        package{
                "mondo":
                        ensure => installed
        }
}

- Nodo: /etc/puppet/manifest/nodes/lunix/cordoba.lunix.com.ar.pp
node 'cordoba.lunix.com.ar' inherits basenode {

# Variables
    $mail_admin = 'emiliano@lunix.com.ar'
    $zabbix_server = '192.168.0.11'
    $zabbix_server_port = '10050'

# Inclusión de clases
    include mondobackup
}

Ejemplo con squid

-Archivo template /var/lib/puppet/templates/squid.erb

visible_hostname <%= visible_hostname %>
acl red_local src <%= red_local %>

Ejemplo de un .pp que controla si esta corriendo

service {
                "squid":
                        enable => true,
                        ensure => running,
                        require => Package["squid"],
                        tag => squid-running;
        }

Ejemplo que instala paquetes, crea directorios, enlaces simbólicos, baja templates..

$mondo_user_parameters = []

class mondobackup {
        $mondo_dir = "/usr/local/sbin"
        $backup_mondo_sh = "$mondo_dir/backup-mondo.sh"

        package {
                "mondo":
                        ensure => installed
        }

        file {
                $mondo_dir:
                        ensure => directory,
                        owner => root,
                        group => root,
                        mode => 0755,
                        require => Package["mondo"];
                $backup_mondo_sh:
                        owner => root,
                        group => root,
                        mode => 0700,
                        content => template("backup_mondo_sh.erb"),
                        require => Package["mondo"];
                "/u":
                        ensure => directory,
                        owner => root,
                        group => root,
                        mode => 0755;
                "/u/backup-mondo":
                        ensure => directory,
                        owner => lunix,
                        mode => 0700,
    require => File["/u"];
                "/u/backup-mondo/tmp":
                        ensure => directory,
                        owner => lunix,
                        mode => 0700,
                        require => File["/u/backup-mondo"];
                "/home/lunix/backup":
                        ensure => link,
                        force => true,
                        target => "/u/backup-mondo",
                        require => File["/u/backup-mondo"];
        }

        cron { run-mondo:
                command => $backup_mondo_sh,
                user => root,
                monthday => 1,
                minute => 0,
                hour => 1,
                require => File[$backup_mondo_sh],
        }

}

Ejemplo snmpd: instala un paquete y se baja el archivo de configuración

/etc/puppet/manifests/classes/snmpd-base.pp

class snmpd-base {

        package {
                "snmpd":
                        ensure => installed
        }

        file { "/etc/snmp/snmpd.conf":
                owner => root,
                group => root,
                mode => 0600,
                source => "puppet://homero.lunix.com.ar/configs/snmpd.conf",
                require => Package["snmpd"];
        }
        file { "/etc/default/snmpd":
                owner => root,
                group => root,
                mode => 0644,
                source => "puppet://homero.lunix.com.ar/configs/snmpd",
                require => Package["snmpd"];
        }

}

Doc

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License