Puppet 资源依赖

Puppet 资源依赖

大家好,

当我执行 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']
  }

}

相关内容