【发布时间】: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 运行:
- 首先运行
apt-get update,前提是该实例的Puppet 目录已更改。 (即:如果什么都没有改变,就不要做任何事情,不要更新,因为这是对周期、带宽、资源等的浪费) - 完成所有操作后,运行
apt-get clean以清除所有内容,并可能运行与上面列出的 DockerRUN命令等效的命令。
如何使用 Puppet 执行阶段智能地包装 Puppet 运行,预先更新 apt 并在之后擦除缓存?
【问题讨论】:
-
stackoverflow.com/q/10845864/3346514 - 第一个问题。
-
我不认为Puppet自带了一个很好的方法来查询接收到的目录是否与上一个不同。也许您可以围绕 Puppet 构建一些脚本,例如 1. 获取目录并执行 noop 2. 当检测到更改时,执行 apt update 3. 实际 puppet 运行 4. 清理。