Puppet 在Hiera里面做基础数学

Puppet 在Hiera里面做基础数学,puppet,hiera,Puppet,Hiera,我试图在hiera中根据自定义事实和基本模设置crontab的工作日,但我甚至不知道这是否可行 我想做一些类似的事情: cron-job: command: "do something" user: myuser hour: "%{::instance}" minute: "%{::instance}" weekday: "%{::instance}" % 7 甚至可以这样做吗?不,这是不可能的。请记住,YAML只是数据,而不是代码

我试图在hiera中根据自定义事实和基本模设置crontab的工作日,但我甚至不知道这是否可行

我想做一些类似的事情:

  cron-job:
    command:  "do something"
    user:    myuser
    hour:    "%{::instance}"
    minute:  "%{::instance}"
    weekday: "%{::instance}" % 7

甚至可以这样做吗?

不,这是不可能的。请记住,YAML只是数据,而不是代码


Hiera确实提供了一些使用插值标记的转换,但只有您可以使用它们,没有算术。

我不确定是否遵循了用例,但您可能可以使用
inline\u epp
inline\u模板
使其看起来像此功能存在

例如:

#在实际使用中,这将是hiera查找的结果
$simple\u lookup\u result='9%7'
$simple\u evaluated=inline\u模板(“”)
exec{'simple':
command=>“/bin/echo$simple\u”,
logoutput=>true,
}
#再一次,希拉。。。
$complex_lookup_result='sprintf(“值为%i”,9%7)'
$complex\u evaluated=inline\u模板(“”)
exec{“complex”:
command=>“/bin/echo$complex\u”,
logoutput=>true,
}
结果是:

$ puppet apply eval.pp 
Notice: Compiled catalog for box in environment production in 0.06 seconds
Notice: /Stage[main]/Main/Exec[simple]/returns: 2
Notice: /Stage[main]/Main/Exec[simple]/returns: executed successfully
Notice: /Stage[main]/Main/Exec[complex]/returns: The value is 2
Notice: /Stage[main]/Main/Exec[complex]/returns: executed successfully
Notice: Applied catalog in 0.05 seconds
请记住,Hiera可以插值或,也可以在
inline_epp
inline_模板
最终将评估的代码内进行查找


N.B.这就是一个例子,除非您信任您的用户并且非常喜欢头痛,否则您不应该将Hiera输入传递到shell命令。

遗憾的是,我就是这么想的。我还尝试使用插值从列表中查找,但这也不起作用。希望类似于:weekday:“%hiera('my.lookup.val.)${::instance}”,这样hiera函数将查找实例01的my.lookup.val.01,但这也不起作用。我需要在我的hiera配置中使用实例,或者使用一个我猜是的模块。创建定义的类型,接受hiera的原始数据作为参数,并为您执行所需的转换。是的,我这样做是为了其他一些事情。这是一个我希望避免的跳越障碍。我来了。谢谢你的建议。将数据解释为代码——可能会出现什么问题?我更喜欢Felix在对其答案的评论中提出的方法:将逻辑放在定义的类型中,用Hiera数据填充其参数。现在,在Puppet 5中,这比编写答案时可用的版本更容易。这出现在使用Hiera公式的Google结果中,所以我想分享这项技术。示例用例:假设我想根据默认公式(例如RHEL的大小调整建议)调整交换分区的大小,但应用程序组对使用哪个公式,甚至基于什么因素都有自己的想法。在仍然使用Hiera驱动配置的情况下,我想不出一种方法来完全概括它,但我愿意接受建议。我没有听到任何不能用数据作为数据实现的事情(尽管可能更多)我不确定如何设置基本级别的默认值并让不同的配置层覆盖它,除非您使用Hiera来驱动特定主机上使用的是哪个目的定义类型。当然,当您可以提出可能的参数时,这是不合适的。但我认为Puppet模块是一个API,Hiera数据是该API的输入。有时,您真的希望使用回调函数,而不是告诉使用者子类化。