【问题标题】:Update node tags from Chef LWRP从 Chef LWRP 更新节点标签
【发布时间】:2014-04-04 11:10:49
【问题描述】:

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

【问题讨论】:

    标签: ruby chef-infra cookbook lwrp


    【解决方案1】:

    我发现了问题所在。

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

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

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

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

    这会成功的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多