Chef infra 菜谱如何获得服务器标签的完整列表?

Chef infra 菜谱如何获得服务器标签的完整列表?,chef-infra,chef-recipe,rightscale,Chef Infra,Chef Recipe,Rightscale,菜谱如何获得服务器标签的完整列表 或 配方如何检查某个标签是否设置/存在 顺便说一句:标签?对我不起作用你可以通过node.tags或node[:tags]获取配方中某个节点的所有标签。因此,要检查是否存在特定标签,您需要: node[:tags].include? 'mytag' 要获得所有节点上所有标记的完整列表,必须使用搜索 search( :node, '*:*' ).collect(:tags).flatten.uniq 但是标记了吗mytag“实际上应该可以工作。显示您的代码。使

菜谱如何获得服务器标签的完整列表

配方如何检查某个标签是否设置/存在


顺便说一句:标签?对我不起作用

你可以通过
node.tags
node[:tags]
获取配方中某个节点的所有标签。因此,要检查是否存在特定标签,您需要:

node[:tags].include? 'mytag'
要获得所有节点上所有标记的完整列表,必须使用搜索

search( :node, '*:*' ).collect(:tags).flatten.uniq

但是
标记了吗mytag“
实际上应该可以工作。显示您的代码。

使用Chef标签时需要记住以下几点:

  • 不能在属性文件中使用它们。如果你可以的话,那就太棒了,但就是不行。这是您在尝试时将看到的:错误:未定义节点属性或方法“taged?”(在节点上)
  • 这可能在以后版本的Chef中得到修复,但是如果节点根本没有标记,那么在检查标记时会出现错误
  • 撇开这两件事不谈,我经常在食谱中使用它们,而且效果很好

    if tagged?('legacy')
      do legacy things
    end
    


    从你的食谱来看,这些类型的使用应该是有效的,没有问题。

    我和@IgorM有同样的问题。我的代码是
    if taged?(“au”)
    ,我得到一个错误:
    TemplateError(undefined method
    taged?”for…`我在Chef::Recipe中遇到了名为taged?的方法。我想检查一些标记是否为'active'。如何获取?您仍然可以访问它们,只是没有获取作为Recipe类成员的taged?方法。您必须像普通属性IE
    节点['tags']一样访问它们。包括?
    return if tagged?('ignore')