如何刷新 Chef Vault 的客户端列表并删除与搜索查询不匹配的节点?

How do I refresh a chef vault's client list and remove nodes not matched by the search query?

我有一个 chef_vault search_query role:myrole

我希望 Chef 服务器定期刷新库的搜索查询,添加新节点并删除 任何不再应用角色的节点。

为了测试这一点,将角色应用到节点并且 运行:

knife vault update mevault item1 -S "role:myrole" --mode client

该节点出现在保险库客户端列表中。 然后我从节点中删除了角色并再次 运行 命令,但该节点仍然出现在保险库客户端列表中。我也用 --clean 开关尝试了这个命令,但是没有从客户端列表中删除节点它似乎不适用于刷新命令。

带清理开关的保险库更新命令有效,但我必须将搜索查询硬编码到其中,我只想刷新已应用于保险库项目的搜索查询。

您必须 运行 knife rotate,这将更新共享密钥并删除所有与搜索查询不匹配的主机:

knife vault rotate keys VAULT ITEM

秘密本身使用共享密钥加密,所有节点都可以通过 ITEM_keys 数据包项对其进行解密。因此,需要轮换此密钥。

好的,所以我想我有一个可能的解决方案,但我不喜欢它。

clean 开关在刷新时不起作用,而带有 --clean 的更新命令会删除节点,如果不在命令中对查询进行硬编码,它不会添加新节点(我只想重新 运行保险库配置的查询)所以这就是我想要的:

knife vault update vault123 item1 --mode client --clean
knife vault refresh vault123 item1 --mode client

尽管删除整个客户端列表并重新添加它们我并不害怕,但我也担心这对许多节点来说有多安全。我可以安排并完成它,但我认为这可能很愚蠢。

或者我可以让脚本将搜索查询从保险库中提取出来,并用它来 运行 保险库更新。

有人可以建议更好的方法...