Назад | Перейти на главную страницу

Модуль Puppet apache вызывает ошибку 400 на СЕРВЕРЕ: недопустимый идентификатор параметра

Я получаю следующую ошибку при попытке использовать последний модуль 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"

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')}

конец

I am using Puppet 3.0.2 on both agent and master. Any idea what may cause this?

Я думаю, что наконец-то обнаружил пару ошибок 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'),
}