3

配方如何获得服务器标签的完整列表?

或者

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

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

4

2 回答 2

6

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

node[:tags].include? 'mytag'

要获取所有节点上所有标签的完整列表,您必须使用搜索。

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

tagged? 'mytag'应该实际工作。显示您的代码。

于 2012-12-29T12:20:47.627 回答
2

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

  1. 您不能在属性文件中使用它们。如果可以的话,那就太棒了,但它就是行不通。如果您尝试,您将看到以下内容:错误:未定义的节点属性或方法“已标记?” 在节点上'。
  2. 这可能会在更高版本的 Chef 中得到修复,但有时如果节点根本没有标记,则在检查标记时会出错。

除了这两件事,我在食谱中经常使用它们,而且效果很好。

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

或者

return if tagged?('ignore')

从你的食谱中,这些类型的用途应该没问题。

于 2016-03-24T19:11:12.303 回答