Puppen- und Abschussdienste?

15

Wir haben eine mit Puppet konfigurierte Produktionsumgebung und möchten eine ähnliche Umgebung auf unseren Entwicklungsmaschinen einrichten können: eine Mischung aus Red Hats, Ubuntus und OSX. Wie zu erwarten ist, ist OSX der seltsame Mann hier draußen, und leider habe ich große Probleme, dies zum Laufen zu bringen.

Mein erster Versuch war macportsmit der folgenden Deklaration:

package { 'rabbitmq-server':
    ensure   => installed,
    provider => macports,
}

Dies erzeugt jedoch leider den folgenden Fehler:

Error: /Stage[main]/Rabbitmq/Package[rabbitmq-server]: Could not evaluate: Execution of '/opt/local/bin/port -q installed rabbitmq-server' returned 1: usage: cut -b list [-n] [file ...]
       cut -c list [file ...]
       cut -f list [-s] [-d delim] [file ...]
    while executing
"exec dscl -q . -read /Users/$env(SUDO_USER) NFSHomeDirectory | cut -d ' ' -f 2"
    (procedure "mportinit" line 95)
    invoked from within
"mportinit ui_options global_options global_variations"

Als nächstes dachte ich, ich würde es homebrewversuchen. Standardmäßig ist kein Paketanbieter verfügbar, aber Puppet-Homebrew schien vielversprechend. Hier bin ich viel weiter gekommen und habe es tatsächlich geschafft, die Installation zum Laufen zu bringen.

package { 'rabbitmq':
    ensure   => installed,
    provider => brew,
}
file { "plist":
    path   => "/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist",
    source => "/usr/local/opt/rabbitmq/homebrew.mxcl.rabbitmq.plist",
    ensure => present,
    owner  => root,
    group  => wheel,
    mode   => 0644,
}
service { "homebrew.mxcl.rabbitmq":
    enable      => true,
    ensure      => running,
    provider    => "launchd",
    require     => [ File["/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist"] ],
}

Hier bekomme ich keinen Fehler. Aber RabbitMQ startet auch nicht (wie beim manuellen Laden mit launchctl)


    [... snip ...]
    Debug: Executing '/bin/launchctl list'
    Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
        /Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist'
    Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
        /var/db/launchd.db/com.apple.launchd/overrides.plist'
    Debug: /Schedule[weekly]: Skipping device resources because running on a host
    Debug: /Schedule[puppet]: Skipping device resources because running on a host
    Debug: Finishing transaction 2248294820
    Debug: Storing state
    Debug: Stored state in 0.01 seconds
    Finished catalog run in 25.90 seconds

Was mache ich falsch?

Bearbeiten : Um es festzuhalten, wir machen dies jetzt mit Vagrant-VMs auf unseren OSX-Rechnern, aber die native Lösung wäre immer noch vorzuziehen.

Joel Westberg
quelle
Welche Version der Puppe läufst du? Versuchen Sie die oben genannten Manifeste mit puppet apply manifest.pp?
Chutz
Das Debug enthält anscheinend keinen "tatsächlichen" Fehler. Können Sie in /private/var/log/system.log nachsehen, ob entsprechende Einträge vorhanden sind?
John Siu
@chutz: Laufen sudo puppet apply manifest.ppauf Puppet 3.0.1, Facter 1.6.16 @JohnSiu: Leider gibt es auch nichts.
Joel Westberg
Ich glaube nicht, dass Sie in irgendeiner Weise falsch liegen. Ich denke jedoch, Sie müssen den Programmieransatz noch einmal überprüfen.
Toby
Wissen Sie, ob eine Marionette die Startliste lädt? Andernfalls müssen Sie warten, bis der Computer neu gestartet wird, oder nach der Installation einen Launchctl Load Plist-Schritt erzwingen. Vergewissern Sie sich, dass auf der Plist das Flag für das Laden beim Laufen gesetzt ist. Können Sie die Liste und die Ausgabe der Startliste mit dem Dienstnamen veröffentlichen?
Alex

Antworten:

1

Leider funktionieren Konfigurationsmanagement-Tools auf Desktop-Computern nicht wirklich gut. Es ist viel besser, ein Tool wie Vagrant zu verwenden (wie Sie es getan haben).

Vagrant ist eine Open-Source-Virtualisierungssoftware, mit der Sie Umgebungen über Hypervisoren replizieren können. Auf meinem Mac verwende ich es mit der VirtualBox von Oracle (hauptsächlich für Chef-Tests). VirtualBox ist ebenfalls kostenlos. Die ursprüngliche Absicht von Vagrant war es, Entwicklern die Möglichkeit zu geben, in konsistenten Umgebungen zu arbeiten (dh was Sie gesucht haben, aber nicht, wie Sie es wollten). Vagrant kann mit Puppet kombiniert werden. Schauen Sie sich diese Beispiele an .

Forest J. Handford
quelle
0

Eine Art Brute-Force-Ansatz:

class rabbitmqosx {    
    exec { "rabbitmqosx":
           command =>  "/path/to/rabbitmq",
           unless => [ 
                       "/bin/ps |grep -c rabbitmq" 
                     ]
         }

node fancymac { include "rabbitmqosx }
Stephan
quelle