developerlover.com

Cómo crear y utilizar los módulos de Puppet con Vagrant

Continuando con el post anterior en el que explicábamos cómo crear un entorno de desarrollo con Vagrant y Puppet, ahora vamos a explicar cómo crear y utilizar los módulos de Puppet con Vagrant, algo que nos será de mucha utilidad a la hora de organizar nuestros recursos.

¿Qué son los módulos de Puppet?

Un módulo de Puppet es un paquete de código y datos, un directorio que va a contener (entre otras cosas) nuestros manifiestos, plantillas, archivos, tests…

Un ejemplo podría ser el módulo de PHP, que contendría el manifiesto que se encarga de toda la instalación y configuración de PHP y el fichero php.ini que se va a utilizar.

Los módulos son la forma que tiene Puppet de mantener organizado nuestro código. Los podremos crear nosotros mismos o utilizar los disponibles en Puppet Forge creados por otras personas. Como recomendación, yo no utilizaría los módulos de Puppet Forge hasta que tengamos claro cómo funcionan y no tengamos problema en crearlos.

La estructura de directorios de un módulo de Puppet es la siguiente:

nombre_del_modulo
| - - manifests
| - - files
| - - templates
| - - lib
| - - facts.d
| - - tests
` - - spec

En este post vamos a centrarnos en los manifiestos (manifests) y en los ficheros (files), más adelante explicaremos el resto.

¿Cómo utilizar los módulos de Puppet?

Continuando con el ejemplo del post anterior en el que creábamos un entorno de desarrollo LAMP, vamos a crear un fichero index.php que mostrará el famoso mensaje “HOLA MUNDO!“, y vamos a hacerlo accesible desde nuestro navegador a través de un host virtual en Apache. Todo esto utilizando los módulos de Puppet, claro.

Vamos a comenzar creando el siguiente árbol de directorios y ficheros (los ficheros los podemos dejar vacíos de momento):

.
| - - puppet
|     | - - manifests
|     |     ` - - default.pp
|     ` - - modules
|           ` - - holamundo
|                 | - - files
|                 |     | - - index.php
|                 |     ` - - holamundo.conf
|                 ` – – manifests
|                       ` - - init.pp
` - - Vagrantfile

Y a continuación vamos a añadir el contenido a cada fichero.

Vagrantfile

Lo primero, utilizando el fichero Vagrantfile del post anterior, vamos a indicar a Vagrant en qué directorio se encuentran los módulos de Puppet. El contenido de Vagrantfile debería ser el siguiente:

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure('2') do |config|
 
  # Sistema operativo
  config.vm.box = 'ubuntu/trusty64'
 
  # IP privada
  config.vm.network 'private_network', ip: '10.0.0.100'
 
  # Configuración de VirtualBox
  config.vm.provider :virtualbox do |vb|
 
    # Nombre de la máquina virtual
    vb.name = 'developerlover'
 
    # Memoria
    vb.memory = 2048
   
    # Número de procesadores
    vb.cpus = 2
   
  end
 
  # Habilitar aprovisionamiento por Puppet
  config.vm.provision :puppet do |puppet|
 
    # Localización de los ficheros de configuración manifiestos
    puppet.manifests_path = 'puppet/manifests'
    
    # Directorio de los módulos
    puppet.module_path = 'puppet/modules'
 
    # Nombre del manifiesto que se va a ejecutar inicialmente
    puppet.manifest_file = 'default.pp'
 
    # Opciones de Puppet. Se activa el modo debug y verbose
    puppet.options = [
      '--verbose',
      '--debug',
    ]
 
  end
 
end

Como veis hemos añadido la directriz puppet.module_path con la ruta en dónde se encuentran los módulos.

index.php

Nuestro fichero index.php que copiaremos en /var/www/holamundo/:

<?php
    echo 'HOLA MUNDO!';
?>

holamundo.conf

Este fichero va a contener la configuración del host virtual necesaria para poder acceder al index.php desde el navegador.

En el proceso de aprovisionamiento será copiado a /etc/apache2/sites-available/ para después crear a este último un enlace en /etc/apache2/sites-enabled/, algo necesario en Ubuntu para crear y activar un host virtual.

<VirtualHost *:80>
  ServerName holamundo.vm
  ServerAlias www.holamundo.vm
  DocumentRoot /var/www/holamundo
  <Directory /var/www/holamundo>
    DirectoryIndex index.php index.html
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
    Options Indexes FollowSymLinks MultiViews
  </Directory>
</VirtualHost>

default.pp

Para este manifiesto (en el que se instala PHP, Apache y Mysql) vamos a utilizar el mismo que utilizamos en el post anterior añadiéndole una sola línea, la que incluirá el módulo holamundo.

