尝试从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'), }