2

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

  • 使用“标签”/“取消标签”。这会产生错误:

    No resource or method named `tag' for ...
    
  • 使用node[:tags].concat(<new_tags_array>). 这有效,但标签不会持续存在,所以我不能用它来搜索。

我在这里缺少什么吗?

谢谢

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

EDIT2:所以这正确设置了标签:

 tags = node[:tags]
 tags.concat(new_tags)
 node.override[:tags] = tags

但是,标签在每次运行 chef-client 时都会重置,因此如果您在包含这些新标签之前检查它们是否存在(在第二次 chef-client 运行中),您将不会获得任何标签。

4

1 回答 1

0

我发现了问题所在。

总结一下:最初的问题是我无法在 LWRP 的提供者中使用厨师的标签/取消标签方法(可能有办法做到这一点,但我没有找到任何方法),所以我选择修改'标签' 节点上的属性,它包含所有标签。

对我来说,标签在厨师客户端运行之间持续存在也很重要。

实现这一点的方法是将属性类型设置为normal,根据厨师文档,它永远不会重置:

在 chef-client 运行开始时,所有默认、覆盖和自动属性都被重置。厨师客户端使用 Ohai 在厨师客户端运行开始时收集的数据以及食谱、角色和环境中定义的属性来重建它们。普通属性永远不会重置。然后根据属性优先级合并所有属性并应用于节点。在 chef-client 运行结束时,所有默认、覆盖和自动属性都会消失,只留下一组正常属性,这些属性将持续到下一次 chef-client 运行。

这将使它:

    tags = node[:tags]
    tags.concat(new_tags)
    node.normal[:tags] = tags
于 2014-03-03T15:24:42.550 回答