gpt4 book ai didi

ruby - 从 Chef LWRP 更新节点标签

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:57 25 4
gpt4 key购买 nike

对于给定的用例,我需要通过自定义 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 运行时),您将不会获得任何标签。

最佳答案

我发现了问题所在。

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

对我来说,标签在 chef-client 运行之间持续存在也很重要。

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

At the beginning of a chef-client run, all default, override, and automatic attributes are reset. The chef-client rebuilds them using data collected by Ohai at the beginning of the chef-client run and by attributes that are defined in cookbooks, roles, and environments. Normal attributes are never reset. All attributes are then merged and applied to the node according to attribute precedence. At the conclusion of the chef-client run, all default, override, and automatic attributes disappear, leaving only a collection of normal attributes that will persist until the next chef-client run.

这将使它:

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

关于ruby - 从 Chef LWRP 更新节点标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com