我在尝试使用来自 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
我的节点配置如下所示:
节点 'cacti.eye.fi' 继承 'base' { 包括阿帕奇 包括 mysql::server 包括 yumrepos::epel 包{'仙人掌': 确保 => '最新', } }
mod.pp 内容:
定义 apache::mod ( $包=未定义 ) { $mod = $名称 包括阿帕奇::参数 #include apache #This 在 rspec-puppet 中创建重复资源 $mod_packages = $apache::params::mod_packages $mod_package = $mod_packages[$mod] # 2.6 兼容性破解 如果 $ 包 { $package_REAL = $包 } elsif "$mod_package" { $package_REAL = $mod_package } $mod_libs = $apache::params::mod_libs $mod_lib = $mod_libs[$mod] # 2.6 兼容性破解 如果“${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: 确保 => 现在, 要求 => 包 ['httpd'], 之前 => A2mod[$mod], } } a2mod { $mod: 确保 => 现在, 库 => $库, 标识符 => $标识符, 要求 => 包 ['httpd'], 通知 => 服务 ['httpd'], } }
我已验证该/var/lib/puppet/lib/puppet/type/a2mod.rb
类型具有标识符参数并且它与服务器的 MD5 相同:
Puppet::Type.newtype(:a2mod) 做 @doc = "管理 Apache 2 模块"我在代理和主机上都使用 Puppet 3.0.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 错误,这似乎是造成这种情况的原因。这与我使用多个环境进行测试和更新有关(我没有在原始问题中提及,因为我认为它不相关)。
从我的搜索词中删除“标识符”后出现在谷歌搜索中的第一个错误:
http://projects.puppetlabs.com/issues/17814
然后,这个错误链接到另一个听起来直接相关的错误:
http://projects.puppetlabs.com/issues/12173
我也在关注http://projects.puppetlabs.com/issues/17210,它可能是相关的。我正在关注这些错误。我可以确认,在我将代码实际合并到主环境后,它确实开始工作了(因为 Puppet master 现在看到了代码更改)。
似乎问题出在您的标识符声明中,您可以尝试添加 else fail 以查看是否是问题所在: