在傀儡中testing当前date/时间以实现临时更改的好方法是什么?
例如,我们刚刚遇到了NTP的安全问题,Debian花了一段时间才发布了更新。 将ntpclosures一段时间似乎是最简单的。
service { 'ntp': # remember to re-enable this after ntp is secured. CVE-XXXXXXXXXX ensure => "stopped", ... }
所以这需要记住回来并将其改回。 我想要做的就是使依赖于select器的ensure属性的值在运行时testingdate。
任何人都可以提出一个很好的方法来做到这一点
我可以想象,通过puppetparsing器可以实现一个function,如果有人已经写了这个function,那将是非常好的,但是如果你没有额外的模块就可以做到这一点,就可以得到奖励。
service { 'ntp': ensure => date_is_after("23 Dec 2014"): { true => "running", false => "stopped" } ... }
对我来说,基于当前版本的ntp包进行的testing也会非常优雅,但是我也不确定你会如何在傀儡中这样做。
要在master上使用这个date,你可以为date编写一个简单的shell包装,并使用generate函数从清单中调用它。
$ echo -e '#!/bin/bash\n/bin/date -I\n' >/tmp/dater $ chmod 755 /tmp/dater $ bundle exec puppet apply -e 'notice(generate("/tmp/dater"))' Notice: Scope(Class[main]): 2014-12-23
你可以把结果转换成一个variables,并发疯。
$now = generate("/tmp/dater")
由于Puppet不会像bash或awk那样使用<和>来比较string,所以您可能希望使用date +%s ,以便在数字上将时间戳与您定义的任何目标date进行比较。
顺便说一句,我个人不会执行这样的事情。 它很有可能摔倒在你的脚上。 考虑定义一个全局的Hiera键,在你的日历提醒你这样做后,你可以手动翻页。 不要把你的友好的惊喜build成木偶。
为了能够获得当前版本的NTP包,您需要编写一个自定义事实,通过pluginsync将其推送到每个托pipe主机,并通过查询本地包pipe理器来识别该值。 请参阅https://docs.puppetlabs.com/facter/2.3/custom_facts.html来编写自定义事实。
然后,可以使用清单中的versioncmp()函数,使用该事实的值有条件地启用或禁用NTP守护程序,并将其与包含修复程序的已知正确版本的NTP进行比较。
你可以写一个这样的外部事实:
#!/bin/bash echo "date=$(date '+%Y-%m-%d')"
分发它可以把它放到一个新的模块(例如modules/date/facts.d/date )。
然后你可以做
if $::date > "2016-05-15" { ... }