GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verständnis von Puppet-Ressourcen, Manifesten, Modulen und Klassen mit Beispielen

In diesem Tutorial erkläre ich Puppet-Ressourcen, Manifeste, Module und Klassen mit Beispielen. Außerdem gehe ich davon aus, dass Sie bereits Puppet-Master/Agent-Knoten installiert und einsatzbereit haben. Um Puppet verwenden zu können, müssen Sie verstehen, wie Puppet mit Ressourcen umgeht und wie Manifeste und Module erstellt werden.

Voraussetzungen:

Wie ich bereits sagte, müssen Sie Puppet Master- und Agent-Knoten installiert und konfiguriert haben.

Puppet’s Declarative Domain Specific Language (DSL)

  • Puppet hat seine eigene deklarative domänenspezifische Sprache, die STATES definiert eines Systems.
  • Puppencode wird in eine Datei namens MANIFESTS geschrieben und mit der .pp-Erweiterung gespeichert (z. B. site.pp ist eine Hauptmanifestdatei)
  • Puppencode enthält RESOURCEN die Elemente des Systems betreffen (wie Datei, Paket, Dienst, Benutzer, Host, Schnittstelle, Exec usw.). Ressourcen sind die grundlegende Einheit von Systemkonfigurationen und jede Ressource beschreibt einen Aspekt des Systems.
  • Ressourcen sind in KLASSEN ( gruppiert benannter Block von Puppet-Codes), die in MODULEN gespeichert (organisiert) sind und sie werden nicht verwendet, bis sie aufgerufen werden.
  • Puppet Master erstellt einen KATALOG (generiert basierend auf dem Puppet-Code und den Daten) und die Clients wenden diese an.

Sehen wir uns die Puppet-Begriffe im Detail an.

Ressourcen

Eine Ressource beschreibt etwas über den Zustand des Systems. Zum Beispiel, ob ein bestimmter Benutzer oder eine Datei existiert, oder ein Dienst ausgeführt oder aktiviert werden soll, oder ein Paket installiert werden soll.

Format der Ressource:

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

Beispiel 1:

file { 'test':
 path => '/tmp/test',
 content => 'An example content',
 }

Beispiel 2:

package { 'ntp':
 ensure => present,
}

Beispiel 3:

service { 'ntpd':
 ensure => running,
 enable => true,
}

Hier ist ein Befehl zum Auflisten von Ressourcentypen in Puppet:

# /opt/puppetlabs/puppet/bin/puppet resource --types
augeas
computer
cron
exec
file
filebucket
group
host
interface
k5login
macauthorization
mailalias
maillist
mcx
mount
nagios_command
nagios_contact
nagios_contactgroup
nagios_host
nagios_hostdependency
nagios_hostescalation
nagios_hostextinfo
nagios_hostgroup
nagios_service
nagios_servicedependency
nagios_serviceescalation
nagios_serviceextinfo
nagios_servicegroup
nagios_timeperiod
notify
package
resources
router
schedule
scheduled_task
selboolean
selmodule
service
ssh_authorized_key
sshkey
stage
tidy
user
vlan
whit
yumrepo
zfs
zone
zpool

Manifeste

Wie bereits erwähnt, wird Puppet-Code in die Manifest-Datei mit der .pp-Erweiterung geschrieben . Die standardmäßige Hauptmanifestdatei befindet sich unter:

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

Weitere Manifestdateien können unter /etc/puppetlabs/code/environments/production/manifests/ erstellt werden

Klassen

Klassen enthalten Codeblöcke, die von überall im Code aufgerufen werden können. Klassen bieten die Möglichkeit der Wiederverwendung von Code. Wenn Sie Programmiersprachen wie Java oder C++ kennen, ist das Definieren von Klassen in Puppet genauso.

class class_name {
 ::::::::::Puppet code goes here:::::::::
 }

Nun kann die obige Klasse wie folgt in einen Puppet-Code eingebunden werden:

include class_name

Module

Module helfen beim Organisieren von Manifesten. Ein Modul kann unter /etc/puppetlabs/code/environments/production/modules hinzugefügt werden. Ein großer Puppet-Code kann in mehrere Manifeste verteilt und mithilfe von Modulen organisiert werden (am Ende dieses Beitrags erfahren Sie, wie Sie den Apache-Dienst installieren, konfigurieren und starten – wobei jede dieser Aufgaben in verschiedene Klassen unterteilt ist).>

Lassen Sie uns wissen, versuchen Sie, ein Manifest zu erstellen, um eine einfache Operation auszuführen.

Mein erstes Manifest in Puppet

Beispiel 1:Erstellen einer neuen Datei (in site.pp)

Schritt 1: Melden Sie sich als privilegierter Benutzer bei Puppet Server (Master-Knoten) an.

Schritt 2: Gehen Sie zu /etc/puppetlabs/code/environments/production/manifests

Schritt 3: Bearbeiten Sie site.pp – Hauptmanifestdatei. Wenn Sie keine finden, erstellen Sie sie.

