パペット gitlab postgresql 競合

パペット gitlab postgresql 競合

私は postgresql と gitlab を使用して VM をセットアップしようとしています。次のパッケージを使用しています: ギットラボPostgreSQL

これは私のinit.ppです

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           => '*',
  ipv4acls                   => ['host all johndoe 10.1.1.0/24 cert'],
  manage_firewall            => true,
  postgres_password          => 'TPSrep0rt!',
}

class { 
  'gitlab':
    git_email         => '[email protected]',
    git_comment       => 'GitLab Performates',
    gitlab_domain     => 'gitlab.foobar.fr',
    gitlab_dbtype     => 'pgsql',
    gitlab_dbname     => 'gitlab',
    gitlab_dbuser     => 'gitlab',
    gitlab_dbpwd      => 'gitlab',
    ldap_enabled      => false,
}

例をほぼコピーした

しかし、VMをプロビジョニングしようとするといつも

Error: Duplicate declaration: Package[postgresql-client] is already declared; cannot redeclare at /etc/puppet/modules/postgresql/manifests/client.pp:12 on node

私は参照しているだけでありpostgresql::server、gitlab はそれがpostgresql-clientインストールされていることを確認しているので、なぜ文句を言うのでしょうか?

答え1

ここでの問題は、Puppet では同じ名前の 2 つのリソースを定義できないことです。

PostgreSQLモジュールはここでPackage['postgresql-client']を定義します:https://github.com/puppetlabs/puppetlabs-postgresql/blob/master/manifests/client.pp#L8

GitLabはこちら:https://github.com/sbadia/puppet-gitlab/blob/master/manifests/setup.pp#L52

GitLabはensure_packages機能から標準ライブラリこれは、postgres が gitlab の前にロードされる場合は機能するはずですが、Puppet ではモジュールのロード順序が保証されません (申し訳ありません)。

ensure_packages適切な修正方法は、PostgreSQL モジュールでも使用することです。ローカルでパッチを適用するか、postgresql-clientパッケージ定義の 1 つを削除して二重定義を回避することができます。

関連情報