尝试使用来自 github 的最新 puppetlabs-apache 模块时收到以下错误(https://github.com/puppetlabs/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”{ 包括 Apache 包括 mysql::server 包括 yumrepos::epel 包 {'cacti': 确保 => '最新', } }
mod.pp内容:
定义 apache::mod ( $包=undef ){ $mod = $name 包括 apache::params #include apache #这将在 rspec-puppet 中创建重复的资源 $mod_packages = $apache::params::mod_packages $mod_package = $mod_packages[$mod] # 2.6 兼容性 hack 如果 $包 { $package_REAL = $package } 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: 确保 => 存在, 需要 => 包['httpd'], 之前 => A2mod[$mod], } } a2mod { $mod: 确保 => 存在, lib => $lib, 标识符 => $标识符, 需要 => 包['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')}
结尾
答案1
我想我终于找到了几个 Puppet 错误,它们似乎是导致此问题的原因。这与我使用多个环境进行测试和更新有关(我没有在原始问题中提到这一点,因为我认为它不相关)。
从我的搜索词中删除“标识符”后,在 Google 搜索中出现的第一个错误是:
http://projects.puppetlabs.com/issues/17814
然后,这个错误与另一个听起来直接相关的错误有关:
http://projects.puppetlabs.com/issues/12173
我也关注了http://projects.puppetlabs.com/issues/17210并且它可能与之相关。我正在关注这些错误。我可以确认,在我将代码实际合并到主环境后,它确实开始工作(因为 Puppet master 现在看到了代码更改)。
答案2
似乎问题出在您的标识符声明中,您可以尝试添加 else fail 来查看是否是这个问题:
if "${mod_identifier}" {
$identifier = $mod_identifier
}
else {
fail('No identifier found'),
}