1

我正在尝试使用 Boxen 来设置我们的开发环境。我们有许多我们想要拉下并运行脚本以开始的存储库。我们达成了一个约定:repos 有一个scripts/目录,其中包含bootstrap需要运行的脚本。

使用该命令似乎可以做到这一点exec。但是为了告诉它运行什么,我必须访问 repo 的目录。其他脚本使用$repo_dir${boxen::config:srcdir}/${name}。我已经尝试了其中的每一个,以及许多不同的风格exec,但无济于事。

清单

class projects::hero {

  include ruby

  boxen::project { 'hero':
    ruby          => '2.0.0',
    source        => 'myorg/hero'
  }
  ->
  Exec {
    command       => '$repo_dir/scripts/echo'
  }
  ->
  notify {'hero is running at $srcdir':}
}

这比规定的目标要简单。脚本需要在它们所在的目录中运行。所以我的第一个(希望是最终的)清单在这一步中会有这样的exec内容:

->
exec { 'running bootstrap on hero':
  command         => '$repo_dir/scripts/bootstrap',
  cwd             => '$repo_dir/scripts'
}

剧本

现在,scripts/echo非常简单:

#!/bin/bash
echo "Echo File!"
touch `date`

由于实际上不会看到输出,因此我们正在制作一个带有日期的文件,以便我们可以观察到这种副作用并知道脚本实际运行了。

叫boxen

我只是直接从manifests目录中调用这个项目:

Chris:manifests chris$ boxen hero

输出

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

如果我尝试,这也是正确的${boxen::config::srcdir}。查看其他示例,这些变量被使用并且似乎有效。我叫错了吗?我应该使用不同的变量吗?

4

1 回答 1

0

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

->
Exec {
    command       => '$repo_dir/scripts/echo'
}
->

首先是您将 exec 的第一个字母大写。在 puppet 语言中,这意味着您正在为所有后续 exec 资源定义 ( docs )指定默认值。这不是资源定义本身,因此无法应用资源排序,因此出现错误。

另一个错误是将单引号与变量结合使用。单引号字符串被解释为文字。换句话说,'$repo_dir'按字面意思解释为$repo_dirwhile"$repo_dir"被解释为 varialbe $repo_dir( docs ) 的内容。

希望这可以帮助,

祝你好运

于 2014-02-09T08:26:25.313 回答