无法找到主服务器中颗粒存储的确切路径

43次阅读
没有评论

问题描述

在尝试从系统中完全移除颗粒(grains)。他有一个主服务器(master)和一个从服务器(minion,ID为minion1)的设置。他正在执行以下命令以列出所有颗粒:

salt minion1 grains.ls

现在,他删除了主服务器中颗粒的缓存文件data.p,路径如下:

路径:/var/cache/salt/master/minions/minion1/data.p

然后,他没有运行salt_sync或任何其他同步命令,又再次执行了以下命令:

salt minion1 grains.ls

然而,结果与之前相同(颗粒仍然存在)。他想知道颗粒到底存储在哪里,以及如何删除它们?

解决方案

请注意以下操作注意版本差异及修改前做好备份。
要理解颗粒(grains)的存储方式和删除方法,需要知道以下几点:
1. 颗粒是在从服务器(minion)启动时收集的内置信息。
2. 颗粒是主服务器(master)根据从服务器提供的信息生成的。
3. 颗粒的部分信息被存储在主服务器的缓存中。
在SaltStack中,你无法彻底删除内置颗粒,但可以覆盖它们的值,也可以删除自定义颗粒。以下是解决方案的具体步骤:

覆盖内置颗粒值

你可以通过在从服务器的配置文件/etc/salt/grains中将特定的颗粒值设置为null来覆盖内置颗粒。例如,要将osfinger颗粒的值覆盖为空,可以执行以下步骤:
1. 打开从服务器的配置文件/etc/salt/grains
2. 将以下内容添加到文件中:
osfinger: null
3. 保存文件并退出。
请注意,这将覆盖osfinger颗粒的值为空。你可以对其他内置颗粒采取类似的操作。但需要注意,一些核心颗粒对Salt的正确功能是必需的,例如,pkg模块的提供程序依赖于它们。

删除颗粒

如果你希望删除某个自定义颗粒,可以使用SaltStack的grains execution module来实现。以下是如何删除自定义颗粒的步骤:
1. 在从服务器上执行以下命令以删除指定颗粒,例如customgrain
salt minion1 grains.delval customgrain
这将从颗粒中删除customgrain
请注意,即使你清除了主服务器上的缓存,当需要颗粒且缓存中没有时,它们将自动同步。内置颗粒无法彻底删除。如果你仍然看到缓存被清除后颗粒仍存在的情况,这是正常现象。自定义颗粒的删除可以使用上述grains.delval命令。

结论

颗粒是SaltStack中重要的信息组成部分,内置颗粒不能被完全删除,但可以覆盖其值。缓存中的颗粒会在需要时自动同步。要删除自定义颗粒,可以使用grains.delval命令来实现。请在执行这些操作前做好备份,并确保你理解操作的含义。

正文完