我已经编写了一个自定义资源sshd_allow_groups
,它是动作更改了一些节点的属性,并且这些属性用于创建/etc/sshd_config
的默认配方(托管自定义资源)的模板。但是,由于自定义资源通常是从其他食谱中调用的,因此我无法保证在对属性进行更改后将调用模板资源,从而产生需要2个厨师运行来获取希望的变化。CHEF:将资源设置为在调用另一个(自定义)资源时结束运行一次
我正在寻找一种方法来触发模板资源后资源被调用,并在最后运行(以防万一资源被调用多次)。 notifies
不起作用,因为模板的操作不是:nothing
,也不应该是,因为如果对于某个不需要资源的节点,模板仍然需要写入。
我的自定义资源:
resource_name :sshd_allow_groups
property :group, String, name_property: true
default_action :append
action :append do
currently = node['tom-ssh']['allow_groups']
if currently
if !currently.include?(group)
node.normal['tom-ssh']['allow_groups'] = currently | [group]
end
else
node.normal['tom-ssh']['allow_groups'] = [group]
end
end
action :remove do
currently = node['tom-ssh']['allow_groups']
if currently && currently.include?(group)
node.normal['tom-ssh']['allow_groups'] = currently - [group]
end
end
另一个配方应该说是这样的:
sshd_allow_groups "bob" do
action :append
end
只是通知从您的自定义资源调用延迟,它将最终呈现模板两次,但仍然在最后得到正确的文件。也就是说,除非您确切知道自己在做什么,否则不要使用正常水平,否则当您希望从组中删除某人时会发生意外。总而言之,这听起来像一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你要求修复一个无效的解决方案你真正的问题。 – Tensibai
'通知'不起作用(我最终认为我需要使用它来修复:http://stackoverflow.com/questions/21176576/how-to-i-get-a-chef-custom-lwrp-到实现 - 通知 - 和不-IF)。我真正想要发生的事情不是完全需要“通知”,所以资源本身会照顾(更干的代码)。为什么你认为这是一个XY问题?你认为我的X是什么? –
据我所知,你希望管理sshd_config文件。你在自定义资源和其他地方更新属性和模板之间进行分割,如果目标是缓解属性更新,然后去找一个辅助库,它将在编译时可用于每一本烹饪书,修复你的编译vs收敛实际问题,其中属性计算得太晚。 – Tensibai