Назад | Перейти на главную страницу

Подавить конкретное сообщение об ошибке / предупреждении в марионетке?

Можно ли подавить конкретный сообщения об ошибках при запуске манифеста Puppet?

Следующий фрагмент кода активирует и запускает iptables, если существует файл / etc / sysconfig / iptables. Он работает нормально, но «Проверить файл правил iptables» генерирует сообщение об ошибке, которое я хотел бы скрыть. Я проверил (v2.7) docs параметры типа ресурса exec и погуглил, но не повезло.

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

Есть предположения?

P.S. Да, я понимаю, что это неправильный способ управления правилами брандмауэра с помощью Puppet.

Я так понимаю, вы хотите, чтобы служба 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,
   }
 }

Это выполнит этот служебный блок, только если этот файл существует. Я думаю, что ты этого хочешь.

Боско предлагает очень хорошее решение.

Ваш хак тоже может сработать, попробуйте лог-уровень метапараметр.

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

Обратите внимание, что сервисный ресурс воля пожаловаться на неудачные зависимости.