【发布时间】:2021-09-29 14:53:39
【问题描述】:
我在这里遇到了一个木偶难题。大多数从 Web 下载文件的资源,例如 wget 或 remote_file,都依赖以下两种方法之一来验证它们是否需要更新文件:来自服务器的 Last-Modified 标头或校验和。如果您要确保始终安装最新版本的文件,则校验和不实用,因为您每次都需要更新 puppet master 中的校验和,这正是我打算避免的。另一方面,如果您从中下载文件的服务器不分发它们,则 Last-Modified 标头是不可行的。另一方面,好的旧文件资源将支持下载和比较,但不幸的是不支持身份验证,因此我们也不能在我们的案例中使用它。
服务器发出的是仅包含实际文件的 md5 校验和的小文件。所以要走的路是下载校验和,将其存储在本地,然后在每次 puppet 运行时下载这几个字节,将它们与存储的内容进行比较,如果不同,则下载大文件。
这不是太复杂,所以我写了一个模块来概括操作。该模块运行良好,除了它有一个大问题:它总是发出更改通知。如果我调用模块并订阅其他步骤,我想要的是在 big 文件需要下载时发出的通知。但是,为此我需要首先下载小文件,这足以让 puppet 考虑状态已更改并通知订阅者,即使事实证明下载大文件是不必要的。我也尝试使用 Exec 下载文件,但它也在那里我无法控制它是否通知,只有它是否执行,并且必须执行它......
我需要的是抑制该通知,或者一种在不触发该通知的情况下下载文件的方法,但现在我开始认为这是不可能的。有人知道如何解决这个难题吗?
【问题讨论】:
标签: puppet