Кукольный сервис не останавливая сервис (iptables)

Я пытаюсь использовать Puppet Master 3.1.1 для управления iptables на различных серверах. Мой локальныйагент - 2.7.19, ОС сервера - CentOS 5.4.

/etc/puppet/modules/mycompany/manifests/config/iptables.pp

class base::iptables (
{
  {
    $identity_environment = $::identity_environment
  }

  if ($identity_environment == "production")
  {
    $start_iptables = "true"
    $run_iptables = "running"
  }

  elsif ($identity_environment == "development")
  {
    $start_iptables = "false"
    $run_iptables = "stopped"
  }

  if ($run_iptables != "stopped")
  {
    file { "/etc/sysconfig/iptables":
      ensure => file,
      owner  => root,
      group  => root,
      mode   => 644,
      source => "puppet://path_to_my_conf",
      require => File["/etc/resolv.conf"],
    }

    service { "iptables":
      subscribe => File["/etc/sysconfig/iptables"],
      enable => "$start_iptables",
      ensure => "$run_iptables",
      status => "[[ `iptables -L -n | egrep -v '(Chain|target)' | grep '^[A-Za-z]' | wc -l` != 0 ]]",
    }
  }

  else
   {
    service { "iptables":
      enable =>"$start_iptables",
      ensure =>"$run_iptables",
    }
  }
}

Когда я запускаю puppet на сервере разработки:

puppet agent --verbose --no-daemonize --onetime --debug | grep iptable

происходит следующее:

debug: Puppet:: Type:: Service:: ProviderRedhat: Выполнение '/sbin/chkconfig iptables' debug: Serviceiptables: Выполнение '/sbin/service iptables stop' debug: Puppet::Type::Service::ProviderRedhat: Выполнение '/ sbin / chkconfig iptables 'извещение: /Stage[main]/Base::Iptables/Service[iptables]/ обеспечить: убедиться, что отладка "работает" на "остановлен" отладка: /Stage[main]/Base::Iptables/Service[iptables]: Контейнерный класс [Base::Iptables] будет распространять мое событие обновления debug: Serviceip6tables: выполнение '/sbin/service ip6tables status' debug: Puppet::Type::Service::ProviderRedhat: выполнение '/sbin/chkconfig ip6tables' debug: Class[Base::Iptables]: контейнер Stage [main] будет распространять мое событие обновления

Проверка вручную с service iptables status показывает, что служба действительно работает, останавливает ли ее марионетка, а затем каким-то образом запускает ее из-за этого "обновления"?

Я попытался изменить свой манифест в соответствии с этим похожим вопросом, но безрезультатно,

service { "iptables":
    ensure => "stopped",
    hasstatus => "true",
    status => "true"
}

приводит к тому же самому - проверка марионеток, затем остановка iptables, но служба снова включается.

Я не знаю, может ли это быть связано с этой задокументированной ошибкой состояния гонки, которая была исправлена ​​в более новой версии кукол, у меня нет возможности обновить или реализовать соответствующий метод, такой как модуль брандмауэра puppetlab в настоящее время.

ОБНОВЛЕНИЕ [20140724]

После некоторого отличного отзыва я выполнил некоторую отладку / ведение журнала из скрипта /etc/init.d/iptables. Приходите, чтобы узнать, когда puppet работал, не было никаких вызовов для запуска службы, однако операционная система по-прежнему сообщала, что iptables работает, даже если puppet остановил ее.

Я хотел посмотреть на сам модуль iptables. Конечно, если я уберу модуль iptables, а затем снова запускаю puppet, модуль будет перезагружен.

ОБНОВЛЕНИЕ [20140729]

Мое решение указано ниже в качестве ответа. Я открою новый вопрос для продолжения устранения неполадок CentOS 6 с этим.

1 ответ

Решение

Я хотел оставить это здесь как ответ на мой вопрос, потому что он работал для меня. Если вы используете CentOS 5.4, это будет работать и эффективно обеспечит выгрузку модуля iptables из ядра. Я задам новый вопрос, конкретно касающийся моей дальнейшей работы с CentOS 6 и Puppet.

exec { "chkconfig_iptables":
          onlyif => "/sbin/chkconfig --level 3 iptables",
          command => "/sbin/chkconfig --level 3 iptables off",
          before => exec["kill_iptables"]
     }
exec { "kill_iptables":
          onlyif => "/sbin/lsmod | grep ip_tables",
          command => "/sbin/service iptables stop;/sbin/modprobe -f -r ip_tables"
      }
Другие вопросы по тегам