【问题标题】:Puppet cron job -- ensure files existPuppet cron 作业——确保文件存在
【发布时间】:2017-11-22 20:52:13
【问题描述】:

我正在尝试使用以下结构设置 Puppet cron 作业:

file { '/usr/local/sbin/file.py':
  mode    => '0755',
  source  => 'puppet:///modules/file.py',
  require => File['/usr/local/sbin']
}

cron { "cronjob":
  require => "ALL_THE_FILES_ABOVE"
  command => "...command_to_run_script..."
  minute => '*/1'
}

以上所有内容都在一个文件run_script.pp 中。我想知道如何编码require => "ALL_THE_FILES_ABOVE" 部分。

谢谢!

【问题讨论】:

    标签: cron puppet puppet-enterprise


    【解决方案1】:

    根据您问题中提供的信息,我将假设run_script.pp 的内容是许多file 资源和列出的cron 资源。您声明您希望那里的cron 资源需要该类中的所有file 资源。基于此,这里有一个干净高效的解决方案。

    有一些复杂/高级的方法可以得到一个干净有效的解决方案,但最容易理解的是使用资源默认值:https://puppet.com/docs/puppet/5.3/lang_defaults.html

    有了这个,我们可以为该范围内包含的所有file 资源建立属性/值对默认值。这样可以更轻松地在 file 资源上使用 before 元参数:https://puppet.com/docs/puppet/5.3/metaparameter.html#before

    这简化了您班级中单线的解决方案:
    File { before => Cron['cronjob'] }

    请注意,此方法有一个警告,即如果您在此清单中声明、要求或包含一个类,则此默认值可能会扩展到该“影响区域”并导致循环依赖。在这种情况下,您应该使用每个表达式的资源默认属性:https://puppet.com/docs/puppet/5.3/lang_resources_advanced.html#per-expression-default-attributes

    【讨论】:

      【解决方案2】:

      你可以使用多个 require

      file{'path/foo':}
      file{'path/bar':}
      file{'~/foobar':
        require => [ File['path/foo'], File['path/bar'] ]
      }
      

      或者你可以使用排序箭头

      ->(排序箭头;连字符和大于号)- 在右侧资源之前应用左侧资源。

       file{'path/foo':} ->
         file{'path/bar':} ->
         file{'~/foobar':}
      

      这里有更多关于 Puppet 中 relationships and ordering 的信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        相关资源
        最近更新 更多