Puppe: die Übergabe von Parametern durch die Klassen
Dies ist ein follow auf meine frühere Frage über parametrisierte Klassen. Folgenden auf das Beispiel ein wenig weiter, ich möchte in der Lage sein, um pass läuft oder gestoppt, die in den service, aber wenn ich den Dienst hinzuzufügen, um eine box, die ich nicht verwenden "gehören Pudel::Dienst", ich benutze "gehören Pudel", was bedeutet all das andere Zeug Pudel installiert werden muss.
So, kann ich übergeben die variable an die service-Klasse wie folgt aus:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
class { 'poodle':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle ( $ensure = 'running' ) {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure ) {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}
Oder sollte ich die parameter direkt an die service-Klasse und rufen ausdrücklich sowohl der Pudel-Klasse und Pudel service-Klasse wie folgt aus:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
include poodle
class { 'poodle::service':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure = 'running') {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}
Oder ist das hinzufügen der parameter der service-Klasse und darunter NUR, dass genug, weil die service-Klasse hat Abhängigkeiten, wie diese:
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
class { 'poodle::service':
$ensure => 'stopped'
}
}
## POODLE MODULE, manifests/init.pp
class poodle {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service':
ensure => $ensure
}
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodle::service ( $ensure = 'running') {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}
Was ist der richtige Kurs und die best practice hier? Vielen Dank im Voraus!
InformationsquelleAutor Spanky | 2014-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, Sie don ' T wollen die Menschen zu verstehen, die interne Struktur des Moduls, um es zu verwenden.
Ich würde sicherlich nicht verlangen, Sie gehören beide
poodle
undpoodle:service
.Module Folgen in der Regel eine von zwei Strukturen:
Single entry point über
init.pp
für einfache Dienstleistungen mit wenige/keine Parameter und keine separaten Rollen(client/server) oder "Vielfaches" (wie ein Datenbank-server kann mehrere db ' s konfiguriert
via puppet)
Mehrere Einstiegspunkte über Unterklassen und benutzerdefinierten Typen, die mit separaten Rollen und
multiples
Basierend auf dem, was Sie beschrieben haben, würde ich die parameter in der main-Klasse auf und übergeben Sie es durch den Dienst Unterklasse.
InformationsquelleAutor user3204436
funktioniert.
Aber ich Stimme sagen, "Sie don' T wollen die Menschen zu verstehen, die interne Struktur des Moduls" in diesem Punkt, dass Sie wollen, dass die Flexibilität beim anlegen von vhosts definieren, welchen port, Protokoll, welche backend - proxy + und was-Module usw. verwendet werden sollten.
Ich sehe nicht, einen Weg für meine Projekte, wie eine solche Flexibilität nur durch das schreiben gehören apache, nginx oder so.
InformationsquelleAutor Frenzo