Puppet apache 模块导致“服务器上的错误 400:无效的参数标识符”

Puppet apache 模块导致“服务器上的错误 400:无效的参数标识符”

尝试使用来自 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 模块”

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。知道是什么原因造成的吗?

答案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'),
}

相关内容