【发布时间】:2014-08-28 04:37:53
【问题描述】:
我有以下资源定义
file { '/usr/lib/oozie/libext/hadoop-lzo-0.5.0.jar':
ensure => present,
group => 'root',
owner => 'root',
source => '/usr/lib/hadoop/lib/hadoop-lzo-0.5.0.jar',
mode => 0755,
require => [Package['lzo'],Package['lzo-devel'],Package['hadoop-lzo'],Package['hadoop-lzo-native']],
}
这实际上将 jar artefact 复制到所需位置。这里的问题是 source 定义,它指向通过安装这些软件包之一创建的位置。在 noop 模式下运行 puppet 时,此资源定义会导致失败,因为没有这样的源 - 这是非常合乎逻辑的。
有没有办法改变这种行为?我不想跳过它的所有依赖项。或者建议的方法是什么?我想避免将 jar 复制到模块文件中。
我找到了 noop 元参数,文档 here 但似乎也无济于事。所以资源规范看起来像:
file { '/usr/lib/oozie/libext/hadoop-lzo-0.5.0.jar':
ensure => present,
group => 'root',
owner => 'root',
source => '/usr/lib/hadoop/lib/hadoop-lzo-0.5.0.jar',
mode => 0755,
noop => false,
require => [Package['lzo'],Package['lzo-devel'],Package['hadoop-lzo'],Package['hadoop-lzo-native']],
}
我需要打开一些东西吗?还是我误解了什么? 如何检测该模块是否在 noop 模式下运行?如果我想进行一些讨厌的修复。类似 if noop 然后跳过的东西
谢谢
【问题讨论】:
-
noop 元参数并没有像你想象的那样做。设置 noop=>false 意味着您的文件资源将始终被应用,即使在 noop 运行中也是如此。来自 puppetlabs 文档:noop 元参数允许您在 noop 模式下应用单个资源,并将覆盖 noop 设置的全局值。这意味着如果需要,将更改具有 noop => false 的资源,即使在运行具有 noop = true 或 --noop 的 puppet 代理时也是如此。 (相反,只有 noop => true 的资源才会被模拟,即使在全局禁用 noop 模式时也是如此。)
-
谢谢。发现了。有什么方法可以实现所需的行为?因为我真的不想仅仅因为这个而将 jar 包含到模块中。有什么办法可以从 noop 操作中排除资源或能够识别该模块在 noop 模式下运行。
-
这是duplicate吗?
-
没有。仔细阅读文档。