仅将自定义事实部署到给定模块的客户端 运行
Deploying a custom fact only to clients running a given module
我正在尝试为 linux 服务器编写一个自定义事实,它将为我提供特定文件夹下的所有文件夹。问题是我只需要将它部署在客户端 运行 包含事实的模块——它不能部署到连接到同一主机的其他客户端。
有办法吗?
Is there a way to do this?
不,不是善意自定义事实。插件,包括自定义事实,在目录构建之前同步——实际上,在任何实际目录请求之前。这是必要的,至少对于自定义事实而言,否则这些事实的值将无法用于目录构建。
因为插件是在目录构建范围之外同步的,pluginsync 无法知道给定节点的目录是否包含任何 类 或来自任何特定模块的资源,因此不能使用此类信息来过滤插件。当前的 Puppet 确实付出了相当大的努力来正确识别节点的环境以同步正确的插件版本,但充其量只能告诉您节点是否 可能 使用给定的模块,而不是是否会的。
您可以使用通过 File
资源管理的外部事实大致完成您描述的内容,但在这种情况下,您直接负责确定是否管理该文件,并且每次客户发布目录时请求,它将使用 previous Puppet 运行 提供的事实定义。如果您可以解决引导问题并且您仔细管理事实实施更改的推出,那可能没问题。
您的总体目标可能会通过 confining 您的事实实施来实现。这不会阻止它被部署,但它可以阻止对事实进行评估或报告。
我正在尝试为 linux 服务器编写一个自定义事实,它将为我提供特定文件夹下的所有文件夹。问题是我只需要将它部署在客户端 运行 包含事实的模块——它不能部署到连接到同一主机的其他客户端。
有办法吗?
Is there a way to do this?
不,不是善意自定义事实。插件,包括自定义事实,在目录构建之前同步——实际上,在任何实际目录请求之前。这是必要的,至少对于自定义事实而言,否则这些事实的值将无法用于目录构建。
因为插件是在目录构建范围之外同步的,pluginsync 无法知道给定节点的目录是否包含任何 类 或来自任何特定模块的资源,因此不能使用此类信息来过滤插件。当前的 Puppet 确实付出了相当大的努力来正确识别节点的环境以同步正确的插件版本,但充其量只能告诉您节点是否 可能 使用给定的模块,而不是是否会的。
您可以使用通过 File
资源管理的外部事实大致完成您描述的内容,但在这种情况下,您直接负责确定是否管理该文件,并且每次客户发布目录时请求,它将使用 previous Puppet 运行 提供的事实定义。如果您可以解决引导问题并且您仔细管理事实实施更改的推出,那可能没问题。
您的总体目标可能会通过 confining 您的事实实施来实现。这不会阻止它被部署,但它可以阻止对事实进行评估或报告。