我有一个名为 oss_puppetserver 的模块,它有一个 init.pp 和一个 database.pp。
database.pp 类通过 hiera 为主机启用/包含/分配,模块本身利用通过 r10k 部署到 /etc/puppet/environments/testing/modules/postgresql 的现有 puppetlabs-postgresql 模块,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',
}
}
初始化.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']
}
尽管我不能完全辨别它失败的原因,或者为什么参数会像错误消息所暗示的那样无效。
我曾多次尝试重新部署模块并重写类。目前我只能假设问题似乎在于类内部有类声明,并且缺少 include 或 require 之类的内容。但到目前为止,我的尝试都是徒劳的。要么就是我遗漏了一些非常明显的东西。此时,我将不胜感激任何帮助或建议,因为其他包含 Error 400 Invalid Parameter XXX 帖子的 serverfault 帖子对我来说没有多大意义,至少从我的角度来看,它与我无关,也许我只是误解了。
提前感谢您对我可以尝试或做什么来解决问题的任何建议。
答案1
因此,我只是想发布我自己的问题的答案,似乎 puppetserver 在缓存模块的类型和提供程序时存在问题。我已使用“r10k puppetfile install -v”重新部署了它,然后重新启动了 puppetserver。似乎有些东西卡在了缓存中。
现在这个问题似乎已经解决了,一切都正常了。我希望这能帮助到其他人。