【问题标题】:Update apt before every Puppet run unless nothing has changed, wipe apt cache after every Puppet run在每次 Puppet 运行之前更新 apt,除非没有任何改变,每次 Puppet 运行后擦除 apt 缓存
【发布时间】:2014-08-11 13:42:14
【问题描述】:

我正在使用 Docker 容器内的 Puppet Agent,因此使用尽可能少的文件系统空间非常重要。因此,在我的 Docker 构建的最后,I was running the following

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

问题是我的 Puppet 运行尝试安装一个包,并且由于没有可以从中提取的列表,所以它失败了。一个简单的apt-get update 可以让一切正常运行。

我正在运行他们存储库中提供的最新 Puppet 3 客户端。如何使用阶段要求以下包装每个 Puppet 运行:

  1. 首先运行apt-get update,前提是该实例的Puppet 目录已更改。 (即:如果什么都没有改变,就不要做任何事情,不要更新,因为这是对周期、带宽、资源等的浪费)
  2. 完成所有操作后,运行 apt-get clean 以清除所有内容,并可能运行与上面列出的 Docker RUN 命令等效的命令。

如何使用 Puppet 执行阶段智能地包装 Puppet 运行,预先更新 apt 并在之后擦除缓存?

【问题讨论】:

  • 我不认为Puppet自带了一个很好的方法来查询接收到的目录是否与上一个不同。也许您可以围绕 Puppet 构建一些脚本,例如 1. 获取目录并执行 noop 2. 当检测到更改时,执行 apt update 3. 实际 puppet 运行 4. 清理。

标签: puppet apt


【解决方案1】:

如果你使用puppetlabs-apt模块,只需定义:

Class['apt'] -> Package<| |>

否则使用:

exec { 'apt-update':
    command => '/usr/bin/apt update'
}

Exec['apt-update'] -> Package <| |>

这样apt update会在某些包丢失的情况下被执行。

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2013-01-06
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多