Marionnette - Faits et faits

Puppet prend en charge la conservation de plusieurs valeurs en tant que variable d'environnement. Cette fonctionnalité est prise en charge dans Puppet en utilisantfacter. Dans Puppet, facter est un outil autonome qui contient la variable de niveau d'environnement. In peut être considéré comme similaire à la variable env de Bash ou Linux. Parfois, il peut y avoir un chevauchement entre les informations stockées dans les faits et la variable d'environnement de la machine. Dans Puppet, la paire clé-valeur est appelée «fait». Chaque ressource a ses propres faits et dans Puppet, l'utilisateur a le pouvoir de créer ses propres faits personnalisés.

# facter

Facter commandpeut être utilisé pour lister toutes les différentes variables d'environnement et leurs valeurs associées. Ce recueil de faits est livré avec facter hors de la boîte et sont appelés faits essentiels. On peut ajouter des faits personnalisés à la collection.

Si l'on veut afficher une seule variable. Cela peut être fait en utilisant la commande suivante.

# facter {Variable Name}  

Example 
[[email protected] ~]# facter virtual 
virtualbox

La raison pour laquelle le facter est important pour Puppet est que le facter et les faits sont disponibles dans tout le code Puppet comme “global variable”, ce qui signifie qu'il peut être utilisé dans le code à tout moment sans aucune autre référence.

Exemple à tester

[[email protected] modules]# tree brcle_account 
brcle_account 
└── manifests  └── init.pp [[email protected] modules]# cat brcle_account/manifests/init.pp  
class brcle_account {  
   user { 'G01063908': 
      ensure => 'present', 
      uid => '121', 
      shell => '/bin/bash', 
      home => '/home/G01063908', 
   }  
   
   file {'/tmp/userfile.txt': 
      ensure => file, 
      content => "the value for the 'OperatingSystem' fact is: $OperatingSystem \n", 
   } 
}

Le tester

[[email protected] modules]# puppet agent --test 
Notice: /Stage[main]/Activemq::Service/Service[activemq]/ensure: 
ensure changed 'stopped' to 'running' 
Info: /Stage[main]/Activemq::Service/Service[activemq]: 
Unscheduling refresh on Service[activemq] 

Notice: Finished catalog run in 4.09 seconds  
[[email protected] modules]# cat /tmp/testfile.txt  
the value for the 'OperatingSystem' fact is: Linux   

[[email protected] modules]# facter OperatingSystem 
Linux

Comme nous pouvons le constater dans l'extrait de code ci-dessus, nous n'avons pas défini le OperatingSystem. Nous venons de remplacer la valeur par une valeur codée en douceur$OperatingSystem comme variable normale.

Dans Puppet, il existe trois types de faits qui peuvent être utilisés et définis -

  • Faits essentiels
  • Faits personnalisés
  • Faits externes

Les faits essentiels sont définis au plus haut niveau et accessibles à tous à tout moment du code.

Faits sur les marionnettes

Juste avant qu'un agent demande un catalogue au maître, l'agent compile d'abord une liste complète des informations disponibles en soi sous la forme d'une paire clé / valeur. Les informations sur l'agent sont rassemblées par un outil appelé facter et chaque paire clé-valeur est appelée un fait. Voici une sortie commune de faits sur un agent.

[[email protected] ~]# facter
architecture => x86_64 
augeasversion => 1.0.0 
bios_release_date => 13/09/2012 
bios_vendor => innotek GmbH 
bios_version => VirtualBox 
blockdevice_sda_model => VBOX HARDDISK 
blockdevice_sda_size => 22020587520 
blockdevice_sda_vendor => ATA 
blockdevice_sr0_model => CD-ROM 
blockdevice_sr0_size => 1073741312 
blockdevice_sr0_vendor => VBOX 
blockdevices => sda,sr0 
boardmanufacturer => Oracle Corporation 
boardproductname => VirtualBox 
boardserialnumber => 0 

domain => codingbee.dyndns.org  
facterversion => 2.1.0 
filesystems => ext4,iso9660 
fqdn => puppetagent1.codingbee.dyndns.org 
hardwareisa => x86_64 
hardwaremodel => x86_64 
hostname => puppetagent1 
id => root 
interfaces => eth0,lo 
ipaddress => 172.228.24.01 
ipaddress_eth0 => 172.228.24.01 
ipaddress_lo => 127.0.0.1 
is_virtual => true 
kernel => Linux 
kernelmajversion => 2.6 
kernelrelease => 2.6.32-431.23.3.el6.x86_64 
kernelversion => 2.6.32 
lsbdistcodename => Final 
lsbdistdescription => CentOS release 6.5 (Final) 
lsbdistid => CentOS 
lsbdistrelease => 6.5 
lsbmajdistrelease => 6 
lsbrelease => :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0noarch:graphics-4.0-amd64:
graphics-4.0-noarch:printing-4.0-amd64:printing-4.0noarch 
macaddress => 05:00:22:47:H9:77 
macaddress_eth0 => 05:00:22:47:H9:77 
manufacturer => innotek GmbH 
memoryfree => 125.86 GB 
memoryfree_mb => 805.86 
memorysize => 500 GB 
memorysize_mb => 996.14 
mtu_eth0 => 1500 
mtu_lo => 16436 
netmask => 255.255.255.0 
netmask_eth0 => 255.255.255.0  