IMPORTANTE: No vamos a separar este manifiesto en módulos para no liarnos demasiado. Sólo vamos a crear el módulo holamundo que configurará la página y el host virtual.

Y dicho esto, como contenido del manifiesto vamos a usar el siguiente:

# Actualizar los repositorios de paquetes
exec { "apt-get update":
    command => "/usr/bin/apt-get update"
}

# Instalación de Apache
package { "apache2":
    ensure => present,
    require => Exec["apt-get update"]
}

# Arrancar el servicio de Apache
service { "apache2":
    ensure => running,
    require => Package["apache2"]
}

# Lista de paquetes de PHP para instalar
$packages = [
    "php5",
    "php5-cli",
    "php5-mysql",
    "php5-dev",
    "php5-curl",
    "php-apc",
    "libapache2-mod-php5"
]

# Instalación de los paquetes de PHP
package { $packages:
    ensure => present,
    require => Exec["apt-get update"],
    notify => Service["apache2"]
}

# Instalación del servidor de MySQL
package { "mysql-server":
    ensure => present,
    require => Exec["apt-get update"]
}

# Arrancar el servicio de MySQL
service { "mysql":
    ensure => running,
    require => Package["mysql-server"]
}

# Incluimos el módulo holamundo
include holamundo

MUY IMPORTANTE: La línea añadida include holamundo es la forma de ejecutar un módulo en Puppet, no es necesario (como en otros lenguajes) crear una instancia de la clase (que crearemos a continuación) ni nada parecido. Un módulo sólo se ejecutará cuando se haga un include de éste.

IMPORTANTE: Cuando incluimos un módulo y no especificamos manifiesto, por defecto se cargará el manifiesto init.pp.

init.pp

Y para el manifiesto init.pp del módulo holamundo, el siguiente contenido:

class holamundo
{

    $vhost_file = "/vagrant/puppet/modules/$name/files/holamundo.conf"
    $index_file = "/vagrant/puppet/modules/$name/files/index.php"

    # Crea el directorio /var/www/holamundo
    file { "/var/www/$name":
        require => Package["apache2"],
        ensure => "directory",
    }

    # Crea el fichero index.php con el contenido de nuestro index.php
    file { "/var/www/$name/index.php":
        require => File["/var/www/$name"],
        ensure => present,
        source => $index_file,
    }

    # Crea el fichero con el host virtual en el directorio sites-available
    file { "/etc/apache2/sites-available/$name.conf":
        require => File["/var/www/$name"],
        ensure => present,
        source => $vhost_file,
    }

    # Crea el enlace del host virtual al directorio sites-enabled 
    # y le notificamos al servicio de Apache que se reinicie
    file { "/etc/apache2/sites-enabled/$name.conf":
        require => File["/etc/apache2/sites-available/$name.conf"],
        ensure => link,
        target => "/etc/apache2/sites-available/$name.conf",
        notify => Service['apache2'],
    }

}

IMPORTANTE: En el manifiesto init.pp el nombre de la clase debe coincidir con el nombre del módulo.

Si os fijáis, en este manifiesto se está usando la variable $name y en ningún momento la hemos declarado. Esto es porque por defecto, en cada manifiesto siempre va a existir esa variable que va a contener el nombre de la clase, en este caso holamundo. Esta variable no se puede sobreescribir.

Aprovisionar la máquina virtual

Con todos los ficheros creados y con su contenido añadido, sólo nos quedaría ejecutar un comando para aprovisionar la máquina y aplicar la configuración. El comando lo tenemos que ejecutar en la raíz del directorio, donde se encuentra el fichero Vagrantfile. Y en este punto tenemos dos opciones:

  • Para los que ya tenían la máquina creada del post anterior, ejecutar con la máquina encendida:
    $ vagrant provision
  • Para los que no la tenían creada, ejecutar con la máquina apagada:
    $ vagrant up

Ahora solo tenemos que añadir en nuestro fichero hosts el dominio que hemos indicado en el host virtual (holamundo.vm). La línea debería ser:

10.0.0.100 holamundo.vm www.holamundo.vm

Y si todo ha ido bien, al acceder a http://holamundo.vm/ deberíamos ver nuestro mensaje.

Categorías: Puppet, Vagrant

Añadir clave privada SSH de forma permanente en OS X » « Crear un entorno de desarrollo con Vagrant y Puppet

2 Comentarios

  1. Muy buen post, para cuando el proximo ?

Deja un comentario

Your email address will not be published.

Copyright © 2017 developerlover.com

Up ↑