繁体   English   中英

仅在文件已更改时运行p资源类型

[英]run puppet resource types only when file has changed

我觉得这是一个非常常见的情况,但是我还没有找到满足我需求的解决方案。 我想创建类似下面的内容。 (很遗憾, set_variable_only_if_file_was_changed不存在)

file { 'file1':
      path => "fo/file1",
      ensure => present,
      source => "puppet:///modules/bar/file1",
      set_variable_only_if_file_was_changed  => $file_change = true
}

if $file_change{
    file{'new file1'
        ...
    }
    exec{'do something1'
        ...
    }
    package{'my package'
        ...
    }
} 

我已经看到如何使用refreshonly => true抑制exec,但是使用文件似乎更困难。 我想避免将代码放入.sh文件并通过exec执行它。

木偶没有您描述的功能。 响应刷新事件的资源以适合其类型的方式进行响应; 没有机制来定义现有资源的自定义刷新行为。 当然,无法根据应用其他资源的结果来指示将哪些资源包括在节点的目录中(正如您的伪代码所暗示的那样),因为目录是在应用目录中的任何内容之前完全构建的。

此外,如果您要像许多人一样具有相当丰富的脚本编写背景来学习Puppet,那么这并没有您想像的那么麻烦。 考虑脚本编写的人需要对Puppet进行心理调整,因为Puppet的DSL绝对不是脚本语言。 而是一种用于描述机器状态描述(目录)构造的语言。 重要的是要掌握此类目录描述机器目标状态的详细信息, 而不是将其从当前状态转换为其他状态所需的步骤。 (即使以这种方式使用, Exec可能是最有效的。)很少能够根据其标识和初始状态来确定机器的预期状态。 即使很难做到这一点也不常见。

如何实现所需的特定配置取决于细节。 通常,答案在于用户定义的事实。 例如,您提供的事实是,您可以在目录构建期间进行询问以评估该文件是否被更改,并适当地调整目录详细信息,而不是捕获目录应用程序期间给定文件是否已更改。 有时您一开始就不需要这样的测试,因为Puppet仅在需要更改给定资源时才对它进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM