目录编译期间何时填充 puppet class 参数
When are puppet class parameters populated during catalogue compilation
我对 class 参数的明显不确定行为有疑问。
在某些运行中,class 中使用的 a 已定义并包含预期值,而在其他运行中,变量根本不存在于范围中。
$ puppet config print ordering --environment test
title-hash
关于人偶大师,所以我不认为这是资源排序的功能(尽管这似乎是最有可能的原因)。
$ puppet --verison
3.7.4
我正在推进升级,但我需要解决这个版本(除非它是一个傀儡错误)
我的模块看起来像...
$ cat mymodule/manifests/init.pp
class mymodule () {
class { "mymodule::install":
require => Class['mymodule::config'],
}
}
$ cat mymodule/manifests/config.pp
class mymodule::config (
$param1
) {
notify{"config -- param1: ${param1}": }
}
$ cat mymodule/manifests/install.pp
class mymodule::install () {
$local_var = $mymodule::config::param1
notify{"install -- local_var: ${local_var}": }
file {'/tmp/test_template.txt':
content => template('mymodule/mytemplate.erb')
}
}
$ cat mymodule/templates/mytemplate.erb
value = @local_var
All the things
<%= scope.to_hash.to_yaml %>
模块 class 和配置 class 都包含在 Foreman ENC 的一个节点中。我已经验证了为节点生成的 YAML,它看起来是正确的。
config和install中的notify资源class总是先打印config,再打印install,参数总是显示在config通知中,但有时只出现在install通知中
你require => Class['mymodule::config']
,但这对解析器读取你的清单的顺序没有影响。这就是这里的问题。
您需要确保 class mymodule::config
在查找参数值之前 已声明。
如果您依赖类似资源的声明语法而不是通过 Hiera 自动查找参数,那么实现起来可能会很复杂。
你描述中的随机性让我认为你在某种程度上依赖于哈希。 Foreman 是否在散列结构中传递 class 名称?如果您的 Ruby 是 1.8.x,您可能希望尝试更新的版本(稳定的哈希键顺序),尽管这不足以缓解您的问题。
有关求值顺序主题的全面概述,请阅读 Henrik Lindberg 的文章 Getting your Puppet Ducks in a Row。
我对 class 参数的明显不确定行为有疑问。
在某些运行中,class 中使用的 a 已定义并包含预期值,而在其他运行中,变量根本不存在于范围中。
$ puppet config print ordering --environment test
title-hash
关于人偶大师,所以我不认为这是资源排序的功能(尽管这似乎是最有可能的原因)。
$ puppet --verison
3.7.4
我正在推进升级,但我需要解决这个版本(除非它是一个傀儡错误)
我的模块看起来像...
$ cat mymodule/manifests/init.pp
class mymodule () {
class { "mymodule::install":
require => Class['mymodule::config'],
}
}
$ cat mymodule/manifests/config.pp
class mymodule::config (
$param1
) {
notify{"config -- param1: ${param1}": }
}
$ cat mymodule/manifests/install.pp
class mymodule::install () {
$local_var = $mymodule::config::param1
notify{"install -- local_var: ${local_var}": }
file {'/tmp/test_template.txt':
content => template('mymodule/mytemplate.erb')
}
}
$ cat mymodule/templates/mytemplate.erb
value = @local_var
All the things
<%= scope.to_hash.to_yaml %>
模块 class 和配置 class 都包含在 Foreman ENC 的一个节点中。我已经验证了为节点生成的 YAML,它看起来是正确的。
config和install中的notify资源class总是先打印config,再打印install,参数总是显示在config通知中,但有时只出现在install通知中
你require => Class['mymodule::config']
,但这对解析器读取你的清单的顺序没有影响。这就是这里的问题。
您需要确保 class mymodule::config
在查找参数值之前 已声明。
如果您依赖类似资源的声明语法而不是通过 Hiera 自动查找参数,那么实现起来可能会很复杂。
你描述中的随机性让我认为你在某种程度上依赖于哈希。 Foreman 是否在散列结构中传递 class 名称?如果您的 Ruby 是 1.8.x,您可能希望尝试更新的版本(稳定的哈希键顺序),尽管这不足以缓解您的问题。
有关求值顺序主题的全面概述,请阅读 Henrik Lindberg 的文章 Getting your Puppet Ducks in a Row。