2012-06-23 22 views
8

Estoy tratando de usar vagabundo para configurar un entorno de desarrollo que clone automáticamente dos repositorios si aún no han sido clonados.El comando Puppet exec se ejecuta en shell, pero no a través de puppet

Escribí un script simple para clonar los repos, después de fallar en muchas, muchas maneras para hacer que puppet ejecutara el comando git directamente. Por alguna razón, pensé que este método sería infalible, pero resulta que soy un mejor tonto de lo que pensaba.

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

Aquí está la secuencia de comandos:

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

Las claves privadas están configurados correctamente. Cuando inicio sesión en la vm y ejecuto manualmente bash clone_repos.sh, todo funciona. No importa cuántas veces recargue vagabundo y deje que el títere haga lo suyo, los repos nunca se cargan a través del ejecutivo. ¿Qué me estoy perdiendo?

+0

Falta espacio en el primer '[' test. – ormaaj

+0

Gracias por señalar eso. Desafortunadamente, eso es un artefacto que introduje en la publicación cuando reemplacé el directorio real con 'repo-one-dest'. El script funciona correctamente cuando se ejecuta desde la línea de comando y tiene el espacio. Edité la publicación para eliminar el error de sintaxis. – jeremiahs

+1

Agregar un 'logoutput => verdadero,' a su bloque Exec puede dar como resultado más salida que puede ayudar con la depuración. También es posible que desee agregar un archivo ["/ vagrant/manifiestos/modules/scripts/clone_repos.sh" ] a la sección requerida. Puppet puede estar intentando ejecutar el script antes de que Puppet lo haya enviado a tu VM. – pwan

Respuesta

4

Esto es probablemente porque cuando usted vagrant ssh generalmente inicia sesión como el usuario vagrant (de manera predeterminada, aunque esto ciertamente puede modificarse a través de la configuración). El usuario vagrant, supongo que tiene las teclas configuradas correctamente.

Cuando Vagrant ejecuta su aprovisionador (Puppet, en este caso), sin embargo, hace un sudo, por lo que se ejecuta como el usuario raíz.

La forma en que generalmente recomiendo configurar las claves para realizar la implementación es colocar las claves en algún lugar, y luego usar un contenedor GIT_SSH para clonarlo correctamente, o para usar agentes SSH.

+0

Buena idea. No estoy seguro funciona, pero parece plausible. Terminé alterando mi flujo de trabajo, y en este momento estoy de acuerdo con cómo están las cosas y probablemente no regrese a mi plan original. Si tengo algo de tiempo libre, puedo eventualmente ver si ese es el problema. – jeremiahs

Cuestiones relacionadas