大家好,
当我执行 puppet apply 时,出现错误:
Warning: Scope(Mod::Cl[title]): Can't load '/tmp/file.yaml' File does not exist!
Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value.
我指定 loadyaml 是 stdlib 模块的一个函数
但是,我想在定义资源之前执行文件资源
有人能帮助我吗?
类 mod::princ ( 文件 {'/tmp/file.yaml': 确保 => 文件, 所有者 => 'root', 组 => '根', 模式 => '0644', 源 => “puppet:///modules/othermod/file.yaml”, 之前 => Mod::Cl["title"], }-> Mod::Cl{ “标题” : tmp_file => "/tmp/file.yaml", } } 定义 mod::cl ( 字符串 $tmp_file, ){ $tmp = loadyaml(“$tmp_file”) $tmp[var].each |整数 $i,哈希[字符串,字符串] $var| { $mark=$var['马克'] } }
答案1
正如 Dominic 在他的评论中提到的,该loadyaml
函数在编译时运行。
如果你通过 Puppet Master/Server 运行 Puppet puppet agent
,则在将清单发送到客户端之前,这发生在服务器上,不是在客户端本身上。
此外,该loadyaml
函数运行于编译, 不是执行- 因此该文件需要存在前木偶戏开始了。
我想问一下你为什么对你的 Puppet 代码采用这种方法——你并没有真正解释代码的用途,或者你想要的最终状态是什么样的。
您可以使用 Hiera 获得相同的结果。
hieradata/common.yaml
---
mod::princ::data:
entry:
foo: bar
yrtne:
oof: rab
模块/mod/清单/princ.pp
class mod::princ (
Hash $data
) {
$data.each |Integer $i, Hash $elem, $var | {
$mark=$var['Mark']
}
}