传递和更新Chef节点属性

时间:2014-11-25 11:33:12

标签: chef

我正在考虑为我们在烹饪书中使用的一些常用功能创建LWRP的选项。有没有办法传递节点属性并在LWRP中更新它?

第二个选项是创建库函数。如果调用者将一个节点属性传递给库函数,那么如何在函数中设置一个新值?

非常感谢任何指向这些的指示。

1 个答案:

答案 0 :(得分:1)

真的需要更多细节才能肯定地回答。

如果您只是阅读和设置属性

然后,您将需要使用库函数而不是资源/提供程序。您不必“传递”任何内容,因为node对象已在两个库和LWRP中可用。您可以像对node['path']['to']['attribute']一样使用相同的方式访问属性,并将其设置为与node.default['path']['to']['attribute'](或.normal.override等配方相同的属性。如果你想要真正的幻想,并使方法变量,你可以做这样的事情。

*未经测试的代码(获取属性的路径,并将该属性设置为块的返回值,将属性的当前值传递到块中)

def check_and_set(*attr_path, &check)
  current, parent = node
  leaf = nil
  current = attr_path.reduce do |current, branch| 
    current[branch]
    parent = current
    leaf = branch 
  value = check.yield(current)
  parent[leaf] = value
end

如果您正在使用值

执行某些操作

如果您不只是阅读设置,那么您可能需要LWRP。上述所有内容仍然适用。 node对象仍然可用,您可以像在配方中一样阅读和写入。