Ruby 从Chef 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(

对于给定的用例,我需要通过自定义LWRP更新节点的标记。我尝试了两种方法:

  • 使用“标记”/“untag”。这将产生以下错误:

    No resource or method named `tag' for ...
    
  • 使用
    节点[:标记].concat()
    。这是可行的,但标记不会持久存在,因此我无法将其用于搜索

这里有我遗漏的东西吗

谢谢

编辑:实际上,问题是:甚至可以从提供程序更新节点属性吗

EDIT2:这样就可以正确设置标记:

 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