在puppet 2.6和2.7中定义和调用函数
我在在puppet 2.6和2.7中定义和调用函数,puppet,Puppet,我在core/manifests/logrotate.pp中定义了一个模块core和一个类core::logrotate class core::logrotate { #...some stuff here # define confd ($ensure = "present" , $log_name = "dummy" ) { if ( $ensure == present ) { file { "/etc/logrotate.d/$l
core/manifests/logrotate.pp
中定义了一个模块core
和一个类core::logrotate
class core::logrotate {
#...some stuff here
#
define confd ($ensure = "present" , $log_name = "dummy" ) {
if ( $ensure == present )
{
file {
"/etc/logrotate.d/$log_name":
ensure => present,
source => filelookup("core/${log_name}.logrotate"),
}
} else {
file {
"/etc/logrotate.d/$log_name":
ensure => absent,
}
}
}
}
在templates.pp内调用此函数作为
core::logrotate::confd{“mkill”:log_name=>mkill}
此操作失败并出现错误
服务器上的错误400:Puppet::Parser::AST::Resource失败,错误为ArgumentError:无效的资源类型core::logrotate::confd
如果puppet master版本是2.6.x,那么这将失败,为了使其工作,在模块的init.pp中曾经有一个导入“*”。现在将其删除为移动到puppet 2.7.20
这里粘贴的代码在2.7中有效,但在2.6中失败。知道为什么吗?如何使其同时适用于2.6和2.7?您应该在类外进行定义,请参阅样式指南: 另外,我认为您可能使用了错误的模块,拥有一个“logrotate”模块本身更符合逻辑 所以,;在modulepath/logrotate/manifests/confd.pp中,您可以放置以下内容:
define logrotate::confd ($ensure = "present" , $log_name = "dummy" ) {
if ( $ensure == present )
{
file {
"/etc/logrotate.d/$log_name":
ensure => present,
source => filelookup("core/${log_name}.logrotate"),
}
} else {
file {
"/etc/logrotate.d/$log_name":
ensure => absent,
}
}
}
这应该能让它正常工作
您好,
Ger您应该在类外进行定义,请参见样式指南: 另外,我认为您可能使用了错误的模块,拥有一个“logrotate”模块本身更符合逻辑 所以,;在modulepath/logrotate/manifests/confd.pp中,您可以放置以下内容:
define logrotate::confd ($ensure = "present" , $log_name = "dummy" ) {
if ( $ensure == present )
{
file {
"/etc/logrotate.d/$log_name":
ensure => present,
source => filelookup("core/${log_name}.logrotate"),
}
} else {
file {
"/etc/logrotate.d/$log_name":
ensure => absent,
}
}
}
这应该能让它正常工作
您好,
蒙古包