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

Ошибка модуля Puppet Postgresql 400 Неверный параметр, только если

У меня есть модуль с именем oss_puppetserver, у которого есть init.pp и database.pp.

Класс database.pp включен / включен / назначается через hiera для хоста, сам модуль использует существующий модуль puppetlabs-postgresql, который развернут в / etc / puppet / environment / testing / modules / postgresql через r10k и oss_puppetserver. модуль развернут в / etc / puppet / environment / testing / site / oss_puppetserver, файл database.pp содержит следующий код:

class oss_puppetserver::database {

  class { 'postgresql::globals':
    manage_package_repo => true,
    version             => '9.4',
    repo_proxy          => 'proxy:8080',
    datadir             => '/opt/pgpuppet/data',
    xlogdir             => '/opt/pgpuppet/xlog',
    logdir              => '/opt/pgpuppet/log',
  } ->
  class { 'postgresql::server':
    ip_mask_deny_postgres_user => '0.0.0.0/32',
    ip_mask_allow_all_users    => '0.0.0.0/0',
    listen_addresses           => '*',
  }
  postgresql::server::db { 'test1':
     user    => 'test2',
     password => 'test2',
  }
}

init.pp:

#lots of descriptive comments
class oss_puppetserver {
}

Однако проблема, похоже, в том, что узел, похоже, возвращает следующее:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter onlyif on Postgresql_psql[grant:database:GRANT test2 - ALL - test1] at /etc/puppet/environments/testing/modules/postgresql/manifests/server/grant.pp:229 on node host.test.bla
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

Кажется, что он продолжает зависать от определенного типа, и я понятия не имею, почему, я посмотрел на код внутри grant.pp и, похоже, это оскорбительные строки:

  $_onlyif = $onlyif_function ? {
'table_exists' => "SELECT true FROM pg_tables WHERE tablename = '${_togrant_object}'",
    default        => undef,
  }

  $grant_cmd = "GRANT ${_privilege} ON ${_object_type} \"${_togrant_object}\" TO
  \"${role}\""
  postgresql_psql { "grant:${name}":
    command    => $grant_cmd,
    db         => $on_db,
    port       => $port,
    psql_user  => $psql_user,
    psql_group => $group,
    psql_path  => $psql_path,
    unless     => $_unless,
    onlyif     => $_onlyif,
    require    => Class['postgresql::server']
  }

хотя я не совсем могу понять, почему именно он не работает или почему параметр будет недействительным, как следует из сообщения об ошибке.

Я пытался повторно развернуть модули и переписать класс несколько раз. Я могу только предположить, что проблема, похоже, связана с объявлениями классов внутри класса и отсутствием чего-то в строках включения или требований. Но мои попытки пока тщетны. Либо это, либо мне не хватает чего-то чрезвычайно очевидного. Я был бы признателен за любую помощь или предложение на этом этапе, поскольку другие сообщения об ошибках сервера, которые включали сообщения об ошибке 400 Invalid Parameter XXX, не имели для меня большого смысла, по крайней мере, это не было связано со мной с моей точки зрения, может быть, я просто неправильно понял .

Заранее благодарим за любые предложения относительно того, что я могу попробовать или сделать для решения проблемы.

Итак, я просто хотел опубликовать ответ на свой вопрос, похоже, что возникла проблема с марионеточным сервером, кэширующим типы и поставщики для модуля. Я повторно развернул его с помощью 'r10k puppetfile install -v', а затем перезапустил puppetserver. Кажется, что-то застряло в кеше.

Теперь эта проблема вроде бы исправлена, и все работает нормально. Я надеюсь, что это поможет кому-то по ходу дела.