SlideShare una empresa de Scribd logo
1 de 40
VIRTUALIZACIÓN Y PROVISIONAMIENTO

Virtualización y
Provisionamiento:
Entornos de desarrollo con
Vagrant y Puppet
Daniel Acedos
VIRTUALIZACIÓN CON VAGRANT
VIRTUALIZACIÓN CON VAGRANT
VAGRANT


http://www.vagrantup.com/



Vagrant es una herramienta para la creación y
configuración de entornos de desarrollo virtualizados.



Originalmente se desarrolló para VirtualBox y sistemas de
configuración tales como Chef, Salt y Puppet.



Desde la versión 1.1 Vagrant es capaz de trabajar con
multiples proveedores




VMware, Amazon EC2, LXC, DigitalOcean...

Aunque Vagrant se ha desarrollado en Ruby se puede usar
en multitud de projectos escritos en otros lenguajes


PHP, Python, Java, C# y JavaScript
VIRTUALIZACIÓN CON VAGRANT
BOXES


Vagrant no construye máquinas virtuales desde cero



Lento
Tedioso



Utiliza imágenes llamadas BOXES para clonar máquinas
virtuales rápidamente



Especificar el BOX a utilizar es siempre el primer paso en
un fichero Vagrantfile



Los boxes, una vez descargados se guardan en
~/.vagrant.d/boxes



Pueden empaquetarse de nuevo con el comando package
VIRTUALIZACIÓN CON VAGRANT
VAGRANTFILE


Describe el tipo de máquina que se utilizará en el proyecto
y cómo configurar y aprovisionar dichas máquinas



El nombre del fichero descriptor tiene que ser vagrantfile



Un solo Vagrantfile por proyecto



Multiplataforma



Sintaxis Ruby



No es necesario conocer la sintaxis de Ruby
Prácticamente es sólo asignación de variables
VIRTUALIZACIÓN CON VAGRANT
PUPHPET


Herramienta gráfica online para crear proyectos con
Vagrant de una manera sencilla



Nos ayuda a generar el Vagrantfile mediante un asistente



https://puphpet.com/
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Configuración del BOX
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Redireccionamiento de puertos


Añadir uno a uno los puertos redireccionados
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Carpetas Compartidas
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Instalar paquetes
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Servidor WEB. Módulos
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Servidor Web. Virtual Host
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: PHP
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: PHP - Extensiones
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Bases de datos SQL


Si no queremos base de datos SQL tendremos que
eliminarla o no podremos finalizar sin haberla configurado
VIRTUALIZACIÓN CON VAGRANT
PUPHPET: Bases de datos No SQL


Es necesario añadirla para poder configurar
VIRTUALIZACIÓN CON VAGRANT

Configuración manual
VIRTUALIZACIÓN CON VAGRANT
VAGRANTFILE


Describe el tipo de máquina que se utilizará en el proyecto
y cómo configurar y aprovisionar dichas máquinas



El nombre del fichero descriptor tiene que ser vagrantfile



Un solo Vagrantfile por proyecto



Multiplataforma



Sintaxis Ruby



No es necesario conocer la sintaxis de Ruby
Prácticamente es sólo asignación de variables
VIRTUALIZACIÓN CON VAGRANT
VAGRANTFILE: DEFINIR BOX
config.vm.define :XXX do |XXX|
XXX.vm.box =””
Tipo de imagen

XXX.vm.box_url = “”

Url de la que se descarga el Box

XXX.vm.network :private_network, ip: “"

IP de la máquina virtual.
Para las configuraciones con una sola máquina siempre la 10.12.12.2
Cuando se tenga que trabajar con dos proyectos distintos a la vez
Se modifica localmente y no se sube el cambio al repositorio

XXX.vm.network :forwarded_port, host: XX, guest: YY
XXX.vm.hostname = "XXX.dev"

Nombre de dominio de la máquina virtual
VIRTUALIZACIÓN CON VAGRANT
VAGRANTFILE: DEFINIR BOX

...
config.vm.define :emting do |emting|
emting.vm.box = "gigigo-oc-wheezy-7.2-x64.box"
emting.vm.box_url = "http://box.gigigo.com/gigigo-oc-wheezy-7.2-x64.box"
emting.vm.network :private_network, ip: "10.12.12.2"
emting.vm.network :forwarded_port, host: 81, guest: 80
emting.vm.network :forwarded_port, host: 27018, guest: 27017
emting.vm.hostname = "emting.dev"
...
VIRTUALIZACIÓN CON VAGRANT
PARÁMETROS DE LA MÁQUINA VIRTUAL
emting.vm.provider "virtualbox" do |XXX|
XXX.customize ["modifyvm", :id, "--param", "value"]
--name
Nombre que tendrá la máquina dentro del listado de MV's de VirtualBox
--cpus
Nº de CPU's de la MV. No conviene poner más de 1
--memory
512Mb sería suficiente para la mayoría de los casos
Si utilizamos "mongo" → mínimo 2Gb
--ioapic
Desactiva la propiedad "ioapic" del procesador
--natdnsresolver1
Resolver las DNS a través de la interfaz de NAT
--nictype1
Tipo de tarjeta(s) de red: paravirtualizado (más rendimiento)
VIRTUALIZACIÓN CON VAGRANT

