# HG changeset patch # User Balasankar 'Balu' C <balasankar@gitlab.com> # Date 1726701920 0 # Wed Sep 18 23:25:20 2024 +0000 # Node ID a83e0fc76529f98db4f70a2b9a65c5da524d6d4e # Parent 2be9e2b401fd841aa508bb140072ce200983f93d Only Run GitLab Rails recipes when required - Process roles that require GitLab Rails first. - Do not automatically run GitLab Rails for all roles at installation or reconfigure. - Ensure Patroni and Postgres roles can still perform the required database creation tasks. Closes https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8692 Changelog: changed Signed-off-by: Balasankar 'Balu' C <balasankar@gitlab.com> diff --git a/files/gitlab-cookbooks/package/libraries/config/gitlab.rb b/files/gitlab-cookbooks/package/libraries/config/gitlab.rb --- a/files/gitlab-cookbooks/package/libraries/config/gitlab.rb +++ b/files/gitlab-cookbooks/package/libraries/config/gitlab.rb @@ -28,19 +28,21 @@ git_data_dirs ConfigMash.new ## Roles + + # Roles that depend on gitlab_rails['enable'] should be processed first role('application').use { ApplicationRole } + role('sidekiq').use { SidekiqRole } + role('postgres').use { PostgresRole } + role('patroni').use { PatroniRole } role('redis_sentinel').use { RedisSentinelRole } role('redis_master').use { RedisMasterRole } role('redis_replica') role('geo_primary', manage_services: false).use { GeoPrimaryRole } role('geo_secondary', manage_services: false).use { GeoSecondaryRole } role('monitoring').use { MonitoringRole } - role('postgres').use { PostgresRole } role('pgbouncer').use { PgbouncerRole } - role('patroni').use { PatroniRole } role('consul').use { ConsulRole } role('pages').use { PagesRole } - role('sidekiq').use { SidekiqRole } role('spamcheck').use { SpamcheckRole } ## Attributes directly on the node diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/application.rb b/files/gitlab-cookbooks/package/libraries/config/roles/application.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/application.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/application.rb @@ -18,6 +18,7 @@ def self.load_role return unless Gitlab['application_role']['enable'] + # Run GitLab Rails related recipes unless explicitly disabled Gitlab['gitlab_rails']['enable'] = true if Gitlab['gitlab_rails']['enable'].nil? Gitlab['nginx']['enable'] = true if Gitlab['nginx']['enable'].nil? diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/consul.rb b/files/gitlab-cookbooks/package/libraries/config/roles/consul.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/consul.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/consul.rb @@ -18,6 +18,9 @@ def self.load_role return unless Gitlab['consul_role']['enable'] + # Do not run GitLab Rails related recipes unless explicitly enabled + Gitlab['gitlab_rails']['enable'] ||= false + Services.enable_group('consul_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/geo_secondary.rb b/files/gitlab-cookbooks/package/libraries/config/roles/geo_secondary.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/geo_secondary.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/geo_secondary.rb @@ -29,8 +29,13 @@ Gitlab['postgresql']['max_standby_archive_delay'] ||= '60s' Gitlab['postgresql']['max_standby_streaming_delay'] ||= '60s' Gitlab['postgresql']['hot_standby'] ||= 'on' + + # Run GitLab Rails related recipes only if required + Gitlab['gitlab_rails']['enable'] = rails_needed? + + # Do not attempt to run DB migrations unless explicitly specified to Gitlab['gitlab_rails']['auto_migrate'] ||= false - Gitlab['gitlab_rails']['enable'] = rails_needed? + Gitlab[WebServerHelper.service_name]['worker_processes'] ||= number_of_worker_processes end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/monitoring.rb b/files/gitlab-cookbooks/package/libraries/config/roles/monitoring.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/monitoring.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/monitoring.rb @@ -18,7 +18,9 @@ def self.load_role return unless Gitlab['monitoring_role']['enable'] - Gitlab['gitlab_rails']['auto_migrate'] ||= false + # Do not run GitLab Rails related recipes unless explicitly enabled + Gitlab['gitlab_rails']['enable'] ||= false + Services.enable_group('monitoring_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/pages.rb b/files/gitlab-cookbooks/package/libraries/config/roles/pages.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/pages.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/pages.rb @@ -18,7 +18,7 @@ def self.load_role return unless Gitlab['pages_role']['enable'] - # Turning off GitLab Rails unless explicitly enabled. + # Do not run GitLab Rails related recipes unless explicitly enabled Gitlab['gitlab_rails']['enable'] ||= false Services.enable_group('pages_role') diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/patroni.rb b/files/gitlab-cookbooks/package/libraries/config/roles/patroni.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/patroni.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/patroni.rb @@ -18,6 +18,11 @@ def self.load_role return unless Gitlab['patroni_role']['enable'] + # We need to set Gitlab['gitlab_rails']['enable'] to true because DB + # creation in database_objects resource is gated on whether Rails is + # enabled or not. + Gitlab['gitlab_rails']['enable'] = true if Gitlab['gitlab_rails']['enable'].nil? + Services.enable_group('patroni_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/pgbouncer.rb b/files/gitlab-cookbooks/package/libraries/config/roles/pgbouncer.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/pgbouncer.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/pgbouncer.rb @@ -18,6 +18,9 @@ def self.load_role return unless Gitlab['pgbouncer_role']['enable'] + # Do not run GitLab Rails related recipes unless explicitly enabled + Gitlab['gitlab_rails']['enable'] ||= false + Services.enable_group('pgbouncer_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/postgres.rb b/files/gitlab-cookbooks/package/libraries/config/roles/postgres.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/postgres.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/postgres.rb @@ -18,6 +18,11 @@ def self.load_role return unless Gitlab['postgres_role']['enable'] + # We need to set Gitlab['gitlab_rails']['enable'] to true because DB + # creation in database_objects resource is gated on whether Rails is + # enabled or not. + Gitlab['gitlab_rails']['enable'] = true if Gitlab['gitlab_rails']['enable'].nil? + Services.enable_group('postgres_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/redis_master.rb b/files/gitlab-cookbooks/package/libraries/config/roles/redis_master.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/redis_master.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/redis_master.rb @@ -19,8 +19,13 @@ master_role = Gitlab['redis_master_role']['enable'] replica_role = Gitlab['redis_replica_role']['enable'] + return unless master_role || replica_role + raise 'Cannot define both redis_master_role and redis_replica_role in the same machine.' if master_role && replica_role + # Do not run GitLab Rails related recipes unless explicitly enabled + Gitlab['gitlab_rails']['enable'] ||= false + Services.enable_group('redis_node') if master_role || replica_role end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/redis_sentinel.rb b/files/gitlab-cookbooks/package/libraries/config/roles/redis_sentinel.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/redis_sentinel.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/redis_sentinel.rb @@ -16,6 +16,11 @@ module RedisSentinelRole def self.load_role - Services.enable('sentinel') if Gitlab['redis_sentinel_role']['enable'] + return unless Gitlab['redis_sentinel_role']['enable'] + + # Do not run GitLab Rails related recipes unless explicitly enabled + Gitlab['gitlab_rails']['enable'] ||= false + + Services.enable('sentinel') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/sidekiq.rb b/files/gitlab-cookbooks/package/libraries/config/roles/sidekiq.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/sidekiq.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/sidekiq.rb @@ -18,7 +18,9 @@ def self.load_role return unless Gitlab['sidekiq_role']['enable'] + # Do not run any DB migrations Gitlab['gitlab_rails']['auto_migrate'] ||= false + Services.enable_group('sidekiq_role') end end diff --git a/files/gitlab-cookbooks/package/libraries/config/roles/spamcheck.rb b/files/gitlab-cookbooks/package/libraries/config/roles/spamcheck.rb --- a/files/gitlab-cookbooks/package/libraries/config/roles/spamcheck.rb +++ b/files/gitlab-cookbooks/package/libraries/config/roles/spamcheck.rb @@ -18,7 +18,7 @@ def self.load_role return unless Gitlab['spamcheck_role']['enable'] - # Turning off GitLab Rails unless explicitly enabled. + # Do not run GitLab Rails related recipes unless explicitly enabled Gitlab['gitlab_rails']['enable'] ||= false Services.enable_group('spamcheck_role')