2013-05-27 18 views

Antwort

5

Wir haben glücklich librarian-puppet verwendet, um alle 3rd-Party-Module zu synchronisieren, unterstützt die Einstellung der Standorte und Versionen der Module. So laufen in Produktion und Entwicklung genau derselbe Code. Die Nutzung ist ein Liner

librarian-puppet install 

In anderen Fällen wir einen Shell-Skript, das Marionette zwei Mal ausgeführt wird, einmal ein minimales Modul, das zum Abrufen der benötigten Module und dann der ausgewachsene Puppe Fluss nur dann verantwortlich, wenn Alle Module sind verfügbar.

+0

Ich kann diesen Modulzweck immer noch nicht verstehen. installiert Librarian auch Puppet-Module, nicht nur benutzerdefinierte? Wenn Sie Submodule von git verwenden, können Sie alle mit einem Befehl aktualisieren? Standard-Marionettenmodule installieren Ich habe gerade install-me.sh-Skript erstellt.Ich möchte einfach die Checkout & Run-Methode, ohne zusätzlichen Aufwand. – holms

+0

ok das ist also im Grunde das gleiche wie Bibliothekar-Chef. Ich bin zum Chef migriert, aber Ihre Antwort ist immer noch gültig – holms

+0

es scheint mir, dass dies nicht wirklich die ursprüngliche Frage beantwortet, wie das Modul * nicht * vom Puppet-Client installiert, sondern von einem Drittanbieter-Tool. Daher müssen Benutzer zuerst diese Bibliothek installieren, und Sie können das nicht mit Puppet installieren! Die beste Lösung wäre etwas, das in den Puppet-Client selbst eingebaut wird ... – anarcat

2

Scheint, dass Schreibmodul für die Installation von Marionettenmodule möglich ist - es wird nur Wrapper für puppet module Werkzeug sein. Jedoch habe ich über solches Modul noch nicht erfahren.

Ich nehme an, dass dieser Mechanismus der Installation nicht populär ist, weil Sie häufig das installierte Modul ändern müssen, tun Sie einige Anpassungen. Praktisches Werkzeug für die Verwaltung solcher Änderungen ist Versionskontrollsystem. Zum Beispiel, in unserem Team behalten wir /etc/puppetlabs/puppet Verzeichnis in git repostitory. Nach der Installation eines beliebigen Moduls von Puppet Forge fügen wir seine Dateien der Versionskontrolle hinzu und schieben sie auf den Remote-Git-Server. Unsere intern entwickelten Module werden ebenfalls in diesem Repository aufbewahrt. Auf diese Weise werden mehrere Puppet-Master (Dev- und Prod-Umgebungen) mit diesem zentralen Repository synchronisiert und haben immer aktuelle Versionen aller Module.

3

Die "Puppet module" type and provider tut genau das:

module { 'author/mymodule': 
    ensure => present, 
} 
module { 'puppetlabs/stdlib': 
    ensure => '2.6.0', 
} 
module { 'puppetlabs/stdlib': 
    ensure  => present, 
    modulepath => '/etc/puppet/modules', 
} 

Neuere Versionen von Puppet auch einen puppet module Befehl haben, dass Sie beliebigen Puppet Module aus dem Puppet forge, beispielsweise installieren kann:

$ puppet module install rcoleman/puppet_module 
Notice: Preparing to install into /home/anarcat/.puppet/modules ... 
Notice: Created target directory /home/anarcat/.puppet/modules 
Notice: Downloading from https://forgeapi.puppetlabs.com ... 
Notice: Installing -- do not interrupt ... 
/home/anarcat/.puppet/modules 
└── rcoleman-puppet_module (v0.0.3) 

Andere Alternativen beinhalten :

  • librarian
  • r10k (cited als Ersatz für Bibliothekar), unterstützt dynamische Umgebungen und vieles mehr

R10K ist jetzt Teil von Puppet Entreprise 2.015,03, so kann es sicherlich am besten Praxis in Betracht gezogen werden.

+1

Das sieht einfach und großartig aus, hat aber [Probleme] (https://github.com/ryanycoleman/puppet_module_provider/issues/4) mit einer neueren Version der Marionette – vikas027

+1

@ vikas027 Ich habe andere Optionen hinzugefügt, die jetzt verfügbar sind, einschließlich des Befehls 'puppet module' und legen eine stärkere Betonung auf r10k. – anarcat

+0

Bestätigen, vermeiden 'rcoleman/puppet_module' aufgrund von Problemen – alekwisnia

0

Ich tat dies, und es schien,

exec { 'puppet-fstab': 
    path => '/bin:/usr/bin', 
    command => 'puppet module install -i /usr/share/puppet/modules/AlexCline-fstab >>/tmp/err.log', 
} 
+0

Natürlich werde ich nur feststellen, dass direkt nachdem ich dies zur Arbeit gebracht habe, erkannte ich, dass Marionette in" mount "eingebaut hat, was tut, was ich wollte, also habe ich dieses Modul entfernt , aber hoffentlich zeigt dieser andere jemanden in die richtige Richtung. –

4

Hier ist ein Beispiel von mir zu arbeiten:

$module_stdlib = 'puppetlabs-stdlib' 
    exec { 'puppet_module_stdlib': 
    command => "puppet module install ${module_stdlib}", 
    unless => "puppet module list | grep ${module_stdlib}", 
    path => ['/bin', '/opt/puppetlabs/bin'] 
    } 

Wo $ module_stdlib ein Modul I zu installieren whant zu. Der Pfad /bin ist ein Pfad, von dem die grep stammt. Und die /opt/puppetlabs/bin ist ein Pfad, wo für die Puppe Binär in meiner Installation existiert.

+0

Dies funktioniert, aber seien Sie vorsichtig mit Anführungszeichen und Bindestrichen! –

Verwandte Themen