
私は 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 つを削除して二重定義を回避することができます。