我如何评估不是在每次木偶运行中的课程?

Zor*_*che 3 puppet

我想要一种方法,它只在特定时间每天评估一次特定课程。现在我正在从 cron 运行我的 puppet 代理,但我想将其更改为作为守护程序运行,或者更频繁地运行。增加频率的障碍是有一个类需要大约 4 分钟来处理,并且不需要经常发生。我试图找到一些方法来每天只从 cron 评估一次特定的类。

是否有一种简单的方法可以让我设置环境变量 ( FOO=bar;puppet agent ..),或将命令行选项 ( puppet agent .. --foo bar) 添加到 crontab 中,这将成为我可以在清单中使用以包含或不包含类的事实?

class foobar {
  if 'bar' == $::foo {
    # do the slow stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

Dom*_*eal 7

一个时间表喜欢它的声音会提供你在找什么。首先,您创建一个计划资源,用于指定事情何时可以运行以及在给定时间段内运行多少次。

schedule { "slow":
  range  => "1 - 5",
  period => daily,
  repeat => 1,
}
Run Code Online (Sandbox Code Playgroud)

上面的示例将仅在凌晨 1 点和凌晨 5 点以及最多一次评估或运行。您可以删除该range参数,它会在一天中的任何时间运行,但同样只能运行一次。

在资源上,然后指定schedule 元参数以将它们链接到上述计划:

exec { "example":
  command  => "/usr/bin/foo",
  unless   => "/usr/bin/bar",
  schedule => "slow",
}
Run Code Online (Sandbox Code Playgroud)

当您使用 运行 Puppet 时--debug,如果它已经被评估了给定的次数,或者范围不适用,您现在将看到以下内容:

debug: /Stage[main]//Exec[example]: Not scheduled
Run Code Online (Sandbox Code Playgroud)

如果你有一些资源,你可以在你限制的类中使用资源默认值来影响相同类型的所有资源:

Exec {
  schedule => "slow",
}
Run Code Online (Sandbox Code Playgroud)

您需要为每种资源类型执行此操作 - Exec、File、Augeas 等。

关于改进这一点的几个注意事项:

  • 我不知道如何将其应用于班级中的所有类型的资源
  • schedule元参数应用于类似乎不起作用,可能值得提出错误