大家好,
当我做傀儡申请时,我得到的错误:
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模块的一个function
但是,我想在定义资源之前执行文件资源
有人可以帮助我吗?
class mod :: princ(
文件{'/tmp/file.yaml':
确保=>文件,
owner =>'root',
group =>'root',
mode =>'0644',
source =>“puppet:///modules/othermod/file.yaml”,
before => Mod :: Cl [“title”],
} - >
Mod :: Cl {“title”:
tmp_file =>“/tmp/file.yaml”,
}
}
定义mod :: cl(
string$ tmp_file,
){
$ tmp = loadyaml(“$ tmp_file”)
$ tmp [var] .each | Integer $ i,Hash [String,String] $ var |
{
$大关= $ VAR [ '马克']
}
}
正如Dominic在他的评论中提到的, loadyaml函数是在编译时运行的。
如果您通过Puppet Master / Server和puppet agent运行Puppet,则在清单发送到客户端之前,服务器上会发生这种情况, 而不是客户端本身。
另外, loadyaml函数是在编译时运行的,而不是在执行 – 所以文件需要在Puppet运行之前存在。
我会问你为什么要用你的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'] } }