我们有几台服务器,具有常见的角色和配方组合。
但是我们发现了一个问题:从服务器中删除角色后(具体来说:从其运行列表中删除并重新配置),随后通过刀搜索和配方对该角色的搜索仍会返回服务器。
这是为什么?检查节点(刀节点显示)时,角色不在“角色”列表中,因此结果对我来说没有多大意义。
答案1
您是否已验证角色在重新配置后不再出现在节点的 JSON 中?重新配置时,您可能会覆盖服务器存储的运行列表(可能已覆盖/etc/chef/firstboot.json
),并且此运行列表会保留回服务器,即使您之前已将其删除。
答案2
经过很长一段时间,我们发现了 Chef 的一个非常具有误导性的功能,即搜索所有属性,无论深度级别如何,而不考虑名称是否“特殊”。
这意味着如果一台机器具有roles = ['smartpants']
,并且具有属性node[:foo][:bar][:roles] = 'fancypants'
,则 的搜索结果roles:fancypants
将包括该机器。
在某些情况下,拥有这样的结构是合理的,但如果不了解这些细节,就会导致大量的麻烦。