0

で定義されたモジュールcoreとクラスがあります。core::logrotatecore/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 マスターのバージョンが 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 に答える