Puppet Postgresql 模块错误 400 无效参数 onlyif

Puppet Postgresql 模块错误 400 无效参数 onlyif

我有一个名为 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。似乎有些东西卡在了缓存中。

现在这个问题似乎已经解决了,一切都正常了。我希望这能帮助到其他人。

相关内容