GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre les ressources, les manifestes, les modules et les classes de marionnettes avec des exemples

Dans ce didacticiel, j'expliquerai les ressources, les manifestes, les modules et les classes de Puppet avec des exemples. De plus, je suppose que vous avez déjà des nœuds maître/agent Puppet installés et prêts à l'emploi. Pour utiliser Puppet, vous devez comprendre comment puppet gère les ressources et comment les manifestes et les modules sont créés.

Prérequis :

Comme je l'ai dit plus tôt, vous devez avoir installé et configuré les nœuds Puppet Master et Agent.

Langage spécifique au domaine déclaratif (DSL) de Puppet

  • Puppet a son propre langage déclaratif spécifique au domaine qui définit STATES d'un système.
  • Le code Puppet est écrit dans un fichier appelé MANIFESTS et enregistré avec l'extension .pp (par exemple, site.pp est un fichier manifeste principal)
  • Le code Puppet contient des RESSOURCES qui affectent les éléments du système (tels que fichier, paquet, service, utilisateur, hôte, interface, exec etc…). Les ressources sont l'unité fondamentale des configurations système et chaque ressource décrit un aspect du système.
  • Les ressources sont regroupées en CLASSES ( bloc nommé de codes Puppet) qui sont stockés (organisés) dans des MODULES et ils ne sont pas utilisés tant qu'ils ne sont pas invoqués.
  • Puppet Master crée un CATALOG (généré sur la base du code et des données Puppet) et les clients les appliquent.

Voyons en détail les termes de Puppet.

Ressources

Une ressource décrit quelque chose sur l'état du système. Par exemple, si un certain utilisateur ou fichier existe, ou si un service doit être en cours d'exécution ou activé, ou si un package doit être installé.

Format de la ressource :

resource_type { 'name_of_the_resource' :argument => valeur, other_arg => valeur,}

Exemple 1 :

file { 'test':path => '/tmp/test', content => 'Un exemple de contenu', }

Exemple 2 :

package { 'ntp' :assurez => présent, }

Exemple 3 :