network_lo => 127.0.0.0 
operatingsystem => CentOS 
operatingsystemmajrelease => 6 
operatingsystemrelease => 6.5 
osfamily => RedHat 
partitions => {"sda1"=>{
"uuid"=>"d74a4fa8-0883-4873-8db0-b09d91e2ee8d", "size" =>"1024000", 
"mount" => "/boot", "filesystem" => "ext4"}, "sda2"=>{"size" => "41981952", 
"filesystem" => "LVM2_member"}
} 
path => /usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
physicalprocessorcount => 1 
processor0 => Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz 
processor1 => Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz 
processor2 => Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz 
processorcount => 3 
productname => VirtualBox 
ps => ps -ef 
puppetversion => 3.6.2 
rubysitedir => /usr/lib/ruby/site_ruby/1.8 
rubyversion => 1.8.7
selinux => true 
selinux_config_mode => enforcing 
selinux_config_policy => targeted 
selinux_current_mode => enforcing 
selinux_enforced => true 
selinux_policyversion => 24 
serialnumber => 0 
sshdsakey => AAAAB3NzaC1kc3MAAACBAK5fYwRM3UtOs8zBCtRTjuHLw56p94X/E0UZBZwFR3q7
WH0x5+MNsjfmdCxKvpY/WlIIUcFJzvlfjXm4qDaTYalbzSZJMT266njNbw5WwLJcJ74KdW92ds76pjgm
CsjAh+R9YnyKCEE35GsYjGH7whw0gl/rZVrjvWYKQDOmJA2dAAAAFQCoYABgjpv3EkTWgjLIMnxA0Gfud
QAAAIBM4U6/nerfn6Qvt43FC2iybvwVo8ufixJl5YSEhs92uzsW6jiw68aaZ32q095/gEqYzeF7a2knr
OpASgO9xXqStYKg8ExWQVaVGFTR1NwqhZvz0oRSbrN3h3tHgknoKETRAg/imZQ2P6tppAoQZ8wpuLrXU
CyhgJGZ04Phv8hinAAAAIBN4xaycuK0mdH/YdcgcLiSn8cjgtiETVzDYa+jF 
swapfree => 3.55 GB 
swapfree_mb => 2015.99 
swapsize => 3.55 GB 
swapsize_mb => 2015.99 
timezone => GMT 
type => Other 
uniqueid => a8c0af01 
uptime => 45:012 hours 
uptime_days => 0 
uptime_hours => 6 
uptime_seconds => 21865 
uuid => BD8B9D85-1BFD-4015-A633-BF71D9A6A741 
virtual => virtualbox

Dans le code ci-dessus, nous pouvons voir certaines des données se chevaucher avec quelques-unes des informations disponibles dans la variable bash «env». Puppet n'utilise pas directement les données, à la place il utilise des données de facter, les données de Facter sont traitées comme une variable globale.

Les faits sont ensuite disponibles en tant que variable de niveau supérieur et le maître Puppet peut les utiliser pour compiler le catalogue Puppet pour l'agent demandeur. Les caractères sont appelés dans le manifeste comme une variable normale avec le préfixe $.

Exemple

if ($OperatingSystem == "Linux") { 
   $message = "This machine OS is of the type $OperatingSystem \n" 
} else { 
   $message = "This machine is unknown \n" 
} 

file { "/tmp/machineOperatingSystem.txt": 
   ensure => file, 
   content => "$message" 
}

Le fichier manifeste ci-dessus ne dérange qu'un seul fichier appelé machineOperatingSystem.txt, où le contenu de ce fichier est déduit du fait appelé OperatingSystem.

[[email protected] /]# facter OperatingSystem 
Linux  

[[email protected] /]# puppet apply /tmp/ostype.pp 
Notice: Compiled catalog for puppetagent1.codingbee.dyndns.org 
in environment production in 0.07 seconds 
Notice: /Stage[main]/Main/File[/tmp/machineOperatingSystem.txt]/ensure: 
defined content as '{md5}f59dc5797d5402b1122c28c6da54d073' 
Notice: Finished catalog run in 0.04 seconds  

[[email protected] /]# cat /tmp/machinetype.txt 
This machine OS is of the type Linux

Faits personnalisés

Tous les faits ci-dessus que nous avons vus sont les faits essentiels de la machine. On peut ajouter ces faits personnalisés au nœud de la manière suivante -

  • Utilisation de la «syntaxe export FACTER…»
  • Utilisation des paramètres $ LOAD_PATH
  • FACTERLIB
  • Pluginsync

Utilisation de la syntaxe «export FACTER»

On peut ajouter manuellement les faits en utilisant la syntaxe d'exportation FACTER_ {nom du fait}.

Exemple

[[email protected] facter]# export FACTER_tallest_mountain="Everest" 
[[email protected] facter]# facter tallest_mountain Everest

Utilisation des paramètres $ LOAD_PATH