...

...

emting.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "emting"]
v.customize ["modifyvm", :id, "--cpus", "1"]
v.customize ["modifyvm", :id, "--memory", 2048]
v.customize ["modifyvm", :id, "--ioapic", "off"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ['modifyvm', :id, '--nictype1', 'virtio']
v.customize ['modifyvm', :id, '--nictype2', 'virtio']
end
VIRTUALIZACIÓN CON VAGRANT



Es necesario hacer el apt-get update antes del
provisionamiento para asegurar que todos los paquetes
descargados estén en la última versión
...

# Update package list
emting.vm.provision :shell, :inline =>
“if [[ ! -f /apt-get-run ]]; then
sudo apt-get update && sudo touch /apt-get-run;
fi"

...
VIRTUALIZACIÓN CON VAGRANT
CARPETAS COMPARTIDAS


Pueden compartirse carpetas locales en la máquina virtual
creada



XXX.vm.synced_folder LOCAL_DIR, REMOTE_DIR, id: "AAA", :owner
=> "BBB", :group => "CCC”



Para proyectos PHP que utilicen es necesario compartir la carpeta con
el código. Si el proyecto utiliza composer, compartiremos tambien la
carpeta “.composer” de nuestro home del usuario

...
emting.vm.synced_folder "../", "/var/www/emting", id: "vagrantemting", :owner => "www-data", :group => "www-data"
...
VIRTUALIZACIÓN CON VAGRANT
APROVISIONAMIENTO


Hay que indicar a Vagrant una configuración mínima para
realizar el aprovisionamiento con Puppet



puppet.manifests_path

Directorio con los ficheros de configuración de puppet

puppet.module_path



Directorio con los módulos a instalar

...

#
...

# Puppet provision
emting.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.module_path = "modules"
puppet.options = ['--verbose']
puppet.options = ['--debug']
end
VIRTUALIZACIÓN CON VAGRANT
COMANDOS VAGRANT


vagrant status



vagrant up



vagrant halt



vagrant destroy



vagrant provision
 Sabemos que lo ha hecho bien cuando veamos el mensaje

...
Info: Applying configuration version '1389860822'
...


vagrant package



vagrant ssh
APROVISIONAMIENTO CON PUPPET
APROVISIONAMIENTO CON PUPPET
PUPPET


http://puppetlabs.com/



herramienta diseñada para administrar la configuración de
sistemas Unix y Microsoft Windows de forma declarativa.



Describe los recursos del sistema y sus estados utilizando
el lenguaje declarativo que proporciona Puppet.



Puppet descubre la información del sistema a través de una
utilidad llamada Facter.


http://projects.puppetlabs.com/projects/facter



Compila los manifiestos en un catálogo específico que
contiene los recursos y la dependencia de dichos recursos.



Los catálogos son ejecutados en los sistemas de destino.
APROVISIONAMIENTO CON PUPPET
PUPPET


Instalar Puppet




Fichero de configuración puppet






sudo apt-get install puppet

Dentro del directorio manifests
default.pp
Lenguage puppet

Módulos puppet






Es cómo puppet encuentra las clases y tipos que puede usar.
“oficiales” de puppet o desarrollados por terceros. Fuentes fiables:
 Puppetlabs
 Example42
Tienen que estar descargados antes de poder instalarse.
Se descargarán en directorios relativos al proyecto
 Garantiza independencia del proyecto
APROVISIONAMIENTO CON PUPPET
MODULES


Para que nuestros proyectos de Vagrant y puppet sean
independientes los módulos se gestionarán de manera
aislada para cada proyecto.




puppet module search




--modulepath modules

Buscar módulos en el market de puppet

Puppet module list --modulepath modules


lista los módulos instalados en el proyecto



puppet module install XXX --modulepath modules



puppet module uninstall XXX --modulepath modules



Cada módulo dispone de su propia página de ayuda donde
se explica como instalarlo y configurarlo
APROVISIONAMIENTO CON PUPPET
FICHERO DEFAULT.PP


Puede dividirse en bloques (classes) y ejecutarse
secuencialmente:

...
class prepare {
[...]
}
class packages {
[...]
}
class files {
[...]
}
class deploy{
[...]
}
# Ordered execution
class {'prepare': } ->
class {'packages': } ->
class {'files': } ->
class {'deploy': }
...
APROVISIONAMIENTO CON PUPPET
CLASS PACKAGES: PACKAGE
...

...



class packages {
package { [
'bmon',
'build-essential',
'ccze',
'curl',
'git-core',
'htop',
'iotop',
'joe',
'multitail',
'vim',
]:
ensure => 'installed',
}

Descarga los comandos básicos que queremos tener
instalados en nuestra máquina virtual
APROVISIONAMIENTO CON PUPPET
CLASS PACKAGES: MÓDULO APACHE


example42-apache




https://github.com/example42/puppet-apache

puppet module install example42-apache --modulepath modules
...

class { 'apache': }
apache::dotconf { 'custom':
content => 'EnableSendfile Off',
}
apache::module { 'rewrite': }

...

apache::vhost { 'emting':
source => 'puppet:///modules/apache/vhosts/emting.conf.erb',
template => '',
priority => 1,
}
APROVISIONAMIENTO CON PUPPET
CLASS PACKAGES: MÓDULO PHP


example42-php




https://github.com/example42/puppet-php

puppet module install example42-php --modulepath modules
...

...

class { 'php':
service
=> 'apache',
service_autorestart => false,
module_prefix
=> '',
}
php::module { 'php-apc': }
php::module { 'php5-sqlite': }
php::module { 'php5-cli': }
php::module { 'php5-curl': }
php::module { 'php5-intl': }
php::module { 'php5-mcrypt': }
class { 'php::devel':
require => Class['php'],
}
class { 'php::pear':
require => Class['php'],
}
APROVISIONAMIENTO CON PUPPET
CLASS PACKAGES: MÓDULO MONGODB


puppetlabs-mongodb




https://forge.puppetlabs.com/puppetlabs/mongodb

puppet module install example42-mongodb --modulepath modules
...

...

php::pecl::module { 'mongo':
use_package => false,
}
class {'::mongodb::globals':
manage_package_repo => true,
}->
class {'::mongodb::server': }
APROVISIONAMIENTO CON PUPPET
CLASS PACKAGES: MÓDULO COMPOSER


Willdurand-composer




https://forge.puppetlabs.com/willdurand/composer

puppet module install willdurand-composer --modulepath modules
...

...

class { 'composer':
require => Package['php5', 'curl']
}
APROVISIONAMIENTO CON PUPPET
CLASS FILES


Modifica ficheros dentro del sistema de la máquina virtual



Activar extensión de PHP en apache
exec {"mongophpextension":
command => 'echo "extension=mongo.so" > /etc/php5/conf.d/mongo.ini',
user => 'root',
}



Cambiar el shell por defecto para el usuario www-data

exec {'changedefaultshellwwwdata':
command => 'sed -i "s/www-data:x:33:33:www-data:/var/www:/bin/sh/wwwdata:x:33:33:www-data:/var/www:/bin/bash/" /etc/passwd',
user => root,
cwd => "/root"
}



Deshabilitar el sitio por defecto de apache y reiniciar

file {"/etc/apache2/sites-enabled/000-default":
ensure => 'absent',
before => Service['apache']
}
APROVISIONAMIENTO CON PUPPET
CLASS DEPLOY


Ejecuta instrucciones para realizar el despliegue



Ejecutar composer para descargar las librerías del proyecto



En Debian es necesaria la línea de environment, en otras
distribuciones como Ubuntu no hace falta

...

...

exec { 'composerinstall':
environment => ["COMPOSER_HOME=/var/www/.composer"],
command => 'composer install --no-interaction',
cwd => '/var/www/emting/',
user => 'www-data',
timeout => 900
}
APROVISIONAMIENTO CON PUPPET
EJEMPLO DEFAULT.PP COMPLETO
## EMT - Emting
Exec {
path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/' ],
logoutput => 'on_failure'
}
class prepare {
class {'apt': }
}
class packages {
package { [
'bmon',
'build-essential',
'ccze',
'curl',
'git-core',
'htop',
'iotop',
'joe',
'multitail',
'vim',
]:
ensure => 'installed',
}
class { 'apache': }
apache::dotconf { 'custom':
content => 'EnableSendfile Off',
}

php::module { 'php-apc': }
php::module { 'php5-sqlite': }
php::module { 'php5-cli': }
php::module { 'php5-curl': }
php::module { 'php5-intl': }
php::module { 'php5-mcrypt': }
class { 'php::devel':
require => Class['php'],
}
class { 'php::pear':
require => Class['php'],
}
php::pecl::module { 'mongo':
use_package => false,
}
class {'::mongodb::globals':
manage_package_repo => true,
}->
class {'::mongodb::server': }

}

class { 'composer':
require => Package['php5', 'curl']
}

apache::module { 'rewrite': }
apache::vhost { 'emting':
source =>
'puppet:///modules/apache/vhosts/emting.conf.erb',
template => '',
priority => 1,
}
class { 'php':
service
=> 'apache',
service_autorestart => false,
module_prefix
=> '',
}

class files {
exec {"mongophpextension":
command => 'echo "extension=mongo.so"
> /etc/php5/conf.d/mongo.ini',
user => 'root',
}

exec {'changedefaultshellwwwdata':
command => 'sed -i "s/www-data:x:33:33:wwwdata:/var/www:/bin/sh/www-data:x:33:33:wwwdata:/var/www:/bin/bash/" /etc/passwd',
user => root,
cwd => "/root"
}
file {"/etc/apache2/sites-enabled/000-default":
ensure => 'absent',
before => Service['apache']
}
}
# Deploy
class deploy {
exec { 'composerinstall':
environment =>
["COMPOSER_HOME=/var/www/.composer"],
command => 'composer install --no-interaction',
cwd => '/var/www/emting/',
user => 'www-data',
timeout => 900
}
}
# Ordered execution
class {'prepare': } ->
class {'packages': } ->
class {'files': } ->
class {'deploy': }
APROVISIONAMIENTO CON PUPPET
EJEMPLO DEFAULT.PP COMPLETO
## EMT - Emting
Exec {
path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/' ],
logoutput => 'on_failure'
}
class prepare {
class {'apt': }
}
class packages {
package { [
'bmon',
'build-essential',
'ccze',
'curl',
'git-core',
'htop',
'iotop',
'joe',
'multitail',
'vim',
]:
ensure => 'installed',
}
class { 'apache': }
apache::dotconf { 'custom':
content => 'EnableSendfile Off',
}

php::module { 'php-apc': }
php::module { 'php5-sqlite': }
php::module { 'php5-cli': }
php::module { 'php5-curl': }
php::module { 'php5-intl': }
php::module { 'php5-mcrypt': }
class { 'php::devel':
require => Class['php'],
}
class { 'php::pear':
require => Class['php'],
}
php::pecl::module { 'mongo':
use_package => false,
}
class {'::mongodb::globals':
manage_package_repo => true,
}->
class {'::mongodb::server': }

}

class { 'composer':
require => Package['php5', 'curl']
}

apache::module { 'rewrite': }
apache::vhost { 'emting':
source =>
'puppet:///modules/apache/vhosts/emting.conf.erb',
template => '',
priority => 1,
}
class { 'php':
service
=> 'apache',
service_autorestart => false,
module_prefix
=> '',
}

class files {
exec {"mongophpextension":
command => 'echo "extension=mongo.so"
> /etc/php5/conf.d/mongo.ini',
user => 'root',
}

exec {'changedefaultshellwwwdata':
command => 'sed -i "s/www-data:x:33:33:wwwdata:/var/www:/bin/sh/www-data:x:33:33:wwwdata:/var/www:/bin/bash/" /etc/passwd',
user => root,
cwd => "/root"
}
file {"/etc/apache2/sites-enabled/000-default":
ensure => 'absent',
before => Service['apache']
}
}
# Deploy
class deploy {
exec { 'composerinstall':
environment =>
["COMPOSER_HOME=/var/www/.composer"],
command => 'composer install --no-interaction',
cwd => '/var/www/emting/',
user => 'www-data',
timeout => 900
}
}
# Ordered execution
class {'prepare': } ->
class {'packages': } ->
class {'files': } ->
class {'deploy': }

Más contenido relacionado

La actualidad más candente

Una introducción a vagrant
Una introducción a vagrantUna introducción a vagrant
Una introducción a vagrantLaura Gimenoide
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programaciónMario Garcia-Valdez
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Christian Rodriguez
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Armitage pruebas
Armitage pruebasArmitage pruebas
Armitage pruebasTensor
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con DockerErnesto Crespo
 
PHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPPHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPRolando Caldas
 
Inf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritInf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritClemente MR
 
Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Telefónica
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Raul Hugo
 
Introduccion a kata containers
Introduccion a kata containersIntroduccion a kata containers
Introduccion a kata containersJulioMontes23
 

La actualidad más candente (20)

Vagrant
VagrantVagrant
Vagrant
 
Una introducción a vagrant
Una introducción a vagrantUna introducción a vagrant
Una introducción a vagrant
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Virtualenv y buildout
Virtualenv y buildoutVirtualenv y buildout
Virtualenv y buildout
 
Armitage pruebas
Armitage pruebasArmitage pruebas
Armitage pruebas
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con Docker
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Open Build Service
Open Build ServiceOpen Build Service
Open Build Service
 
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
 
PHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHPPHPVigo #23 - Taller de Docker para PHP
PHPVigo #23 - Taller de Docker para PHP
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Inf tec estandariza_comp_escrit
Inf tec estandariza_comp_escritInf tec estandariza_comp_escrit
Inf tec estandariza_comp_escrit
 
Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016
 
Introduccion a kata containers
Introduccion a kata containersIntroduccion a kata containers
Introduccion a kata containers
 

Destacado

Curso puppet lenguaje_2
Curso puppet lenguaje_2Curso puppet lenguaje_2
Curso puppet lenguaje_2martacdehesa
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónKleer Agile Coaching & Training
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Dev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasDev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasJuan Mauricio
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous IntegrationDaniel Cerecedo
 

Destacado (8)

Curso puppet lenguaje_2
Curso puppet lenguaje_2Curso puppet lenguaje_2
Curso puppet lenguaje_2
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Discovering New Apps
Discovering New AppsDiscovering New Apps
Discovering New Apps
 
Erase una vez
Erase  una vezErase  una vez
Erase una vez
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producción
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Dev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasDev ops. Rompiendo Barreras
Dev ops. Rompiendo Barreras
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous Integration
 

Similar a Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet

FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
Entornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosEntornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosbetabeers
 
Oracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedOracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedV. Javierf Fdez
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandboxTensor
 
Cuckoosandbox
CuckoosandboxCuckoosandbox
CuckoosandboxTensor
 
Para que sirve la virtualizacion
Para que sirve la virtualizacionPara que sirve la virtualizacion
Para que sirve la virtualizacionLuisiitho G. Hudson
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandboxTensor
 

Similar a Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet (20)

FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Entornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosEntornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligeros
 
Oracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedOracle VM VirtualBox Hacked
Oracle VM VirtualBox Hacked
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandbox
 
Cuckoosandbox
CuckoosandboxCuckoosandbox
Cuckoosandbox
 
Para que sirve la virtualizacion
Para que sirve la virtualizacionPara que sirve la virtualizacion
Para que sirve la virtualizacion
 
Para que sirve la virtualizacion
Para que sirve la virtualizacion Para que sirve la virtualizacion
Para que sirve la virtualizacion
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandbox
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Dockers y wp
Dockers y wpDockers y wp
Dockers y wp
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
VIRTUALBOX
VIRTUALBOX VIRTUALBOX
VIRTUALBOX
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Maquina virtual
Maquina virtualMaquina virtual
Maquina virtual
 
Sor8 cm3 hernandez o maria judith-virtualbox
Sor8 cm3 hernandez o maria judith-virtualboxSor8 cm3 hernandez o maria judith-virtualbox
Sor8 cm3 hernandez o maria judith-virtualbox
 

Último

LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 

Último (20)

LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 

Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet

  • 1. VIRTUALIZACIÓN Y PROVISIONAMIENTO Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet Daniel Acedos
  • 3. VIRTUALIZACIÓN CON VAGRANT VAGRANT  http://www.vagrantup.com/  Vagrant es una herramienta para la creación y configuración de entornos de desarrollo virtualizados.  Originalmente se desarrolló para VirtualBox y sistemas de configuración tales como Chef, Salt y Puppet.  Desde la versión 1.1 Vagrant es capaz de trabajar con multiples proveedores   VMware, Amazon EC2, LXC, DigitalOcean... Aunque Vagrant se ha desarrollado en Ruby se puede usar en multitud de projectos escritos en otros lenguajes  PHP, Python, Java, C# y JavaScript
  • 4. VIRTUALIZACIÓN CON VAGRANT BOXES  Vagrant no construye máquinas virtuales desde cero   Lento Tedioso  Utiliza imágenes llamadas BOXES para clonar máquinas virtuales rápidamente  Especificar el BOX a utilizar es siempre el primer paso en un fichero Vagrantfile  Los boxes, una vez descargados se guardan en ~/.vagrant.d/boxes  Pueden empaquetarse de nuevo con el comando package
  • 5. VIRTUALIZACIÓN CON VAGRANT VAGRANTFILE  Describe el tipo de máquina que se utilizará en el proyecto y cómo configurar y aprovisionar dichas máquinas  El nombre del fichero descriptor tiene que ser vagrantfile  Un solo Vagrantfile por proyecto  Multiplataforma  Sintaxis Ruby   No es necesario conocer la sintaxis de Ruby Prácticamente es sólo asignación de variables
  • 6. VIRTUALIZACIÓN CON VAGRANT PUPHPET  Herramienta gráfica online para crear proyectos con Vagrant de una manera sencilla  Nos ayuda a generar el Vagrantfile mediante un asistente  https://puphpet.com/
  • 7. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Configuración del BOX
  • 8. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Redireccionamiento de puertos  Añadir uno a uno los puertos redireccionados
  • 11. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Servidor WEB. Módulos
  • 12. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Servidor Web. Virtual Host
  • 15. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Bases de datos SQL  Si no queremos base de datos SQL tendremos que eliminarla o no podremos finalizar sin haberla configurado
  • 16. VIRTUALIZACIÓN CON VAGRANT PUPHPET: Bases de datos No SQL  Es necesario añadirla para poder configurar
  • 18. VIRTUALIZACIÓN CON VAGRANT VAGRANTFILE  Describe el tipo de máquina que se utilizará en el proyecto y cómo configurar y aprovisionar dichas máquinas  El nombre del fichero descriptor tiene que ser vagrantfile  Un solo Vagrantfile por proyecto  Multiplataforma  Sintaxis Ruby   No es necesario conocer la sintaxis de Ruby Prácticamente es sólo asignación de variables
  • 19. VIRTUALIZACIÓN CON VAGRANT VAGRANTFILE: DEFINIR BOX config.vm.define :XXX do |XXX| XXX.vm.box =”” Tipo de imagen XXX.vm.box_url = “” Url de la que se descarga el Box XXX.vm.network :private_network, ip: “" IP de la máquina virtual. Para las configuraciones con una sola máquina siempre la 10.12.12.2 Cuando se tenga que trabajar con dos proyectos distintos a la vez Se modifica localmente y no se sube el cambio al repositorio XXX.vm.network :forwarded_port, host: XX, guest: YY XXX.vm.hostname = "XXX.dev" Nombre de dominio de la máquina virtual
  • 20. VIRTUALIZACIÓN CON VAGRANT VAGRANTFILE: DEFINIR BOX ... config.vm.define :emting do |emting| emting.vm.box = "gigigo-oc-wheezy-7.2-x64.box" emting.vm.box_url = "http://box.gigigo.com/gigigo-oc-wheezy-7.2-x64.box" emting.vm.network :private_network, ip: "10.12.12.2" emting.vm.network :forwarded_port, host: 81, guest: 80 emting.vm.network :forwarded_port, host: 27018, guest: 27017 emting.vm.hostname = "emting.dev" ...
  • 21. VIRTUALIZACIÓN CON VAGRANT PARÁMETROS DE LA MÁQUINA VIRTUAL emting.vm.provider "virtualbox" do |XXX| XXX.customize ["modifyvm", :id, "--param", "value"] --name Nombre que tendrá la máquina dentro del listado de MV's de VirtualBox --cpus Nº de CPU's de la MV. No conviene poner más de 1 --memory 512Mb sería suficiente para la mayoría de los casos Si utilizamos "mongo" → mínimo 2Gb --ioapic Desactiva la propiedad "ioapic" del procesador --natdnsresolver1 Resolver las DNS a través de la interfaz de NAT --nictype1 Tipo de tarjeta(s) de red: paravirtualizado (más rendimiento)
  • 22. VIRTUALIZACIÓN CON VAGRANT ... ... emting.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "emting"] v.customize ["modifyvm", :id, "--cpus", "1"] v.customize ["modifyvm", :id, "--memory", 2048] v.customize ["modifyvm", :id, "--ioapic", "off"] v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ['modifyvm', :id, '--nictype1', 'virtio'] v.customize ['modifyvm', :id, '--nictype2', 'virtio'] end
  • 23. VIRTUALIZACIÓN CON VAGRANT  Es necesario hacer el apt-get update antes del provisionamiento para asegurar que todos los paquetes descargados estén en la última versión ... # Update package list emting.vm.provision :shell, :inline => “if [[ ! -f /apt-get-run ]]; then sudo apt-get update && sudo touch /apt-get-run; fi" ...
  • 24. VIRTUALIZACIÓN CON VAGRANT CARPETAS COMPARTIDAS  Pueden compartirse carpetas locales en la máquina virtual creada  XXX.vm.synced_folder LOCAL_DIR, REMOTE_DIR, id: "AAA", :owner => "BBB", :group => "CCC”  Para proyectos PHP que utilicen es necesario compartir la carpeta con el código. Si el proyecto utiliza composer, compartiremos tambien la carpeta “.composer” de nuestro home del usuario ... emting.vm.synced_folder "../", "/var/www/emting", id: "vagrantemting", :owner => "www-data", :group => "www-data" ...
  • 25. VIRTUALIZACIÓN CON VAGRANT APROVISIONAMIENTO  Hay que indicar a Vagrant una configuración mínima para realizar el aprovisionamiento con Puppet  puppet.manifests_path Directorio con los ficheros de configuración de puppet puppet.module_path  Directorio con los módulos a instalar ... # ... # Puppet provision emting.vm.provision :puppet do |puppet| puppet.manifests_path = "manifests" puppet.module_path = "modules" puppet.options = ['--verbose'] puppet.options = ['--debug'] end
  • 26. VIRTUALIZACIÓN CON VAGRANT COMANDOS VAGRANT  vagrant status  vagrant up  vagrant halt  vagrant destroy  vagrant provision  Sabemos que lo ha hecho bien cuando veamos el mensaje ... Info: Applying configuration version '1389860822' ...  vagrant package  vagrant ssh
  • 28. APROVISIONAMIENTO CON PUPPET PUPPET  http://puppetlabs.com/  herramienta diseñada para administrar la configuración de sistemas Unix y Microsoft Windows de forma declarativa.  Describe los recursos del sistema y sus estados utilizando el lenguaje declarativo que proporciona Puppet.  Puppet descubre la información del sistema a través de una utilidad llamada Facter.  http://projects.puppetlabs.com/projects/facter  Compila los manifiestos en un catálogo específico que contiene los recursos y la dependencia de dichos recursos.  Los catálogos son ejecutados en los sistemas de destino.
  • 29. APROVISIONAMIENTO CON PUPPET PUPPET  Instalar Puppet   Fichero de configuración puppet     sudo apt-get install puppet Dentro del directorio manifests default.pp Lenguage puppet Módulos puppet     Es cómo puppet encuentra las clases y tipos que puede usar. “oficiales” de puppet o desarrollados por terceros. Fuentes fiables:  Puppetlabs  Example42 Tienen que estar descargados antes de poder instalarse. Se descargarán en directorios relativos al proyecto  Garantiza independencia del proyecto
  • 30. APROVISIONAMIENTO CON PUPPET MODULES  Para que nuestros proyectos de Vagrant y puppet sean independientes los módulos se gestionarán de manera aislada para cada proyecto.   puppet module search   --modulepath modules Buscar módulos en el market de puppet Puppet module list --modulepath modules  lista los módulos instalados en el proyecto  puppet module install XXX --modulepath modules  puppet module uninstall XXX --modulepath modules  Cada módulo dispone de su propia página de ayuda donde se explica como instalarlo y configurarlo
  • 31. APROVISIONAMIENTO CON PUPPET FICHERO DEFAULT.PP  Puede dividirse en bloques (classes) y ejecutarse secuencialmente: ... class prepare { [...] } class packages { [...] } class files { [...] } class deploy{ [...] } # Ordered execution class {'prepare': } -> class {'packages': } -> class {'files': } -> class {'deploy': } ...
  • 32. APROVISIONAMIENTO CON PUPPET CLASS PACKAGES: PACKAGE ... ...  class packages { package { [ 'bmon', 'build-essential', 'ccze', 'curl', 'git-core', 'htop', 'iotop', 'joe', 'multitail', 'vim', ]: ensure => 'installed', } Descarga los comandos básicos que queremos tener instalados en nuestra máquina virtual
  • 33. APROVISIONAMIENTO CON PUPPET CLASS PACKAGES: MÓDULO APACHE  example42-apache   https://github.com/example42/puppet-apache puppet module install example42-apache --modulepath modules ... class { 'apache': } apache::dotconf { 'custom': content => 'EnableSendfile Off', } apache::module { 'rewrite': } ... apache::vhost { 'emting': source => 'puppet:///modules/apache/vhosts/emting.conf.erb', template => '', priority => 1, }
  • 34. APROVISIONAMIENTO CON PUPPET CLASS PACKAGES: MÓDULO PHP  example42-php   https://github.com/example42/puppet-php puppet module install example42-php --modulepath modules ... ... class { 'php': service => 'apache', service_autorestart => false, module_prefix => '', } php::module { 'php-apc': } php::module { 'php5-sqlite': } php::module { 'php5-cli': } php::module { 'php5-curl': } php::module { 'php5-intl': } php::module { 'php5-mcrypt': } class { 'php::devel': require => Class['php'], } class { 'php::pear': require => Class['php'], }
  • 35. APROVISIONAMIENTO CON PUPPET CLASS PACKAGES: MÓDULO MONGODB  puppetlabs-mongodb   https://forge.puppetlabs.com/puppetlabs/mongodb puppet module install example42-mongodb --modulepath modules ... ... php::pecl::module { 'mongo': use_package => false, } class {'::mongodb::globals': manage_package_repo => true, }-> class {'::mongodb::server': }
  • 36. APROVISIONAMIENTO CON PUPPET CLASS PACKAGES: MÓDULO COMPOSER  Willdurand-composer   https://forge.puppetlabs.com/willdurand/composer puppet module install willdurand-composer --modulepath modules ... ... class { 'composer': require => Package['php5', 'curl'] }
  • 37. APROVISIONAMIENTO CON PUPPET CLASS FILES  Modifica ficheros dentro del sistema de la máquina virtual  Activar extensión de PHP en apache exec {"mongophpextension": command => 'echo "extension=mongo.so" > /etc/php5/conf.d/mongo.ini', user => 'root', }  Cambiar el shell por defecto para el usuario www-data exec {'changedefaultshellwwwdata': command => 'sed -i "s/www-data:x:33:33:www-data:/var/www:/bin/sh/wwwdata:x:33:33:www-data:/var/www:/bin/bash/" /etc/passwd', user => root, cwd => "/root" }  Deshabilitar el sitio por defecto de apache y reiniciar file {"/etc/apache2/sites-enabled/000-default": ensure => 'absent', before => Service['apache'] }
  • 38. APROVISIONAMIENTO CON PUPPET CLASS DEPLOY  Ejecuta instrucciones para realizar el despliegue  Ejecutar composer para descargar las librerías del proyecto  En Debian es necesaria la línea de environment, en otras distribuciones como Ubuntu no hace falta ... ... exec { 'composerinstall': environment => ["COMPOSER_HOME=/var/www/.composer"], command => 'composer install --no-interaction', cwd => '/var/www/emting/', user => 'www-data', timeout => 900 }
  • 39. APROVISIONAMIENTO CON PUPPET EJEMPLO DEFAULT.PP COMPLETO ## EMT - Emting Exec { path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/' ], logoutput => 'on_failure' } class prepare { class {'apt': } } class packages { package { [ 'bmon', 'build-essential', 'ccze', 'curl', 'git-core', 'htop', 'iotop', 'joe', 'multitail', 'vim', ]: ensure => 'installed', } class { 'apache': } apache::dotconf { 'custom': content => 'EnableSendfile Off', } php::module { 'php-apc': } php::module { 'php5-sqlite': } php::module { 'php5-cli': } php::module { 'php5-curl': } php::module { 'php5-intl': } php::module { 'php5-mcrypt': } class { 'php::devel': require => Class['php'], } class { 'php::pear': require => Class['php'], } php::pecl::module { 'mongo': use_package => false, } class {'::mongodb::globals': manage_package_repo => true, }-> class {'::mongodb::server': } } class { 'composer': require => Package['php5', 'curl'] } apache::module { 'rewrite': } apache::vhost { 'emting': source => 'puppet:///modules/apache/vhosts/emting.conf.erb', template => '', priority => 1, } class { 'php': service => 'apache', service_autorestart => false, module_prefix => '', } class files { exec {"mongophpextension": command => 'echo "extension=mongo.so" > /etc/php5/conf.d/mongo.ini', user => 'root', } exec {'changedefaultshellwwwdata': command => 'sed -i "s/www-data:x:33:33:wwwdata:/var/www:/bin/sh/www-data:x:33:33:wwwdata:/var/www:/bin/bash/" /etc/passwd', user => root, cwd => "/root" } file {"/etc/apache2/sites-enabled/000-default": ensure => 'absent', before => Service['apache'] } } # Deploy class deploy { exec { 'composerinstall': environment => ["COMPOSER_HOME=/var/www/.composer"], command => 'composer install --no-interaction', cwd => '/var/www/emting/', user => 'www-data', timeout => 900 } } # Ordered execution class {'prepare': } -> class {'packages': } -> class {'files': } -> class {'deploy': }
  • 40. APROVISIONAMIENTO CON PUPPET EJEMPLO DEFAULT.PP COMPLETO ## EMT - Emting Exec { path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/' ], logoutput => 'on_failure' } class prepare { class {'apt': } } class packages { package { [ 'bmon', 'build-essential', 'ccze', 'curl', 'git-core', 'htop', 'iotop', 'joe', 'multitail', 'vim', ]: ensure => 'installed', } class { 'apache': } apache::dotconf { 'custom': content => 'EnableSendfile Off', } php::module { 'php-apc': } php::module { 'php5-sqlite': } php::module { 'php5-cli': } php::module { 'php5-curl': } php::module { 'php5-intl': } php::module { 'php5-mcrypt': } class { 'php::devel': require => Class['php'], } class { 'php::pear': require => Class['php'], } php::pecl::module { 'mongo': use_package => false, } class {'::mongodb::globals': manage_package_repo => true, }-> class {'::mongodb::server': } } class { 'composer': require => Package['php5', 'curl'] } apache::module { 'rewrite': } apache::vhost { 'emting': source => 'puppet:///modules/apache/vhosts/emting.conf.erb', template => '', priority => 1, } class { 'php': service => 'apache', service_autorestart => false, module_prefix => '', } class files { exec {"mongophpextension": command => 'echo "extension=mongo.so" > /etc/php5/conf.d/mongo.ini', user => 'root', } exec {'changedefaultshellwwwdata': command => 'sed -i "s/www-data:x:33:33:wwwdata:/var/www:/bin/sh/www-data:x:33:33:wwwdata:/var/www:/bin/bash/" /etc/passwd', user => root, cwd => "/root" } file {"/etc/apache2/sites-enabled/000-default": ensure => 'absent', before => Service['apache'] } } # Deploy class deploy { exec { 'composerinstall': environment => ["COMPOSER_HOME=/var/www/.composer"], command => 'composer install --no-interaction', cwd => '/var/www/emting/', user => 'www-data', timeout => 900 } } # Ordered execution class {'prepare': } -> class {'packages': } -> class {'files': } -> class {'deploy': }