Puppet y vagrant para template vm

Esta pagina explica el funcionamiento de Puppet con Vagrant para la creacion del Template VM, que es utilizado en Template_VM

=Instalar Vagrant y Puppet= Si se quiere hacer modificaciones o probar, es necesario tener vagrant 1.2 o mayor y puppet 3.2 o mayor.

Vagrant
1. Setup inicial

sudo -i

2. Descargar y verificar

http://www.vagrantup.com/downloads.html

Ejemplo: wget -c https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.1_x86_64.deb

wget -c https://dl.bintray.com/mitchellh/vagrant/1.6.1_SHA256SUMS?direct

cat 1.6.1_SHA256SUMS | grep 1.6.1

sha256sum vagrant_1.6.1_x86_64.deb

3. Instalar

dpkg -i vagrant_1.6.1_x86_64.deb

Puppet
wget https://apt.puppetlabs.com/puppetlabs-release-precise.deb sudo dpkg -i puppetlabs-release-precise.deb sudo apt-get update

En caso de ser necesario, hacer upgrade a la ultima versión disponible

sudo apt-get update sudo puppet resource package puppet ensure=latest =Definición de "Template VM"=

Cuando decimos Template VM nos referimos a una maquina virtual estándar para SODEP, que sirve para pruebas o desarrollo.

=Configuración del Template VM=

Sea cual sea el box ubuntu utilizado, al aplicar el manifiesto puppet a la VM, ésta quedará siempre en el estado siguiente:


 * 1) Tendra un usuario de nombre "smart"
 * 2) Estará actualizado a la ultima versión disponible.
 * 3) Tendrá instalado los paquetes: unzip, rsync, tree, telnet, wget, python-software-properties, logrotate, joe, nginx, monit, ntp, ufw, tmux, postgresql, tomcat7, libtomcat7-java, tomcat7-common, openvpn
 * 4) Instalará desde repositorio Oracle JDK
 * 5) Configurará postgresql, tomcat7 y el logrotate para tomcat7

=Funcionamiento de Puppet=

Cada proyecto en puppet es independiente y siempre debe tener la siguiente estructura de archivos. mi_proyecto ├── manifests

│  └── mi_archivo_principal.pp

├── modules

│  └── mi_modulo

│      ├── files

│      ├── templates

│      └── manifests

└Vagrantfile La carpeta manifests solo contiene un archivo, el cual es mi_archivo_principal.pp donde está toda la definición del proyecto, todas las acciones que realizará puppet. En un proyecto, en este archivo, generalmente solo se definen "etapas" o "stages" y las "clases" o "modulos" que serán utilizados.

La carpeta modules contiene solo carpetas que son los nombres de los módulos o clases.

La carpeta mi_modulo es la clase definida por el programador que utilizara puppet. Pueden haber muchos módulos diferentes pero siempre deben ir bajo el directorio modules

La carpeta files dentro de un modulo, debe contener los archivos que puedan ser necesitados por el modulo.

La carpeta templates contiene plantillas que puedan ser necesitadas por el modulo.

La carpeta manifests dentro de un modulo, siempre contendrá un archivo que se llamara init.pp y que tendrá las acciones que realizará ese módulo.

En el archivo Vagrantfile siempre deberá estar definido el provisioner y el path al proyecto y sus módulos. Ejemplo: config.vm.provision :puppet do |puppet| puppet.manifests_path = "mi_proyecto/manifests" puppet.module_path = "mi_proyecto/modules" puppet.manifest_file = "mi_archivo_principal.pp" end