Parâmetro inválido para o tipo definido

1

Eu tenho um tipo definido em modules/sysctl/manifests/init.pp que se parece com:

define sysctl ( $value = undef, $ensure = undef ) {

  # Parent purged directory
  include sysctl::base

  # The permanent change
  file { "/etc/sysctl.d/${title}.conf":
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    content => "${title} = ${value}\n",
    ensure  => $ensure,
    notify  => Exec["sysctl-${title}"],
  }

  # The immediate change
  exec { "sysctl-${title}":
    command     => "/sbin/sysctl -w ${title}=${value}",
    refreshonly => true,
  }
}

Em um módulo de modelo modules/template/manifests/api.pp que é herdado por um nó que eu uso:

class template::api {

  include yumrepos::epel
  include template::common
  include myfirewall

  Firewall 
  Firewall 

  class { '::mymodule' :
    require => Class['yumrepos::epel'],
  }

  class { '::resolv' :
    local_resolver => true,
  }

  sysctl { 'net.netfilter.nf_conntrack_max':
    value  => '1048576',
    ensure => 'file',
  }
  sysctl { 'net.nf_conntrack_max' : value => 1048576 }
  sysctl {
    'net.netfilter.nf_conntrack_tcp_timeout_established' :
      value => 86400
  }
  sysctl { 'net.ipv4.tcp_tw_recycle' : value => '0' }
  sysctl { 'net.ipv4.tcp_tw_reuse' : value => '1' }
  sysctl { 'net.ipv4.tcp_fin_timeout' : value => '10' }
  sysctl { 'net.ipv4.ip_local_port_range' : value => '10000 65535' }
  sysctl { 'kernel.msgmni' : value => '1024' }
  sysctl { 'kernel.sem' : value => '250 256000 32 1024' }

}

Mas estou recebendo um erro err: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter value at /etc/puppet/modules/template/manifests/api.pp:28 on node dis1.mydomain.com no nó. A linha 28 contém o final } da definição sysctl.

Eu também tentei chamar o tipo como sysctl :: sysctl e envolver o tipo definido em uma classe e alterar o nome para definir e chamá-lo como sysctl :: set. Eles ainda não funcionaram. Se eu tentar include sysctl , recebo um erro dizendo que a classe não existe.

O que estou fazendo de errado aqui?

    
por Andy Shinn 25.09.2012 / 18:02

1 resposta

2

Você não está definindo a classe sysctl real, parece.

No seu modules/sysctl/manifests/init.pp você deve ter pelo menos um class sysctl set, e então incluiu o seu tipo definido (que deve ser nomeado de forma diferente da própria classe), assim:

class sysctl {
  # this is empty
}

define sysctl::set ( $value = undef, $ensure = undef ) {
  ...
}

É por isso que você recebe um erro ao tentar include sysctl , porque não existe essa classe. Corrigir modules/sysctl/manifests/init.pp e, em seguida, em /etc/puppet/modules/template/manifests/api.pp add include sysctl na parte superior. Então deve funcionar.

    
por 25.09.2012 / 18:46

Tags