【问题标题】:Puppet download a file without triggering a change notificationPuppet 下载文件而不触发更改通知
【发布时间】:2021-09-29 14:53:39
【问题描述】:

我在这里遇到了一个木偶难题。大多数从 Web 下载文件的资源,例如 wget 或 remote_file,都依赖以下两种方法之一来验证它们是否需要更新文件:来自服务器的 Last-Modified 标头或校验和。如果您要确保始终安装最新版本的文件,则校验和不实用,因为您每次都需要更新 puppet master 中的校验和,这正是我打算避免的。另一方面,如果您从中下载文件的服务器不分发它们,则 Last-Modified 标头是不可行的。另一方面,好的旧文件资源将支持下载和比较,但不幸的是不支持身份验证,因此我们也不能在我们的案例中使用它。

服务器发出的是仅包含实际文件的 md5 校验和的小文件。所以要走的路是下载校验和,将其存储在本地,然后在每次 puppet 运行时下载这几个字节,将它们与存储的内容进行比较,如果不同,则下载大文件。

这不是太复杂,所以我写了一个模块来概括操作。该模块运行良好,除了它有一个大问题:它总是发出更改通知。如果我调用模块并订阅其他步骤,我想要的是在 big 文件需要下载时发出的通知。但是,为此我需要首先下载小文件,这足以让 puppet 考虑状态已更改并通知订阅者,即使事实证明下载大文件是不必要的。我也尝试使用 Exec 下载文件,但它也在那里我无法控制它是否通知,只有它是否执行,并且必须执行它......

我需要的是抑制该通知,或者一种在不触发该通知的情况下下载文件的方法,但现在我开始认为这是不可能的。有人知道如何解决这个难题吗?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    我认为最好写一个custom type在 Ruby 中)而不是尝试通过内置的 Puppet 资源类型和 Puppet DSL 来实现它。您可以将最初的尝试视为原型。

    如果您必须使用 DSL,那么您应该能够围绕运行摘要下载的Exec 构建它,并通过其unlessonlyif 进行检查命令,并通过其主命令下载和安装主文件。

    【讨论】:

    • 是的,我最终在除非且仅当,但我对此感觉不太好。我从来没有写过任何真正的 Ruby,所以到自定义类型的步骤现在感觉有点超出范围。不过,谢谢你指点我。
    【解决方案2】:

    据我所知,您已经实现的是 puppet 文件资源默认执行的操作,例如

    file{ '/var/big.txt.gz:  
      ensure => file,
      source => 'https://www.example..org/big.txt.gz',
    }
    

    Puppet 通过计算本地文件的校验和并将其与 checksum_value 参数进行比较来确定文件内容是否同步。如果没有为 puppet 和文件源指定 checksum_value 参数,则 Puppet 根据其 Puppet[:digest_algorithm] 计算校验和。对于 http(s) 源,Puppet 使用它从以下列表中识别的第一个 HTTP 标头:X-Checksum-Sha256、X-Checksum-Sha1、X-Checksum-Md5 或 Content-MD5。如果服务器响应不包含这些标头之一,则 Puppet 默认使用 Last-Modified 标头。如果 header 比本地文件的修改时间 (mtime) 更新,Puppet 会更新本地文件。

    https://puppet.com/docs/puppet/7/types/file.html#file-attribute-source

    【讨论】:

    • 技术上是的,但这里的问题是文件源是经过身份验证的。文件资源不能这样做。这是 remote_file,但正如我所说,您要么需要文件创建时间的标题,要么提前知道校验和。因为我首先必须下载校验和,所以这不起作用,因为一旦我下载 anything 整个模块就会被视为已更改...
    • ""但这里的问题是文件源是经过身份验证的"" 对于可能能够提供更好答案的其他人使用此信息更新您的问题很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2019-09-23
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多