serviço de fantoches que não interrompe o serviço (iptables)

1

Estou tentando usar um mestre de marionetes 3.1.1 para gerenciar o iptables em vários servidores. Meu local agente fantoche é 2.7.19 , o sistema operacional do servidor é 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",
    }
  }
}

Quando eu executo o fantoche em um servidor de desenvolvimento:

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

ocorre o seguinte:

debug: Puppet::Type::Service::ProviderRedhat: Executing '/sbin/chkconfig iptables' debug: Serviceiptables: Executing '/sbin/service iptables stop' debug: Puppet::Type::Service::ProviderRedhat: Executing '/sbin/chkconfig iptables' notice: /Stage[main]/Base::Iptables/Service[iptables]/ensure: ensure changed 'running' to 'stopped' debug: /Stage[main]/Base::Iptables/Service[iptables]: The container Class[Base::Iptables] will propagate my refresh event debug: Serviceip6tables: Executing '/sbin/service ip6tables status' debug: Puppet::Type::Service::ProviderRedhat: Executing '/sbin/chkconfig ip6tables' debug: Class[Base::Iptables]: The container Stage[main] will propagate my refresh event

Verificar manualmente com service iptables status mostra que o serviço está de fato em execução. O fantoche está parando o serviço e, de alguma forma, iniciando-o devido a essa 'atualização'?

Eu tentei alterar meu manifesto de acordo com essa pergunta semelhante , mas sem sucesso ,

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

resulta na mesma coisa - checagem de bonecos, depois parando o iptables, mas ainda assim o serviço é ativado novamente.

Eu não sei se isso pode estar relacionado a esse bug documentado de condição de corrida que foi corrigido em um fantoche novo versão, eu não tenho a opção de atualizar ou implementar um método adequado, como módulo de firewall do puppetlab neste momento.

UPDATE [20140724]

Depois de um ótimo feedback aqui, fiz algumas depurações / logs do script /etc/init.d/iptables. Venha descobrir Quando o boneco estava funcionando, nenhuma chamada para iniciar o serviço estava sendo feita, no entanto, o sistema operacional ainda relatava que o iptables estava funcionando mesmo se o fantoche parasse.

Minha inclinação era olhar para o próprio módulo iptables. Com certeza, se eu removesse o módulo iptables e depois executasse o fantoche novamente, o módulo seria recarregado.

UPDATE [20140729]

Minha solução está listada abaixo como uma resposta. Vou abrir uma nova pergunta para continuar a solucionar problemas com o CentOS 6.

    
por Shanedroid 23.07.2014 / 18:49

1 resposta

1

Eu queria deixar isso aqui como uma resposta à minha pergunta porque funcionou para mim. Se você está rodando o CentOS 5.4, isso funcionará e efetivamente garantirá que o módulo iptables seja descarregado do kernel. Farei uma nova pergunta especificamente relacionada ao meu trabalho contínuo com o CentOS 6 e o fantoche.

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"
      }
    
por 29.07.2014 / 15:36