Ruby 从Chef LWRP更新节点标记
对于给定的用例,我需要通过自定义LWRP更新节点的标记。我尝试了两种方法:Ruby 从Chef LWRP更新节点标记,ruby,chef-infra,cookbook,lwrp,Ruby,Chef Infra,Cookbook,Lwrp,对于给定的用例,我需要通过自定义LWRP更新节点的标记。我尝试了两种方法: 使用“标记”/“untag”。这将产生以下错误: No resource or method named `tag' for ... 使用节点[:标记].concat()。这是可行的,但标记不会持久存在,因此我无法将其用于搜索 这里有我遗漏的东西吗 谢谢 编辑:实际上,问题是:甚至可以从提供程序更新节点属性吗 EDIT2:这样就可以正确设置标记: tags = node[:tags] tags.concat(
- 使用“标记”/“untag”。这将产生以下错误:
No resource or method named `tag' for ...
- 使用
。这是可行的,但标记不会持久存在,因此我无法将其用于搜索节点[:标记].concat()
tags = node[:tags]
tags.concat(new_tags)
node.override[:tags] = tags
但是,标记在每次chef客户端运行时都会被重置,因此,如果在包含这些新标记之前(在第二次chef客户端运行时)检查它们是否存在,则不会得到任何标记。我发现了问题所在 总而言之:最初的问题是,我无法在LWRP的提供者中使用chef的标记/取消标记方法(可能有办法,但我没有找到),因此我选择修改节点上的“标记”属性,该属性保存所有标记 对我来说,标记在chef客户端运行之间保持也很重要 实现这一点的方法是将属性类型设置为
normal
,根据chef docs,该属性永远不会重置:
在chef客户端运行开始时,将重置所有默认、覆盖和自动属性。厨师长客户端使用Ohai在厨师长客户端运行开始时收集的数据以及在烹饪书、角色和环境中定义的属性来重建它们。正常属性永远不会重置。然后根据属性优先级合并所有属性并应用于节点。在chef客户端运行结束时,所有默认、覆盖和自动属性都将消失,只留下一组正常属性,这些属性将一直保留到下一次chef客户端运行
这将使它:
tags = node[:tags]
tags.concat(new_tags)
node.normal[:tags] = tags