木偶资源依赖

大家好,

当我做傀儡申请时,我得到的错误:

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'] } }