У меня есть модуль, названный oss_puppetserver, который имеет init.pp и database.pp.
database.pp класс включается/включается/присваивается через hiera для хоста, сам модуль использует существующий puppetlabs-postgresql модуль, который развертывается на/etc/puppet/environments/testing/modules/postgresql через r10k, и oss_puppetserver модуль развертывается на/etc/puppet/environments/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']
}
хотя я не совсем могу различить, почему точно это перестало работать или почему параметр был бы недопустим, как errormessage предполагает.
Я попробовал к redploy модули и переписываю класс многократно. Я могу только предположить в этой точке, что проблема, кажется, с наличием объявлений класса в классе и пропавших без вести чего-то вроде включения или требует. Но мои попытки были бесполезны до сих пор. Или это или я пропускаем что-то чрезвычайно очевидное. Я ценил бы любую справку или предложение в этой точке начиная с других serverfault регистраций, которые включали Ошибку 400 Недопустимых параметров, XXX сообщений не имели большой смысл мне, по крайней мере, это не было узнаваемо мне с моей точки зрения, возможно, я просто неправильно понял.
Спасибо заранее за любые предложения относительно того, что я мог возможно попробовать или сделать для решения проблемы.
Итак, я просто хотел написать ответ на свой собственный вопрос, похоже, что была проблема с кэшированием марионеточных серверов типов и провайдеров для модуля. Я перепрофилировал его с 'r10k puppetfile install -v', а затем перезапустил марионеточный сервер. Похоже, что-то застряло в кэше.
Теперь эта проблема, кажется, исправлена и все работает нормально. Надеюсь, это кому-нибудь поможет.
.