Dans Ruby, $ LOAD_PATH équivaut au paramètre spécial Bash. Bien qu'elle soit similaire à la variable bash $ PATH, en réalité, $ LOAD_PATH n'est pas une variable d'environnement, mais plutôt une variable prédéfinie.

$ LOAD_PATH a un synonyme «$:». Cette variable est un tableau pour rechercher et charger les valeurs.

[[email protected] ~]# ruby -e 'puts $LOAD_PATH'            
# note you have to use single quotes.  
/usr/lib/ruby/site_ruby/1.6 
/usr/lib64/ruby/site_ruby/1.6 
/usr/lib64/ruby/site_ruby/1.6/x86_64-linux 
/usr/lib/ruby/site_ruby 
/usr/lib64/ruby/site_ruby 
/usr/lib64/site_ruby/1.6 
/usr/lib64/site_ruby/1.6/x86_64-linux 
/usr/lib64/site_ruby 
/usr/lib/ruby/1.6 
/usr/lib64/ruby/1.6 
/usr/lib64/ruby/1.6/x86_64-linux

Prenons un exemple de création d'un facter de répertoire et d'ajout d'un .pp fichier et y ajouter un contenu.

[[email protected] ~]# cd /usr/lib/ruby/site_ruby/ 
[[email protected] site_ruby]# mkdir facter 
[[email protected] site_ruby]# cd facter/ 
[[email protected] facter]# ls 
[[email protected] facter]# touch newadded_facts.rb

Ajoutez le contenu suivant au fichier custom_facts.rb.

[[email protected] facter]# cat newadded_facts.rb 
Facter.add('tallest_mountain') do 
   setcode "echo Everest" 
end

Facter fonctionne selon la méthode de numérisation de tous les dossiers répertoriés dans $ LOAD_PATH, et recherche un directeur appelé facter. Une fois qu'il trouve ce dossier particulier, il les chargera n'importe où dans la structure des dossiers. S'il trouve ce dossier, il recherche un fichier Ruby dans ce dossier facter et charge tous les faits définis sur une configuration particulière dans la mémoire.

Utilisation de FACTERLIB

Dans Puppet, FACTERLIB fonctionne de manière très similaire à $ LOAD_PATH, mais avec une seule différence clé: il s'agit d'un paramètre d'environnement au niveau du système d'exploitation plutôt que d'une variable spéciale Ruby. Par défaut, la variable d'environnement peut ne pas être définie.

[[email protected] facter]# env | grep "FACTERLIB" 
[[email protected] facter]#

Pour tester FACTERLIB, nous devons effectuer les étapes suivantes.

Créez un dossier appelé test_facts dans la structure suivante.

[[email protected] tmp]# tree /tmp/test_facts/ 
/tmp/some_facts/ 
├── vipin 
│   └── longest_river.rb 
└── testing 
   └── longest_wall.rb

Ajoutez le contenu suivant aux fichiers .rb.

[[email protected] vipin]# cat longest_river.rb 
Facter.add('longest_river') do 
   setcode "echo Nile" 
end 

[[email protected] testing]# cat longest_wall.rb 
Facter.add('longest_wall') do 
   setcode "echo 'China Wall'" 
end

Utilisez l'instruction d'exportation.

[[email protected] /]# export 
FACTERLIB = "/tmp/some_facts/river:/tmp/some_facts/wall" 
[[email protected] /]# env | grep "FACTERLIB" 
FACTERLIB = /tmp/some_facts/river:/tmp/some_facts/wall

Testez le nouveau facter.

[[email protected] /]# facter longest_river 
Nile 
[[email protected] /]# facter longest_wall 
China Wall

Faits externes

Les faits externes sont très utiles lorsque l'utilisateur souhaite appliquer certains nouveaux faits créés au moment de l'approvisionnement. Les faits externes sont l'un des principaux moyens d'appliquer des métadonnées à une machine virtuelle lors de sa phase de provisionnement (par exemple en utilisant vSphere, OpenStack, AWS, etc.)

Toutes les métadonnées et ses détails créés peuvent être utilisés par Puppet pour déterminer quels détails doivent être présents dans le catalogue, qui va être appliqué.

Créer un fait externe

Sur la machine de l'agent, nous devons créer un répertoire comme indiqué ci-dessous.

$ mkdir -p /etc/facter/facts.d

Créez un script Shell dans le répertoire avec le contenu suivant.

$ ls -l /etc/facter/facts.d 
total 4 
-rwxrwxrwx. 1 root root 65 Sep 18 13:11 external-factstest.sh 
$ cat /etc/facter/facts.d/external-factstest.sh 
#!/bin/bash 
echo "hostgroup = dev" 
echo "environment = development"

Modifiez l'autorisation du fichier de script.

$ chmod u+x /etc/facter/facts.d/external-facts.sh

Une fois cela fait, nous pouvons maintenant voir la variable présente avec la paire clé / valeur.

$ facter hostgroup 
dev 
$ facter environment 
development

On peut écrire des faits personnalisés dans Puppet. À titre de référence, utilisez le lien suivant du site Puppet.

https://docs.puppet.com/facter/latest/fact_overview.html#writing-structured-facts