依赖于其他参数的默认参数

Default parameters that rely on other parameters

我为 chruby 编写了一个模块,Ruby 版本管理器。这适用于 Puppet v3,但我刚开始使用 Puppet v4,$version 参数没有插入到 $source_url 字符串中。

class chruby(
  $version,
  $source_url = "https://github.com/postmodern/chruby/archive/v${version}.tar.gz",
) {

我总是想要一个版本通过,我可能想要一个源 url 通过,但通常不会 - 是否更改了不再允许的规则,我怎样才能让它工作v4?我试过这个:

  unless $source_url {
    $source_url = "https://github.com/postmodern/chruby/archive/v${version}.tar.gz"
  }

在 class 主体中,但它也不进行插值。我已经使用 notice 检查了 $version。我无法从文档中找到如何执行此操作:

我已经开始使用 Hiera 做一些事情,并且理解这个 可能 不需要默认设置,但我上周才开始使用它,所以我不清楚在那上面,但仍然想了解为什么它从 v3 更改为 v4。

任何帮助或见解将不胜感激。

使用另一个变量:

class chruby(
  $version,
  $source_url = undef,
) {
  $actual_source_url = $source_url ? {
    undef   => "https://github.com/postmodern/chruby/archive/v${version}.tar.gz",
    default => $source_url,
  }
  notice($actual_source_url)
}