2012-06-23 5 views
8

Sto tentando di utilizzare vagrant per configurare un ambiente dev che clona automaticamente due repository se non sono già stati clonati.Il comando puppet exec viene eseguito nella shell, ma non tramite puppet

Ho scritto un semplice script per clonare i repository, dopo aver fallito in molti, molti modi per ottenere puppet per eseguire direttamente il comando git. Per qualche ragione ho pensato che questo metodo sarebbe infallibile, ma risulta che sono un pazzo migliore di quanto pensassi.

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

Ecco lo script:

#!/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 

Le chiavi private sono impostati correttamente. Quando accedo a vm ed eseguo manualmente bash clone_repos.sh, tutto funziona. Non importa quante volte ricarico vagabondo e lasci che puppet faccia la sua cosa, i repository non vengono mai caricati tramite exec. Cosa mi manca?

+0

Spazio mancante sul primo '[' test. – ormaaj

+0

Grazie per averlo indicato. Unfortunatley, questo è un artefatto che ho introdotto nel post quando ho sostituito la directory reale con 'repo-one-dest'. Lo script funziona correttamente quando viene eseguito dalla riga di comando e ha lo spazio. Ho modificato il post per rimuovere l'errore di sintassi. – jeremiahs

+1

L'aggiunta di un 'logoutput => true,' al tuo blocco Exec può comportare più output che possono aiutare con il debug Puoi anche aggiungere un file ["/ vagrant/manifests/modules/scripts/clone_repos.sh" Alla sezione richiesta, Puppet potrebbe tentare di eseguire la sceneggiatura prima che puppet la spinga alla tua VM. – pwan

risposta

4

Questo è probabilmente dovuto al fatto che quando si esegue il login vagrant ssh come utente vagrant (per impostazione predefinita, questo può essere sicuramente modificato tramite la configurazione). L'utente vagrant suppongo che i tasti siano stati impostati correttamente.

Quando Vagrant esegue il provisioner (Puppet, in questo caso), tuttavia, esegue un sudo, quindi viene eseguito come utente root.

Il modo in cui generalmente consiglio di impostare le chiavi per eseguire la distribuzione è di mettere le chiavi da qualche parte, e quindi utilizzare un wrapper GIT_SSH per clonarlo correttamente o per utilizzare gli agenti SSH.

+0

Buona visione. funziona, ma sembra plausibile.Io ho finito per alterare il mio flusso di lavoro, ea questo punto sto bene per come stanno le cose e probabilmente non tornerò al mio piano originale. Se avrò del tempo libero, potrei alla fine vedi se questo è il problema. – jeremiahs