抑制 Puppet 中的特定错误/警告信息?

抑制 Puppet 中的特定错误/警告信息?

是否有可能抑制具体的运行 Puppet 清单时出现错误消息?

如果文件 /etc/sysconfig/iptables 存在,则以下代码片段将激活并启动 iptables。它工作正常,但“检查 iptables 规则文件”会生成一条错误消息,我想隐藏该消息。我查看了 (v2.7) 文档中有关 exec 资源类型的选项,并在 Google 上搜索,但无济于事。

cat init.pp
service { "iptables":
  enable  => true,
  ensure  => running,
  require => Exec["Check for iptables rulesfile"];
}

exec { "Check for iptables rulesfile":
  command => "/usr/bin/test -f /etc/sysconfig/iptables",
  returns => "0";
}

puppet apply --debug init.pp
...
err: /Stage[main]//Exec[Check for iptables rulesfile]/returns: change from notrun to 0 failed: /usr/bin/test -f /etc/sysconfig/iptables returned 1 instead of one of [0] at init.pp:12
...
warning: /Stage[main]//Service[iptables]: Skipping because of failed dependencies

有什么想法吗?

PS 是的,我知道这不是使用 Puppet 管理防火墙规则的“正确”方法。

答案1

我了解到您希望 iptables 服务仅在 /etc/sysconfig/iptables 存在时启用并运行。一个简单的选项是创建一个名为 iptables 的自定义事实(或任何您喜欢的名称),并使用该布尔值来决定是否执行服务块。例如:

在模块中的 $module_name/lib/facter 中创建自定义事实:

 Facter.add("iptables") do
   setcode do
     if Facter::Util::Resolution.exec('test -f /etc/sysconfig/iptables') then
       "true"
     else
       "false"
     end
   end
 end

然后,在您的服务块中有类似这样的内容:

 if $::iptables == "true" {
   service { "iptables":
     enable  => true,
     ensure  => running,
   }
 }

如果该文件存在,则仅执行该服务块。我想这就是你想要的。

答案2

博斯科提出了一个非常好的解决方案。

你的 hack 可能也能起作用,尝试使用日志级别元参数。

exec { "Check for iptables rulesfile":
    command  => "/usr/bin/test -f /etc/sysconfig/iptables",
    loglevel => "debug",
    returns  => "0";
}

请注意服务资源将要抱怨依赖失败。

相关内容