# vim site.pp

Schritt 4: Lassen Sie uns Puppet-Code schreiben, um eine Datei in /tmp/ zu erstellen am Puppet-Agent-Knoten. Der Code lautet wie folgt:

file { "/tmp/myFile":
 ensure => "present",
 owner => "root",
 group => "root",
 mode => "644",
 content => "This is my first manifest to create a file in temp directory",
 }

Im obigen Code haben wir file verwendet Ressourcentyp mit Argumenten wie ensure , Inhaber , Gruppe , Modus und Inhalt . Die Datei wird in /tmp erstellt .

Schritt 5 :Jetzt ist die Manifestdatei fertig. Gehen Sie weiter zum Puppet Agent-Knoten und führen Sie den folgenden Befehl aus.

[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t
 Info: Using configured environment 'production'
 Info: Retrieving pluginfacts
 Info: Retrieving plugin
 Info: Caching catalog for puppetagent.test.in
 Info: Applying configuration version '1471021726'
 Notice: /Stage[main]/Main/File[/tmp/myFile]/ensure: defined content as '{md5}8eadb0a0feef0bc667702434f816d8e8'
 Notice: Applied catalog in 0.09 seconds

Die obige Ausgabe besagt, dass der Katalog angewendet wurde.

Hinweis :Die Puppet-Agenten kontaktieren automatisch den Puppet-Server, um einen Katalog zur eigenen Konfiguration zu erhalten. Wenn Sie jedoch nicht auf die automatische Synchronisierung warten möchten, können Sie den obigen Befehl ausführen.

Schritt 6 :Überprüfen Sie, ob die Datei mit den erforderlichen Inhalten erstellt wurde.

# ls /tmp/myFile
/tmp/myFile
# more /tmp/myFile
This is my first manifest to create a file in temp directory

Erstellen Ihres ersten Moduls

Lassen Sie uns ein Modul erstellen, das den Apache-Webserver auf den Agentenknoten installiert.

Schritt 1 :Wechseln Sie in das Modulverzeichnis.

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

Schritt 2 :Lassen Sie uns ein Modul namens httpd erstellen . Dazu verwenden wir PuppetForge was die Einhaltung einer Namenskonvention erfordert. Zum Beispiel

organizationName-moduleName

Da wir den Apache-Webserver installieren, ist das zu installierende Paket httpd und meine Namenskonvention wird wie folgt aussehen:

mypuppetorg-httpd

Schritt 3 :Führen Sie den folgenden Befehl aus

# /opt/puppetlabs/puppet/bin/puppet module generate mypuppetorg-httpd
We need to create a metadata.json file for this module.  Please answer the
following questions; if the question is not applicable to this module, feel free
to leave it blank.

Puppet uses Semantic Versioning (semver.org) to version modules.
What version is this module?  [0.1.0]
-->

Who wrote this module?  [mypuppetorg]
-->

What license does this module code fall under?  [Apache-2.0]
-->

How would you describe this module in a single sentence?
--> Installs Apache web server and configures it

Where is this module's source code repository?
-->

Where can others go to learn more about this module?
-->

Where can others go to file issues about this module?
-->

----------------------------------------
{
"name": "mypuppetorg-httpd",
"version": "0.1.0",
"author": "mypuppetorg",
"summary": "Installs Apache web server and configures it",
"license": "Apache-2.0",
"source": "",
"project_page": null,
"issues_url": null,
"dependencies": [
{"name":"puppetlabs-stdlib","version_requirement":">= 1.0.0"}
],
"data_provider": null
}
----------------------------------------

About to generate this metadata; continue? [n/Y]
--> Y

Notice: Generating module at /etc/puppetlabs/code/environments/production/modules/httpd...
Notice: Populating templates...
Finished; module generated in httpd.
httpd/Gemfile
httpd/Rakefile
httpd/examples
httpd/examples/init.pp
httpd/manifests
httpd/manifests/init.pp
httpd/spec
httpd/spec/classes
httpd/spec/classes/init_spec.rb
httpd/spec/spec_helper.rb
httpd/README.md
httpd/metadata.json

Schritt 4 :Ein Modul wird erstellt. Zum Beispiel httpd und seine Struktur sieht wie folgt aus:

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

Schritt 5 :Passen Sie das Modul an

Schritt 4 erstellt eine Modulverzeichnisstruktur und eine Hauptmanifestdatei (für das Modul) namens init.pp . Wir öffnen die Datei einfach, um zu sehen, wie sie aussieht, und am Ende der Datei finden Sie einen leeren httpd Klasse.

class httpd {

}

Schritt 6 :Lassen Sie uns separate Klassen zum Installieren (install.pp), Konfigurieren (configure.pp) und Starten (start.pp) des Apache-Dienstes erstellen.

Unterklasse zum Installieren von Apache erstellen: Wir erstellen eine neue Manifestdatei namens install.pp (Klasse Modulname::install)

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

Kopieren Sie den folgenden Code und fügen Sie ihn ein:

# == Class: httpd::install
class httpd::install inherits httpd {
package { 'httpd':
ensure => installed,
}
}

Hier die Unterklasse „install ‘ erbt die Hauptklasse httpd . Achten Sie auch auf die Syntax Paket , was den Puppet-Typ und sicherstellen bedeutet -Attribut stellt sicher, dass das besagte Paket installiert ist.

Erstellen einer Unterklasse zum Konfigurieren von httpd (configure.pp – class modulename::configure)

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

Kopieren Sie den folgenden Code und fügen Sie ihn ein, um sicherzustellen, dass die httpd.conf Datei ordnungsgemäß geschützt ist.

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

Unterklasse erstellen, um httpd zu starten service (start.pp – Klasse Modulname::start):

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

Kopieren Sie den folgenden Code und fügen Sie ihn ein:

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

Jetzt haben Sie die Unterklassen erstellt.

  • install.pp – um httpd zu installieren Paket
  • configure.pp – um die richtigen Berechtigungen für httpd.conf zu konfigurieren Datei
  • start.pp – um den httpd zu aktivieren und zu starten Dienst.

Schritt 7: Wir sollten jetzt die Hauptklasse httpd lassen um mehr über die Unterklassen zu erfahren (installieren , konfigurieren und starten ). Öffnen Sie dazu einfach die Hauptklasse des Moduls und binden Sie die Unterklassen ein.

# vim manifests/init.pp

Include-Anweisung lautet wie folgt:

class httpd {
include httpd::install
include httpd::configure
include httpd::start
}

Schritt 8: Wir sind jetzt fertig mit den Klassen. Aber Sie müssen Puppet mitteilen, auf welchen Knoten der Katalog implementiert werden soll. So können Sie das tun.

Gehen Sie zur Hauptmanifestdatei (unter /etc/puppetlabs/code/environments/production/manifests )

# vim site.pp

Kopieren Sie den folgenden Code und fügen Sie ihn ein. Hier httpd ist die Hauptklasse, die für die Verwaltung des Apache-Webservers erstellt wurde.

node default {
include httpd
}

Das ist es! Sie können warten, bis die Puppet Agent-Knoten den Katalog automatisch herunterladen, oder Sie können ihn manuell auslösen. Gehen Sie zum Puppet Agent-Knoten und führen Sie den folgenden Befehl aus.

Schritt 9:

[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t
 Info: Using configured environment 'production'
 Info: Retrieving pluginfacts
 Info: Retrieving plugin
 Info: Caching catalog for puppetagent.test.in
 Info: Applying configuration version '1472036234'
 Notice: /Stage[main]/Httpd::Install/Package[httpd]/ensure: created
 Notice: /Stage[main]/Httpd::Configure/File[/etc/httpd/conf/httpd.conf]/mode: mode changed '0600' to '0644'
 Notice: /Stage[main]/Httpd::Start/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
 Info: /Stage[main]/Httpd::Start/Service[httpd]: Unscheduling refresh on Service[httpd]
 Notice: Applied catalog in 5.88 seconds

Da dies Ihr erstes Modul ist, sollten Sie überprüfen, ob das Paket installiert und der Dienst ordnungsgemäß gestartet wurde.

[Agent]# rpm -qa|grep httpd
httpd-tools-2.4.6-40.el7.centos.4.x86_64
httpd-2.4.6-40.el7.centos.4.x86_64
[Agent]# service httpd status
Redirecting to /bin/systemctl status  httpd.service
httpd.service - The Apache HTTP Server
 Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
 Active: active (running) since Wed 2016-08-24 17:29:29 IST; 6min ago

Fazit

Das ist es! Jetzt wissen Sie, wie Sie Ihre eigenen Puppet-Module für die Installation, Konfiguration und Aktivierung des Dienstes schreiben. Dieses Tutorial ist jedoch nur ein Ausgangspunkt, um mit Puppet Wunder zu vollbringen. Viel Spaß beim Puppenspielen!


Linux
  1. So verwenden Sie die Befehle „cat“ und „tac“ mit Beispielen in Linux

  2. So komprimieren Sie Dateien und Verzeichnisse unter Linux (mit Beispielen)

  3. Head- und Tail-Befehle in Linux mit Beispielen erklärt

  4. Lernprogramm zum Erweitern und Aufheben von Befehlen mit Beispielen

  5. FTP- und SFTP-Anfängerleitfaden mit 10 Beispielen

Erläuterung von Soft Link und Hard Link in Linux anhand von Beispielen

Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt

50 einfacher und nützlicher Linux-Cut-Befehl in Unix mit Beispielen

Linux-Dateiberechtigungen und Eigentumsrechte mit Beispielen erklärt

Crontab in Linux mit Beispielen verstehen

Einführung in Puppet-Konfigurationsdateien mit Beispielen unter Linux