2012-06-23 5 views
8

Ich versuche, vagrant zu verwenden, um eine dev-Umgebung einzurichten, die automatisch zwei Repositorys klont, wenn sie nicht bereits geklont wurden.Puppet Exec-Befehl läuft in der Shell, aber nicht über Marionette

Ich schrieb ein einfaches Skript, um die Repos zu klonen, nachdem es auf viele, viele Arten versagt hatte, um die Puppe dazu zu bringen, den Git-Befehl direkt auszuführen. Aus irgendeinem Grund dachte ich, diese Methode wäre narrensicher, aber es stellt sich heraus, dass ich ein besserer Idiot bin als ich dachte.

exec {"load-repos": 
    command =>"/bin/bash /vagrant/manifests/modules/scripts/clone_repos.sh", 
    require => Package["git-core"], 
    } 

Hier ist das Skript:

#!/bin/bash 
if [ ! -d /vagrant/repo-one-dest ]; then 
    git clone [email protected]:/repo-one.git /vagrant/repo-one-dest 
fi 

if [ ! -d /vagrant/repo-two-dest ]; then 
    git clone [email protected]:/repo-two.git /vagrant/repo-two-dest 
fi 

exit 

Die privaten Schlüssel sind richtig eingerichtet. Wenn ich mich in der VM anmelden und bash clone_repos.sh manuell ausführen, funktioniert alles. Egal, wie oft ich den Landstreicher neu lade und die Puppe ihre Sache machen lasse, die Repos werden niemals über die Exekutive geladen. Was vermisse ich?

+0

Fehlender Platz beim ersten '[' Test. – ormaaj

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Unglücklicherweise, das ist ein Artefakt, das ich in den Post eingeführt habe, als ich das reale Verzeichnis durch 'repo-one-dest' ersetzt habe. Das Skript funktioniert ordnungsgemäß, wenn es über die Befehlszeile ausgeführt wird und über den Speicherplatz verfügt. Ich habe den Post bearbeitet, um den Syntaxfehler zu entfernen. – jeremiahs

+1

Das Hinzufügen eines 'logoutput => true' zu Ihrem Exec-Block kann zu mehr Ausgaben führen, die beim Debuggen helfen können. Sie können auch eine Datei hinzufügen ["/ vagrant/manifests/modules/scripts/clone_repos.sh" ] Puppet versucht möglicherweise, das Skript auszuführen, bevor die Puppe es auf Ihre VM geschoben hat. – pwan

Antwort

4

Das liegt wahrscheinlich daran, wenn Sie vagrant ssh Sie sind in der Regel als vagrant Benutzer anmelden (standardmäßig, obwohl dies sicherlich über die Konfiguration geändert werden kann). Der vagrant Benutzer, den ich vermute, hat die Schlüssel richtig eingerichtet.

Wenn Vagrant Ihren Provisioner ausführt (in diesem Fall Puppet), wird jedoch eine sudo ausgeführt, sodass er als root-Benutzer ausgeführt wird.

Die Art, wie ich im Allgemeinen die Einrichtung von Schlüsseln für die Bereitstellung empfehle, besteht darin, die Schlüssel irgendwo anzubringen und dann einen GIT_SSH Wrapper zu verwenden, um ihn richtig zu klonen oder SSH-Agenten zu verwenden.

+0

Gute Einsicht es funktioniert, aber es scheint plausibel zu sein.Ich habe am Ende meinen Arbeitsablauf geändert, und an diesem Punkt geht es mir gut mit den Dingen und ich werde wahrscheinlich nicht zu meinem ursprünglichen Plan zurückkehren.Wenn ich etwas Freizeit habe, kann ich schließlich sehen, ob das das Problem ist. – jeremiahs

Verwandte Themen