Puppet - 在第一次迭代后依赖性检查不起作用

时间:2015-10-09 06:57:20

标签: loops dependencies puppet require

我正在尝试使用Puppet来修改文件内容,但如果文件不存在,我将跳过并且什么也不做。但是,我发现依赖性检查只在第一次迭代中起作用,但在那之后,它似乎不起作用。这是我的傀儡清单:

class tibco::hawk_gc_tuning {

  $domain_array = split($domain_list, '\n')
  $hawkgc = hiera('hawk_gc_arg','xxxxxx')

  $domain_array.each |$tibcodomain| {

  notify { "Now in : ${tibcodomain} ": }

    exec {"check_presence_${tibcodomain}":
      path        => "/usr/bin:/usr/sbin:/bin",
      command     => 'true',
      onlyif      => "test -e /home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra"
    }

    file_line { "change $tibcodomain hawk agent gc arg comment":
      require     => Exec["check_presence_${tibcodomain}"],
      path        => "/home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra",
      line        => '# tuning for hawkagent',
      match       => '^# tuning for hawkagent',
    }->
    file_line { "change $tibcodomain hawk agent gc arg":
      path        => "/home/tibco/tra/domain/${tibcodomain}/hawkagent_${tibcodomain}.tra",
      line        => "${hawkgc}",
      match       => '^java.extended.properties=-XX\\\\:MaxPermSize\\\\=.*',
    }
  }
}

以下是我的代码输出:

注意:现在:A 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / Notify [Now in:A] / message:defined' message' as'现在:A' 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / Exec [check_presence_A] / return:已成功执行 注意:现在在:B 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / Notify [Now in:B] / message:defined' message' as'现在:B' 错误:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改B hawk agent gc arg comment]:无法评估:没有这样的文件或目录 - /home/tibco/tra/domain/B/hawkagent_B.tra 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改B鹰代理gc arg]:依赖File_line [更改B鹰代理gc arg评论]有失败:true 警告:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改B hawk agent gc arg]:由于依赖关系失败而跳过 注意:现在在:C 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / Notify [Now in:C] / message:defined' message' as'现在:C' 错误:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改C hawk agent gc arg comment]:无法评估:没有这样的文件或目录 - /home/tibco/tra/domain/C/hawkagent_C.tra 注意:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改C鹰派代理gc arg]:依赖File_line [更改C鹰代理gc arg评论]有失败:true 警告:/ Stage [main] / Tibco :: Hawk_gc_tuning / File_line [更改C hawk agent gc arg]:由于依赖关系失败而跳过 注意:完成的目录在1.06秒内运行

如上所示,A,B,C都不存在,但只有第一个A给出正确的结果并跳过file_line资源。有人可以给我一些关于这个问题的提示吗?

1 个答案:

答案 0 :(得分:1)

您的设计基于一种常见的误解。

Puppet不是脚本语言。不要试图通过滥用exec资源类型来对目录中的查询建模。 Puppet清单需要根据编译期间出现的信息建模一个相干目标状态。如果目标状态取决于代理系统上是否存在某个文件,则需要使用custom fact将此信息传递给主服务器。

特别是,您的exec测试无法帮助您。当文件存在时,Puppet会尝试通过调用true命令来同步它,是的。这将成功。但是,如果文件不存在,Puppet假定exec根本不需要同步。在这种情况下,依赖资源就可以开始了。