【问题标题】:Alter the behaviour when noop runs-noop metaparameter doesn't work?当 noop 运行-noop 元参数不起作用时改变行为?
【发布时间】: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吗?
  • 没有。仔细阅读文档。

标签: testing puppet noop


【解决方案1】:

当客户端在 noop 模式下运行时,$clientnoop 事实将为真,否则为假。

我不确定这是否是最佳解决方案,但当$clientnoop 为真时,您可以包含不同的资源。您的“noop 资源”可以是具有相同参数的文件资源,但源除外。这样,仍然可以应用依赖于该文件的其他资源。

【讨论】:

猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 2020-10-31
  • 2012-09-17
  • 2023-03-11
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
相关资源
最近更新 更多