Я получаю следующую ошибку при попытке использовать последний модуль puppetlabs-apache из github (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
Конфигурация моего узла выглядит так:
node 'cacti.eye.fi' inherits 'base' { include apache include mysql::server include yumrepos::epel package { 'cacti': ensure => 'latest', } }
mod.pp содержимое:
define apache::mod ( $package = undef ) { $mod = $name include apache::params #include apache #This creates duplicate resources in rspec-puppet $mod_packages = $apache::params::mod_packages $mod_package = $mod_packages[$mod] # 2.6 compatibility hack if $package { $package_REAL = $package } elsif "$mod_package" { $package_REAL = $mod_package } $mod_libs = $apache::params::mod_libs $mod_lib = $mod_libs[$mod] # 2.6 compatibility hack if "${mod_lib}" { $lib = $mod_lib } $mod_identifiers = $apache::params::mod_identifiers $mod_identifier = $mod_identifiers[$mod] if "${mod_identifier}" { $identifier = $mod_identifier } if $package_REAL { package { $package_REAL: ensure => present, require => Package['httpd'], before => A2mod[$mod], } } a2mod { $mod: ensure => present, lib => $lib, identifier => $identifier, require => Package['httpd'], notify => Service['httpd'], } }
Я подтвердил, что /var/lib/puppet/lib/puppet/type/a2mod.rb
Тип имеет параметр идентификатора, и это тот же MD5, что и сервер:
Puppet::Type.newtype(:a2mod) do @doc = "Manage Apache 2 modules"I am using Puppet 3.0.2 on both agent and master. Any idea what may cause this?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, которые, по-видимому, являются причиной этого. Это связано с тем, что я использую несколько сред для тестирования и обновления (о чем я не упоминал в исходной задаче, так как не считал ее актуальной).
Первая ошибка, которая обнаружилась в поиске Google после удаления идентификатора из моего поискового запроса:
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'),
}