【问题标题】:Puppet exec command runs in shell, but not via puppetPuppet exec 命令在 shell 中运行,但不是通过 puppet
【发布时间】:2012-06-25 18:19:15
【问题描述】:

我正在尝试使用 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 时,一切正常。无论我重新加载 vagrant 并让 puppet 执行多少次,repos 都不会通过 exec 加载。我错过了什么?

【问题讨论】:

  • 第一个 [ 测试缺少空格。
  • 感谢您指出这一点。不幸的是,这是我在将真实目录替换为“repo-one-dest”时引入到帖子中的工件。从命令行运行时,脚本可以正常运行并且有空间。我编辑了帖子以删除语法错误。
  • 在您的 Exec 块中添加一个 'logoutput=>true," 可能会产生更多的输出,这可能有助于调试。您可能还想添加一个文件 ["/vagrant/manifests/modules/scripts /clone_repos.sh"] 到 require 部分。Puppet 可能会在 puppet 将脚本推送到您的 VM 之前尝试执行脚本。
  • 今晚我回家后试试。相当 100% 肯定这不是路径上不存在的文件的问题,但是嘿,我以前错了。
  • 顺便说一句:如果有人阅读本文有时间和意愿通过公共 git 存储库解决此问题并发布解决方案,那将很有帮助。

标签: git bash automation puppet vagrant


【解决方案1】:

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

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

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

【讨论】:

  • 很好的洞察力。不确定它是否有效,但它似乎是合理的。我最终改变了我的工作流程,此时我对事情的现状很好,可能不会回到我原来的计划。如果我有一些空闲时间,我最终可能会看看这是否是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多