Puppet Boxen项目清单是';t解析$repo_dir

Puppet Boxen项目清单是';t解析$repo_dir,puppet,boxen,Puppet,Boxen,我正在尝试使用Boxen来设置我们的开发环境。我们有许多回购协议,我们想拉下来,运行一个脚本开始。我们达成了一个约定:回购协议有一个scripts/目录,其中有一个bootstrap脚本需要运行 这似乎可以通过exec命令实现。但是为了告诉它运行什么,我必须访问repo的目录。其他脚本使用$repo_dir或${boxen::config:srcdir}/${name}。我已经尝试了其中的每一种,以及许多不同风格的exec,但都没有成功 舱单 这比规定的目标简单。脚本需要在它们驻留的目录中运行。

我正在尝试使用Boxen来设置我们的开发环境。我们有许多回购协议,我们想拉下来,运行一个脚本开始。我们达成了一个约定:回购协议有一个
scripts/
目录,其中有一个
bootstrap
脚本需要运行

这似乎可以通过
exec
命令实现。但是为了告诉它运行什么,我必须访问repo的目录。其他脚本使用
$repo_dir
${boxen::config:srcdir}/${name}
。我已经尝试了其中的每一种,以及许多不同风格的
exec
,但都没有成功

舱单 这比规定的目标简单。脚本需要在它们驻留的目录中运行。因此,对于
exec
步骤,我的第一个(希望是最终的)清单将有类似的内容:

->
exec { 'running bootstrap on hero':
  command         => '$repo_dir/scripts/bootstrap',
  cwd             => '$repo_dir/scripts'
}
剧本 目前,
scripts/echo
非常简单:

#!/bin/bash
echo "Echo File!"
touch `date`
因为输出不会被看到,所以我们制作了一个带有日期的文件,这样我们就可以观察到这个副作用,并知道脚本实际运行了

打电话给博森 我只是直接从
清单
目录调用此项目:

Chris:manifests chris$ boxen hero
输出
如果我改为尝试
${boxen::config::srcdir}
,也是如此。看看其他的例子,这些变量都被使用了,而且似乎有效。我说错了吗?我应该使用另一个变量吗?

我注意到您的清单中有两个错误:

->
Exec {
    command       => '$repo_dir/scripts/echo'
}
->
第一个是,您已将exec的第一个字母大写。在puppet语言中,这意味着您正在为所有后续exec资源定义()指定默认值。这不是资源定义本身,因此无法应用资源排序,因此会出现错误

另一个错误是将单引号与变量结合使用。单引号字符串被解释为文字。换句话说,
“$repo_dir”
被逐字解释为
$repo_dir
,而
“$repo_dir”
被解释为变量的内容
$repo_dir
()

希望这有帮助

祝你好运

Warning: Scope(Class[Boxen::Environment]): Setting up 'hero'. This can be made permanent by having 'include projects::hero' in your personal manifest.
Error: Could not find resource 'command => $repo_dir/scripts/echo' for relationship from 'Boxen::Project[hero]' on node chris.local
Error: Could not find resource 'command => $repo_dir/scripts/echo' for relationship from 'Boxen::Project[hero]' on node chris.local
->
Exec {
    command       => '$repo_dir/scripts/echo'
}
->