定义types的参数无效

我有一个在modules/sysctl/manifests/init.pp中定义的types,如下所示:

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

   #父清除的目录
  包括sysctl :: base

  永久的变化
   file {“/etc/sysctl.d/${title}.conf”:
     owner =>'root',
     group =>'root',
     mode =>'0644',
     content =>“$ {title} = $ {value} \ n”,
    确保=> $确保,
     notify => Exec [“sysctl  -  $ {title}”],
   }

   #即时变化
   exec {“sysctl  -  $ {title}”:
     command =>“/ sbin / sysctl -w $ {title} = $ {value}”,
     refreshonly => true,
   }
 } 

在由我使用的节点inheritance的模板模块modules/template/manifests/api.pp中:

  class template :: api {

  包括yumrepos :: epel
  包括template :: common
  包括myfirewall

  火墙 
  火墙 

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

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

   sysctl {'net.netfilter.nf_conntrack_max':
    值=>'1048576',
    确保=>'文件',
   }
   sysctl {'net.nf_conntrack_max':value => 1048576}
   sysctl {
     'net.netfilter.nf_conntrack_tcp_timeout_established':
      值=> 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'}

 } 

但我得到一个错误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上的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节点。 第28行包含了sysctl定义的结尾。

我也曾尝试将types称为sysctl :: sysctl,并将定义的types封装在类中,然后将名称更改为set,然后将其作为sysctl :: set进行调用。 他们仍然没有工作。 如果我尝试include sysctl则会出现该类不存在的错误。

我在这里做错了什么?

看来,你无法定义实际的sysctl类。

在您的modules/sysctl/manifests/init.pp您至less应该有一个class sysctl集合,然后包含您定义的types(应该用不同的方式来命名),如下所示:

 class sysctl { # this is empty } define sysctl::set ( $value = undef, $ensure = undef ) { ... } 

这就是为什么当你尝试include sysctl时会出错,因为没有这样的类。 修正modules/sysctl/manifests/init.pp ,然后在/etc/puppet/modules/template/manifests/api.pp加上include sysctl 。 那么它应该工作。