# 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
```