企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 执行模拟运行 > No alarms and no surprises. > > — Radiohead 我讨厌惊喜。有时你的 Puppet 配置清单没有像你预期的那样执行, 或者在你不知情的情况下,或许别人又提交了改变。 不管哪种情况发生,在 Puppet 执行配置清单之前能精确地获知它将要执行些什么是非常必要的。 例如,若更新了一个生产服务的配置文件并重新启动该服务,很可能会导致非计划性的停机时间。 又如,有时人为的手动编辑的配置文件会被 Puppet 同步更新时覆盖。 为了避免这些问题,你可以使用 Puppet 的 **模拟运行**(**dry run**)模式, 也称 **无操作**(**no operation,noop**)模式,来避免真正的执行。 #### 操作步骤 使用 --noop 开关运行 Puppet: ``` # puppet agent --test --noop info: Connecting to sqlite3 database: /var/lib/puppet/state/ clientconfigs.sqlite3 info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1296492323' --- /etc/exim4/exim4.conf 2011-01-17 08:13:34.349716342 -0700 +++ /tmp/puppet-file20110131-20189-127zyug-0 2011-01-31 09:45:27.792843709 -0700 @@ -1,4 +1,5 @@ ######### +# allow spammers to use our host as a relay ######### notice: /Stage[main]/Admin::Exim/File[/etc/exim4/exim4.conf]/content: is {md5}02798714adc9c7bf82bf18892199971a, should be {md5}6f46256716c0937f3b6 ffd6776ed059b (noop) info: /Stage[main]/Admin::Exim/File[/etc/exim4/exim4.conf]: Scheduling refresh of Service[exim4] notice: /Stage[main]/Admin::Exim/Service[exim4]: Would have triggered 'refresh' from 1 events notice: Finished catalog run in 0.90 seconds ``` #### 工作原理 在 noop 模式下,Puppet 会和常规运行模式一样运行,只是不会对客户端产生实际影响。 它会告知最终将会执行什么,你可以和你所预期的进行对比。如果有任何不同,重新检查配置清单 或机器的当前状态。 在前面的例子中,注意 Puppet 警告我们由于配置文件更新,它将会重新启动 exim 服务。 这或许是我们所期待的,也可能不是, 但不管怎样,预先知道这样的警告是有用的。 我制定了一个流程规则, 当在生产服务器上应用任何重要更新之前, 先在 noop 模式下运行 Puppet,验证发生的改变是否与我们预期一致。 #### 更多用法 你也可以使用模拟运行模式作为一个简单的审计工具。 它会告诉你从 Puppet 最近一次应用配置清单之后的任何改变。 一些组织要求所有的配置变更都通过 Puppet 来实现,这是一种对变更实施控制的过程。 使用 Puppet 的模拟运行模式可以检测到未授权的更改,之后决定是否合并应用这些改变到 Puppet 的配置清单,或者撤消改变。 #### 参见本书 * 第 6 章的 [资源的审计](#ch06sec12) 一节