Puppet - Validando a configuração do Puppet

No Puppet, a configuração pode ser testada localmente. Portanto, uma vez que configuramos o mestre e o nó do Puppet, é hora de validar a configuração localmente. Precisamos ter o Vagrant e o Vagrant box instalados localmente, o que ajuda a testar a configuração localmente.

Configurando a Máquina Virtual

Como estamos testando a configuração localmente, não precisamos de um mestre Puppet em execução. Isso significa que, sem realmente executar o Puppet master no servidor, podemos simplesmente usar o Puppet para aplicar o comando para validação de configuração do Puppet. O comando Puppet apply aplicará as alterações delocal/etc/puppet dependendo do nome do host da máquina virtual no arquivo de configuração.

A primeira etapa que precisamos realizar para testar a configuração é construir o seguinte Vagrantfile e inicie uma máquina e monte o /etc/puppetpasta no lugar. Todos os arquivos necessários serão colocados dentro do sistema de controle de versão com a seguinte estrutura.

Estrutura de Diretório

- manifests 
   \- site.pp 
- modules 
   \- your modules  
- test 
   \- update-puppet.sh 
   \- Vagrantfile 
- puppet.conf

Arquivo Vagrant

# -*- mode: ruby -*- 
# vi: set ft = ruby : 
Vagrant.configure("2") do |config| 
   config.vm.box = "precise32" 
   config.vm.box_url = "http://files.vagrantup.com/precise64.box" 
   config.vm.provider :virtualbox do |vb| 
      vb.customize ["modifyvm", :id, "--memory", 1028, "--cpus", 2] 
   end 
  
   # Mount our repo onto /etc/puppet 
   config.vm.synced_folder "../", "/etc/puppet"  
   
   # Run our Puppet shell script   
   config.vm.provision "shell" do |s| 
      s.path = "update-puppet.sh" 
   end  
 
   config.vm.hostname = "localdev.example.com" 
end

No código acima, usamos o provisionador Shell no qual estamos tentando executar um script Shell chamado update-puppet.sh. O script está presente no mesmo diretório onde o arquivo Vagrant está localizado e o conteúdo do script está listado abaixo.

!/bin/bash 
echo "Puppet version is $(puppet --version)" 
if [ $( puppet --version) != "3.4.1" ]; then  
   echo "Updating puppet" 
   apt-get install --yes lsb-release 
   DISTRIB_CODENAME = $(lsb_release --codename --short) 
   DEB = "puppetlabs-release-${DISTRIB_CODENAME}.deb" 
   DEB_PROVIDES="/etc/apt/sources.list.d/puppetlabs.list"  
   
   if [ ! -e $DEB_PROVIDES ] 
   then 
      wget -q http://apt.puppetlabs.com/$DEB 
      sudo dpkg -i $DEB 
   fi  
sudo apt-get update 
   sudo apt-get install -o Dpkg::Options:: = "--force-confold" 
   --force-yes -y puppet 
else 
   echo "Puppet is up to date!" 
fi

Processamento posterior, o usuário precisa criar um arquivo de manifesto dentro do diretório Manifests com o nome site.pp que irá instalar algum software no VM.

node 'brclelocal03.brcl.com' { 
   package { ['vim','git'] : 
      ensure => latest 
   } 
} 
echo "Running puppet" 
sudo puppet apply /etc/puppet/manifests/site.pp

Depois que o usuário tiver o script acima pronto com a configuração do arquivo Vagrant necessária, o usuário pode fazer o cd para o diretório de teste e executar o vagrant up command. Isso irá inicializar uma nova VM, mais tarde, instalar o Puppet e executá-lo usando o script Shell.

A seguir será a saída.

Notice: Compiled catalog for localdev.example.com in environment production in 0.09 seconds 
Notice: /Stage[main]/Main/Node[brclelocal03.brcl.com]/Package[git]/ensure: created 
Notice: /Stage[main]/Main/Node[brcllocal03.brcl.com]/Package[vim]/ensure: ensure changed 'purged' to 'latest'

Validando a configuração de várias máquinas

Se precisarmos testar a configuração de várias máquinas localmente, isso pode ser feito simplesmente alterando o arquivo de configuração do Vagrant.

Novo arquivo Vagrant configurado

config.vm.define "brclelocal003" do |brclelocal003| 
   brclelocal03.vm.hostname = "brclelocal003.brcl.com" 
end  

config.vm.define "production" do |production| 
   production.vm.hostname = "brcleprod004.brcl.com" 
end

Vamos supor que temos um novo servidor de produção, que precisa do utilitário SSL instalado. Precisamos apenas estender o manifesto antigo com a seguinte configuração.

node 'brcleprod004.brcl.com' inherits 'brcleloacl003.brcl.com' { 
   package { ['SSL'] : 
      ensure => latest 
   } 
}

Depois de fazer alterações de configuração no arquivo de manifesto, só precisamos ir para o diretório de teste e executar o comando vagrant up básico que abrirá ambos brclelocal003.brcl.com e brcleprod004.brcl.commáquina. Em nosso caso, estamos tentando trazer a máquina de produção, o que poderia ser feito executando ovagrant up production command. O irá criar uma nova máquina com o nome de produção conforme definido no arquivo Vagrant e terá o pacote SSL instalado nela.