I am attempting to use the Puppet puppetdb and postgresql modules from the 
forge to have postgresql live on a separate server from puppetdb itself. It's 
not going brilliantly as I'm not understanding how to inform the postgresql 
module about what version of postgresql is in use for a versioncmp in 
postgresql::server::role.

My questions to other people who have put postgresql on another host, or read 
puppet dsl better than me,  would be these:

1) which classes and params did you declare in the profile to get over this 
hump?
2) am I able to get $connect_settings fed into postgresql::server::role somehow?

Exhibit A, mildly tweaked for privacy:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: 
Evaluation Error: Error while evaluating a Resource Statement, Evaluation 
Error: Error while evaluating a Function Call, 'versioncmp' parameter 'a' 
expects a String value, got Undef at 
/etc/puppetlabs/code/environments/puppetmasters_test/modules/postgresql/manifests/server/role.pp:95:6
 at 
/etc/puppetlabs/code/environments/puppetmasters_test/modules/postgresql/manifests/server/db.pp:30
 on node temphost1.me.com

The puppetlabs-puppetdb module is at 5.1.2 (b641845), and the 
puppetlabs-postgresql module is at 4.9.0 (3021eb3).

The puppetdb module is currently in the profile like so (still working out all 
the things I need here):

  class { '::puppetdb':
    certificate_whitelist => [
      'cwood',
      'some.more',
      'etc.',
    ],
    conn_keep_alive       => '5',
    database_host         => 'db.me.com',
    java_args             => {
      '-Xmx' => '2g',
      '-Xms' => '512m',
    },
    jdbc_ssl_properties   => 
'?ssl=true&sslfactory=org.postgresql.ssl.jdbc4.LibPQFactory&sslmode=verify-full&sslrootcert=/etc/puppetlabs/puppetdb/ssl/ca.pem',
    manage_dbserver       => false,
    manage_package_repo   => false,
    node_purge_ttl        => '1d',
    node_ttl              => '14d',
    postgres_version      => '9.5',
  }


If I'm reading this correctly the puppetdb::database::postgresql class is 
declared in the puppetdb class. I am not managing postgresql itself on this 
server (manage_dbserver above) so the postgresql::server::db (defined type) 
declares (a) postgresql::server::role (defined type) without declaring the 
postgresql::server class.

https://github.com/puppetlabs/puppetlabs-puppetdb/blob/5.1.2/manifests/init.pp
https://github.com/puppetlabs/puppetlabs-puppetdb/blob/5.1.2/manifests/database/postgresql.pp
https://github.com/puppetlabs/puppetlabs-postgresql/blob/4.9.0/manifests/server/role.pp
https://github.com/puppetlabs/puppetlabs-postgresql/blob/4.9.0/manifests/server/db.pp

The catch appears to be that postgresql::server::role uses $connect_settings as 
a parameter, but it is declared as such in postgresql::server::db:

  if ! defined(Postgresql::Server::Role[$user]) {
    postgresql::server::role { $user:
      password_hash => $password,
      before        => Postgresql::Server::Database[$dbname],
    }
  }

However the version is taken from this in role.pp:

  # If possible use the version of the remote database, otherwise
  # fallback to our local DB version
  if $connect_settings != undef and has_key( $connect_settings, 'DBVERSION') {
    $version = $connect_settings['DBVERSION']
  } else {
    $version = $postgresql::server::_version
  }

Neither of the $version assignments there work so $version ends up null and 
this check on line 95 of role.pp produces the error above:

  if(versioncmp($version, '9.1') >= 0) {

This is the wall upon which my head is currently beating, if anybody has any 
hints.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/20170424210813.GA21371%40iniquitous.heresiarch.ca.
For more options, visit https://groups.google.com/d/optout.

Reply via email to