Puppet - Validation de la configuration de Puppet

Dans Puppet, la configuration peut être testée localement. Par conséquent, une fois que nous avons configuré le maître et le nœud Puppet, il est temps de valider la configuration localement. Nous devons avoir Vagrant et Vagrant Box installés localement, ce qui aide à tester la configuration localement.

Configuration de la machine virtuelle

Comme nous testons la configuration localement, nous n'avons pas besoin d'un maître Puppet en cours d'exécution. Cela signifie que sans exécuter réellement le maître Puppet sur le serveur, nous pouvons simplement utiliser Puppet pour appliquer la commande pour la validation de la configuration de Puppet. La commande Puppet Apply appliquera les modifications delocal/etc/puppet en fonction du nom d'hôte de la machine virtuelle dans le fichier de configuration.

La première étape que nous devons effectuer pour tester la configuration est de construire ce qui suit Vagrantfile et démarrer une machine et monter le /etc/puppetdossier en place. Tous les fichiers nécessaires seront placés dans le système de contrôle de version avec la structure suivante.

Structure du répertoire

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

Fichier 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

Dans le code ci-dessus, nous avons utilisé le fournisseur Shell dans lequel nous essayons d'exécuter un script Shell nommé update-puppet.sh. Le script est présent dans le même répertoire où se trouve le fichier Vagrant et le contenu du script est répertorié ci-dessous.

!/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

Traitement ultérieur, l'utilisateur doit créer un fichier manifeste dans le répertoire Manifests avec le nom site.pp qui installera certains logiciels sur VM.

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

Une fois que l'utilisateur a prêt le script ci-dessus avec la configuration de fichier Vagrant requise, l'utilisateur peut accéder au répertoire de test et exécuter le vagrant up command. Cela démarrera une nouvelle VM, plus tard, installera Puppet, puis l'exécutera à l'aide du script Shell.

Voici la sortie.

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'

Validation de la configuration de plusieurs machines

Si nous devons tester la configuration de plusieurs machines localement, cela peut être simplement fait en modifiant le fichier de configuration Vagrant.

Nouveau fichier Vagrant configuré

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

Supposons que nous ayons un nouveau serveur de production, qui nécessite l'installation de l'utilitaire SSL. Nous avons juste besoin d'étendre l'ancien manifeste avec la configuration suivante.

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

Après avoir apporté des modifications de configuration dans le fichier manifeste, il suffit de passer au répertoire de test et d'exécuter la commande de base vagrant up qui affichera les deux brclelocal003.brcl.com et brcleprod004.brcl.commachine. Dans notre cas, nous essayons de mettre en place une machine de production, ce qui pourrait être fait en exécutant levagrant up production command. Le créera une nouvelle machine avec le nom de production tel que défini dans le fichier Vagrant et le package SSL sera installé.