0

我有一个模块core和一个类core::logrotate定义在core/manifests/logrotate.pp.

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 }

这失败并出现错误

Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type core::logrotate::confd

如果 puppet master 版本是 2.6.x,那么这将失败,为了让它在那里工作,在模块的 init.pp 中曾经有一个导入“*”。现在将其删除为移动到 puppet 2.7.20。

此处粘贴的代码在 2.7 中有效,但在 2.6 中失败。知道为什么吗?我怎样才能让它同时适用于 2.6 和 2.7?

4

1 回答 1

3

您应该在课堂之外进行定义,请参阅样式指南:http ://docs.puppetlabs.com/guides/style_guide.html#classes

另外,我认为您可能使用错误的模块,单独拥有一个“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,
    }
  }
}

这应该使它正常工作。

问候,德国

于 2012-12-04T19:00:08.223 回答