# PUPPET ## Vocabulaire Puppet * **Noeud (Node)** : serveur ou poste de travail administré par Puppet * **Site** : ensemble des noeuds gérés par le Puppet Master * **Classe** : moyen dans Puppet de séparer des morceaux de code * **Module** : unité de code Puppet qui est réutilisable et pouvant être partagé * **Catalogue** : ensemble des classes de configuration à appliquer à un nœud * **Facter** : librairie multi-plateforme qui fournit à Puppet sous forme de variables les informations propres au système (nom, adresse ip, système d’exploitation, etc.) * **Ressource** (Resource): objet que Puppet peut manipuler (fichier, utilisateur, service, package, etc.) * **Manifeste** (Manifest) : regroupe un ensemble de ressource ## Install Puppet ### Master ``` nano /etc/hosts 192.168.56.110 master,puppet 192.168.56.111 agent1 192.168.56.112 agent2 ``` Install master ``` echo 'deb http://ftp.au.debian.org/debian/ stretch main contrib non-free' > /etc/apt/sources.list.d/stretch.list && \ apt-get update && \ apt-get install -y --no-install-recommends openjdk-8-jre-headless && \ rm /etc/apt/sources.list.d/stretch.list && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* ``` ``` wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb dpkg -i puppetlabs-release-pc1-xenial.deb apt update apt upgrade apt install puppet-agent apt install puppetserver systemctl enable puppetserver systemctl restart puppetserver systemctl status puppet ``` ### Agent ``` nano /etc/hosts 192.168.56.110 master,puppet ``` Install agent ``` wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb dpkg -i puppetlabs-release-pc1-xenial.deb apt update apt upgrade apt install puppet-agent systemctl enable puppet systemctl restart puppet systemctl status puppet ``` > Si **systemctl start puppet** ne marche pas, ajouter .service après **systemctl start puppet.service** > peut être **systemctl unmask puppet.service** avant si ça fonctionne pas à voir ## Configuration ### Master Configuration du master ``` nano /etc/puppetlabs/puppet/puppet.conf [master] .... dns_alt_names=master.hakase-labs.io,puppet .... [main] certname = master.hakase-labs.io server = master.hakase-labs.io environment = production runinterval = 1h ``` Redémarer Puppet ``` systemctl restart puppet ``` ### Agent Configuration de l'agent ``` nano /etc/puppetlabs/puppet/puppet.conf [main] certname = agent1 server = master environment = production runinterval = 1h ``` Redémarer Puppet ``` systemctl restart puppet ``` Lancer la commande suivante ``` /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true ``` ### Master Pour voir les certificat à signer: ``` puppet ca list puppet cert list ``` Signer un certificat: ``` puppet cert sign [certif_name] ``` ### Test Taper la commande suivante dans le master et l'agent. ``` puppet agent --test ``` Si il y a une erreur chez l'agant, faire cette commande chez le master: ``` rm -r /etc/puppetlabs/puppet/ssl/* ``` Chez l'agent: ``` systemctl restart puppet ``` Et resigner le certificat de l'agent dans le master et refaire la commande de test chez le master et l'agent. Appliquer un script à un client, example.pp: ``` node 'agent1' { file { "/var/tmp/testfile": ensure => "present", mode => "664", content => "It's a test file to see if puppet is done", } } ``` Et pour le lancer: ``` puppet apply -l /tmp/manifest.log example.pp ```