尝试从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.rb
types具有标识符参数,它与服务器的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'), }