service { 'ntpd' :assurer => en cours d'exécution, activer => vrai, }

Voici une commande pour répertorier les types de ressources dans Puppet :

 # / opt / Puppet Labs / marionnettes / bin / ressource fantoche --typesaugeascomputercronexecfilefilebucketgrouphostinterfacek5loginmacauthorizationmailaliasmaillistmcxmountnagios_commandnagios_contactnagios_contactgroupnagios_hostnagios_hostdependencynagios_hostescalationnagios_hostextinfonagios_hostgroupnagios_servicenagios_servicedependencynagios_serviceescalationnagios_serviceextinfonagios_servicegroupnagios_timeperiodnotifypackageresourcesrouterschedulescheduled_taskselbooleanselmoduleservicessh_authorized_keysshkeystagetidyuservlanwhityumrepozfszonezpool 

Manifestes

Comme indiqué précédemment, le code Puppet est écrit dans le fichier Manifest avec extension .pp . Le fichier manifeste principal par défaut se trouve à :

# vim /etc/puppetlabs/code/environments/production/manifests/site.pp

D'autres fichiers manifestes peuvent être créés sous /etc/puppetlabs/code/environments/production/manifests/

Cours

Les classes contiennent des blocs de code qui peuvent être appelés de n'importe où dans le code. Les classes offrent la possibilité de réutiliser le code. Si vous connaissez des langages de programmation comme Java ou C++, alors définir une classe dans Puppet est la même chose.

class class_name { ::::::::::Le code Puppet va ici :::::::::}

Maintenant, la classe ci-dessus peut être incluse dans un code Puppet comme ci-dessous :

inclure class_name

Modules

Les modules aident à organiser un ensemble de manifestes. Un module peut être ajouté sous /etc/puppetlabs/code/environments/production/modules. Un grand code Puppet peut être distribué dans plusieurs manifestes et organisé à l'aide de modules (au bas de cet article, vous apprendrez comment installer, configurer et démarrer le service Apache - où chacune de ces tâches est divisée en différentes classes).

Eh bien, laissez-nous savoir essayez de créer un manifeste pour effectuer une opération simple.

Mon ​​premier manifeste dans Puppet

Exemple 1 :Création d'un nouveau fichier (dans site.pp)

Étape 1 : Connectez-vous à Puppet Server (nœud maître) en tant qu'utilisateur privilégié.

Étape 2 : Accédez à /etc/puppetlabs/code/environments/production/manifests

Étape 3 : Modifier site.pp – fichier manifeste principal. Si vous n'en trouvez pas, créez-le.

# vim site.pp

Étape 4 : Écrivons du code Puppet pour créer un fichier dans /tmp/ au nœud de l'agent Puppet. Le code se déroule comme ci-dessous,

file { "/tmp/myFile":assure => "présent", propriétaire => "root", group => "root", mode => "644", content => "Ceci est mon premier manifeste à créer un fichier dans le répertoire temporaire", }

Dans le code ci-dessus, nous avons utilisé fichier type de ressource, avec des arguments tels que assurer , propriétaire , groupe , mode et contenu . Le fichier sera créé dans /tmp .

Étape 5 :Le fichier manifeste est maintenant prêt. Passez au nœud Puppet Agent et exécutez la commande ci-dessous.

[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t Info :Utilisation de l'environnement configuré 'production' Info :Récupération des pluginfacts Info :Récupération du plugin Info :Mise en cache du catalogue pour puppetagent.test.in Info :Application de la configuration version '1471021726' Avis :/Stage[main]/Main/File[/tmp/myFile]/ensure :contenu défini comme '{md5}8eadb0a0feef0bc667702434f816d8e8' Avis :Catalogue appliqué en 0,09 seconde

La sortie ci-dessus indique que le catalogue a été appliqué.

Remarque  : les agents Puppet contacteront automatiquement le serveur Puppet pour recevoir le catalogue afin de se configurer eux-mêmes. Mais si vous ne voulez pas attendre la synchronisation automatique, vous pouvez exécuter la commande ci-dessus.

Étape 6 :Vérifiez si le fichier a été créé avec le contenu nécessaire.

# ls /tmp/monFichier/tmp/monFichier
# more /tmp/myFileC'est mon premier manifeste pour créer un fichier dans le répertoire temp

Création de votre premier module

Créons un module qui installera le serveur Web Apache sur les nœuds de l'agent.

Étape 1 :Changer de répertoire en dossier de modules.

# cd /etc/puppetlabs/code/environnements/production/modules

Étape 2 :Créons un module nommé httpd . Pour ce faire, nous utiliserons PuppetForge qui nécessite une convention de nommage à suivre. Par exemple,

organizationName-moduleName

Comme nous installons le serveur Web Apache, le package à installer est httpd et ma convention de nommage sera celle indiquée ci-dessous :

mypuppetorg-httpd

Étape 3 :Exécutez la commande ci-dessous

# /opt/puppetlabs/puppet/bin/puppet module generate mypuppetorg-httpd Nous devons créer un fichier metadata.json pour ce module. Merci de répondre aux questions suivantes; si la question ne s'applique pas à ce module, n'hésitez pas à la laisser vide. Puppet utilise Semantic Versioning (semver.org) pour versionner les modules. Quelle est la version de ce module ? [0.1.0]-->Qui a écrit ce module ? [mypuppetorg]-->De quelle licence relève ce code de module ? [Apache-2.0]-->Comment décririez-vous ce module en une seule phrase ?--> Installe le serveur Web Apache et le configureOù se trouve le référentiel du code source de ce module ?-->Où les autres peuvent-ils aller pour en savoir plus sur ce module ? -->Où peuvent aller les autres pour signaler les problèmes concernant ce module ?-->-------------------------------- -------{"name":"mypuppetorg-httpd","version":"0.1.0","author":"mypuppetorg","summary":"Installe le serveur Web Apache et le configure", "license":"Apache-2.0","source":"","project_page":null,"issues_url":null,"dependencies":[{"name":"puppetlabs-stdlib","version_requirement":">=1.0.0"}],"fournisseur_données":null}----------------------------------- ----- Sur le point de générer ces métadonnées ; Continuez? [n/Y]--> YNotice :Génération du module dans /etc/puppetlabs/code/environments/production/modules/httpd...Notice :Remplir les modèles...Terminé ; module généré dans httpd.httpd/Gemfilehttpd/Rakefilehttpd/exampleshttpd/examples/init.pphttpd/manifestshttpd/manifests/init.pphttpd/spechttpd/spec/classeshttpd/spec/classes/init_spec.rbhttpd/spec/spec_helper.rbhttpd/README.mdhttpd /metadata.json

Étape 4 :Un module sera créé. Par exemple, httpd et sa structure est la suivante :

# ls httpd/ examples  Gemfile  manifests  metadata.json  Rakefile  README.md  spec

Étape 5 :Personnalisez le module

L'étape 4 créera une structure de répertoire de module et un fichier manifeste principal (pour le module) appelé init.pp . Nous allons simplement ouvrir le fichier pour voir à quoi il ressemble et à la fin du fichier, vous trouverez un httpd vide classe.

classe httpd {}

Étape 6  :Créons une classe distincte pour l'installation (install.pp), la configuration (configure.pp) et le démarrage (start.pp) du service Apache.

Création d'une sous-classe pour l'installation d'Apache : Nous allons créer un nouveau fichier manifeste appelé install.pp (nom du module de classe ::install)

# pwd/etc/puppetlabs/code/environments/production/modules/httpd
# vim manifests/install.pp

Copiez et collez le code ci-dessous :

# ==Classe :httpd::installclass httpd::install inherits httpd {package { 'httpd':ensure => installé,}}

Ici, sous-classe ‘install ' héritera de la classe principale httpd . Recherchez également la syntaxe package , ce qui signifie le type de marionnette et assurer L'attribut garantit que ledit package est installé.

Création d'une sous-classe pour configurer httpd (configure.pp – class modulename::configure)

# pwd/etc/puppetlabs/code/environments/production/modules/httpd
# vim manifests/configure.pp

Copiez et collez le code ci-dessous pour vous assurer que le httpd.conf le fichier est correctement protégé.

class httpd::configure inherits httpd{        file { '/etc/httpd/conf/httpd.conf':               assure => file,                owner => 'root',                group => 'root',                 4 mode => ' ',        }}

Création d'une sous-classe pour démarrer httpd service (start.pp – nom du module de classe ::start):

# pwd/etc/puppetlabs/code/environments/production/modules/httpd
#  vim manifests/start.pp

Copiez et collez le code ci-dessous :

class httpd::start inherits httpd{ service { 'httpd':assure     => running, enable     => true, hasstatus  => true, hasrestart => true, require => Package['httpd'], } } 

Maintenant, vous avez créé les sous-classes.

  • install.pp – pour installer httpd paquet
  • configure.pp – pour configurer les autorisations appropriées pour httpd.conf fichier
  • start.pp – pour activer et démarrer le httpd services.

Étape 7 : Nous devrions maintenant laisser la classe principale httpd connaître les sous-classes (installer , configurer et commencez ). Pour ce faire, ouvrez simplement la classe principale du module et incluez les sous-classes.

# manifestes vim/init.pp

Inclure la déclaration va comme ci-dessous :

classe httpd {include httpd::installinclude httpd::configureinclude httpd::start}

Étape 8 : Nous en avons fini avec les cours maintenant. Mais vous devez indiquer à Puppet sur quels nœuds le catalogue doit être implémenté. Voici comment vous pouvez le faire.

Accédez au fichier manifeste principal (sous /etc/puppetlabs/code/environments/production/manifests )

# vim site.pp

Copiez et collez le code ci-dessous. Ici httpd est la classe principale créée pour gérer le serveur Web Apache.

nœud par défaut {include httpd}

C'est ça! Vous pouvez attendre que les nœuds de l'agent Puppet téléchargent automatiquement le catalogue ou vous pouvez le déclencher manuellement. Accédez au nœud Puppet Agent et exécutez la commande ci-dessous.

Étape 9 :

[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t Info :Utilisation de l'environnement configuré 'production' Info :Récupération des pluginfacts Info :Récupération du plugin Info :Mise en cache du catalogue pour puppetagent.test.in Info :Application de la configuration version '1472036234' Avis :/Stage[main]/Httpd::Install/Package[httpd]/ensure :créé Avis :/Stage[main]/Httpd::Configure/File[/etc/httpd/conf/httpd.conf ]/mode :le mode a changé de '0600' à '0644' Httpd::Start/Service[httpd] :Actualisation non planifiée sur Service[httpd] Avis :Catalogue appliqué en 5,88 secondes

Comme il s'agit de votre premier module, vous voudrez peut-être vérifier si le package est installé et si le service démarre correctement.

[Agent]# rpm -qa|grep httpdhttpd-tools-2.4.6-40.el7.centos.4.x86_64httpd-2.4.6-40.el7.centos.4.x86_64
[Agent]# service httpd statusRedirection vers /bin/systemctl status  httpd.servicehttpd.service - Le serveur HTTP Apache chargé :chargé (/usr/lib/systemd/system/httpd.service ; activé ; préréglage du fournisseur :désactivé) Actif :actif (en cours d'exécution) depuis le mer. 2016-08-24 17:29:29 IST ; il y a 6 minutes

Conclusion

C'est ça! Vous savez maintenant écrire vos propres modules Puppet pour installer, configurer et activer le service. Cependant, ce tutoriel n'est qu'un point de départ pour faire des merveilles avec Puppet. Bonne marionnette !


Linux
  1. Comment utiliser les commandes 'cat' et 'tac' avec des exemples sous Linux

  2. Comment compresser des fichiers et des répertoires sous Linux (avec exemples)

  3. Commandes tête et queue sous Linux expliquées avec des exemples

  4. Tutoriel sur les commandes d'expansion et de non-expansion avec des exemples

  5. Guide du débutant FTP et SFTP avec 10 exemples

Expliquer Soft Link et Hard Link sous Linux avec des exemples

Bash Scripting - Boucle While And Until expliquée avec des exemples

50 commandes de coupe Linux simples et utiles sous Unix avec des exemples

Autorisations et propriété des fichiers Linux expliquées avec des exemples

Comprendre Crontab sous Linux avec des exemples

Introduction aux fichiers de configuration Puppet avec des exemples sous Linux