傀儡apache模块导致“SERVER上的错误400:无效的参数标识符”

尝试从github( https://github.com/puppetlabs/puppetlabs-apache )使用最新的puppetlabs-apache模块时收到以下错误:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter identifier at /etc/puppet/environments/development/modules/apache/manifests/mod.pp:40 on node cacti.mydomain.com Warning: Not using cache on failed catalog Error: Could not retrieve catalog; skipping runn

我的节点configuration如下所示:

节点'cacti.eye.fi'inheritance'base'{
  包括apache
  包括mysql :: server
  包括yumrepos :: epel

  包{'cacti':
    确保=>'最新',
   }
 }

mod.pp内容:

定义apache :: mod(
   $ package = undef
 ){
   $ mod = $ name
  包括apache :: params
   #include apache#这会在rspec-puppet中创build重复的资源
   $ mod_packages = $ apache :: params :: mod_packages
   $ mod_package = $ mod_packages [$ mod]#2.6兼容性hack
  如果$ package {
     $ package_REAL = $包
   } elsif“$ mod_package”{
     $ package_REAL = $ mod_package
   }
   $ mod_libs = $ apache :: params :: mod_libs
   $ mod_lib = $ mod_libs [$ mod]#2.6兼容性hack
  如果“$ {mod_lib}”{
     $ lib = $ mod_lib
   }

   $ mod_identifiers = $ apache :: params :: mod_identifiers
   $ mod_identifier = $ mod_identifiers [$ mod]
  如果“$ {mod_identifier}”{
     $ identifier = $ mod_identifier
   }

  如果$ package_REAL {
    包{$ package_REAL:
      确保=>现在,
       require => Package ['httpd'],
       before => A2mod [$ mod],
     }
   }

   a2mod {$ mod:
    确保=>现在,
     lib => $ lib,
    标识符=> $标识符,
     require => Package ['httpd'],
     notify => Service ['httpd'],
   }
 }

我已经validation了/var/lib/puppet/lib/puppet/type/a2mod.rbtypes具有标识符参数,它与服务器的MD5相同:

 Puppet :: Type.newtype(:a2mod)做的
     @doc =“pipe理Apache 2模块” 

 ensurable newparam :name do desc "The name of the module to be managed" isnamevar end newparam :lib do desc "The name of the .so library to be loaded" defaultto { "mod_#{@resource[:name]}.so" } end newparam :identifier do desc "Module identifier string used by LoadModule. Default: module-name_module" # http://httpd.apache.org/docs/2.2/mod/module-dict.html#ModuleIdentifier defaultto { "#{@resource[:name]}_module" } end autorequire(:package) { catalog.resource(:package, 'httpd')} 

结束
我在代理和主服务器上使用Puppet 3.0.2。 任何想法可能会导致这个?

我想我终于find了一些似乎是这个原因的Puppet bug。 这与我使用多种环境进行testing和更新有关(在原来的问题中我没有提到,因为我不认为这是相关的)。

从search词中删除“标识符”后,Googlesearch中显示的第一个错误:

http://projects.puppetlabs.com/issues/17814

然后,这个错误链接到另一个听起来像是直接相关的:

http://projects.puppetlabs.com/issues/12173

我也跟随http://projects.puppetlabs.com/issues/17210它可能是相关的。 我正在跟踪这些错误。 我可以确认,当我实际上将我的代码合并到主环境后,它开始工作(因为Puppet主现在看到了代码更改)。

似乎问题出在你的标识符声明中,你可以尝试添加一个else,看看是否是这个问题:

 if "${mod_identifier}" { $identifier = $mod_identifier } else { fail('No identifier found'), }