我正在尝试使用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加载。我错过了什么?
答案 0 :(得分:4)
这可能是因为当您vagrant ssh
时,您通常以vagrant
用户身份登录(默认情况下,虽然这可以通过配置进行修改)。我猜的vagrant
用户正确设置了密钥。
但是,当Vagrant运行您的配置程序(在本例中为Puppet)时,它会执行sudo
,因此它以root用户身份运行。
我通常建议设置密钥进行部署的方法是将密钥放在某处,然后使用GIT_SSH
包装器正确克隆它,或者使用SSH代理。