我有一个定义的类型,如下modules/sysctl/manifests/init.pp
所示:
定义 sysctl($value = undef,$ensure = undef){ # 清除父目录 包括 sysctl::base # 永久的改变 文件 {“/etc/sysctl.d/${title}.conf”: 所有者 => 'root', 组 => '根', 模式 => '0644', 内容 => “${title} = ${value}\n”, 确保 => $确保, 通知 => 执行["sysctl-${title}"], } # 立即发生的变化 执行 { “sysctl-${title}”: 命令 => “/sbin/sysctl -w ${title}=${value}” refreshonly => true, } }
modules/template/manifests/api.pp
在由节点继承的模板模块中我使用:
类模板::api { 包括 yumrepos::epel 包括模板::common 包括我的防火墙 防火墙 防火墙 类 {'::mymodule': 需要 => 类['yumrepos::epel'], } 类 {'::resolv': local_resolver => true, } sysctl {'net.netfilter.nf_conntrack_max': 值 => '1048576', 确保 => '文件', } sysctl {'net.nf_conntrack_max':值 => 1048576} 系统控制 { ‘net.netfilter.nf_conntrack_tcp_timeout_established’: 值 => 86400 } sysctl {'net.ipv4.tcp_tw_recycle':值=>'0'} sysctl {'net.ipv4.tcp_tw_reuse':值=>'1'} sysctl {'net.ipv4.tcp_fin_timeout':值=>'10'} sysctl {'net.ipv4.ip_local_port_range':值=>'10000 65535'} sysctl {'kernel.msgmni':值=>'1024'} sysctl {'kernel.sem':值 =>'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
但我在节点上收到错误。第 28 行包含}
sysctl 定义的结尾。
我还尝试过将类型称为 sysctl::sysctl,并将定义的类型包装在一个类中,将名称更改为 set,然后将其称为 sysctl::set。它们仍然不起作用。如果我尝试这样做,include sysctl
我会收到一个错误,提示该类不存在。
我在这里做错了什么?
答案1
sysctl
看来你没有在任何地方定义实际的类别。
在您的中modules/sysctl/manifests/init.pp
您应该至少有一个class sysctl
集合,然后包含您定义的类型(其名称应该与类本身不同),如下所示:
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