Puppet exec命令在shell中运行,但不是通过puppet运行

时间:2012-06-23 22:00:26

标签: git bash automation puppet vagrant

我正在尝试使用vagrant来设置一个开发环境,如果它们尚未被克隆,它会自动克隆两个存储库。

我编写了一个简单的脚本来克隆repos,在许多方法失败之后,让puppet直接运行git命令。出于某种原因,我认为这种方法是万无一失的,但事实证明我是一个比我想象的更好的傻瓜。

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

这是脚本:

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

if [ ! -d /vagrant/repo-two-dest ]; then
  git clone git@example.com:/repo-two.git /vagrant/repo-two-dest
fi

exit

私钥已正确设置。当我登录vm并手动运行bash clone_repos.sh时,一切正常。无论我多少次重新加载流浪汉并让木偶做它的事情,repos永远不会通过exec加载。我错过了什么?

1 个答案:

答案 0 :(得分:4)

这可能是因为当您vagrant ssh时,您通常以vagrant用户身份登录(默认情况下,虽然这可以通过配置进行修改)。我猜的vagrant用户正确设置了密钥。

但是,当Vagrant运行您的配置程序(在本例中为Puppet)时,它会执行sudo,因此它以root用户身份运行。

我通常建议设置密钥进行部署的方法是将密钥放在某处,然后使用GIT_SSH包装器正确克隆它,或者使用SSH代理。