Skip to content

Geo: `gitlab-ctl show-config` doesn't work on secondary sites

Summary

running gitlab-ctl show-config on Geo secondary sites fail due to unhandled nil case.

Steps to reproduce

  1. Go to a single instance Geo secondary site
  2. Run gitlab-ctl show-config
  3. You should get a chef-client execution failure

What is the current bug behavior?

Chef fails to execute the show-config recipe with a nil related error.

What is the expected correct behavior?

It should display the configuration as json output

Relevant logs

Relevant logs
Starting Chef Infra Client, version 15.17.4
resolving cookbooks for run list: ["gitlab::show_config"]
Synchronizing Cookbooks:
  - gitlab (0.0.1)
  - package (0.1.0)
  - logrotate (0.1.0)
  - postgresql (0.1.0)
  - redis (0.1.0)
  - monitoring (0.1.0)
  - registry (0.1.0)
  - mattermost (0.1.0)
  - consul (0.1.0)
  - gitaly (0.1.0)
  - praefect (0.1.0)
  - gitlab-kas (0.1.0)
  - gitlab-pages (0.1.0)
  - nginx (0.1.0)
  - letsencrypt (0.1.0)
  - runit (5.1.3)
  - acme (4.1.3)
  - crond (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...

================================================================================
Recipe Compile Error in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/show_config.rb
================================================================================

NoMethodError
-------------
undefined method `[]' for nil:NilClass

Cookbook Trace:
---------------
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:44:in `block in rails_needed?'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:40:in `each'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:40:in `rails_needed?'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:31:in `load_role'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:163:in `block in load_roles'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:161:in `each'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:161:in `load_roles'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:182:in `generate_config'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/show_config.rb:23:in `from_file'

Relevant File Content:
----------------------
/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:

 37:
 38:      # If a service is explicitly set, it will be set in Gitlab[svc]['enable'].
 39:      # If it us auto-enabled, it will be set to true in Gitlab[:node][svc]['enable']
 40:      %w(puma sidekiq geo_logcursor).each do |svc|
 41:        # If the service is explicitly enabled
 42:        return true if Gitlab[svc]['enable']
 43:        # If the service is auto-enabled, and not explicitly disabled
 44>>       return true if Gitlab[:node]['gitlab'][svc.tr('_', '-')]['enable'] && Gitlab[svc]['enable'].nil?
 45:      end
 46:
 47:      return true if Gitlab['gitaly']['enable'] || (Gitlab[:node]['gitaly']['enable'] && Gitlab['gitaly']['enable'].nil?)
 48:
 49:      false
 50:    end
 51:
 52:    # running as a secondary requires several additional processes (geo-postgresql, geo-logcursor, etc).
 53:    # allow more memory for them by reducing the number of Puma workers. Each one is minimum

System Info:
------------
chef_version=15.17.4
platform=ubuntu
platform_version=20.04
ruby=ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]
program_name=/opt/gitlab/embedded/bin/chef-client
executable=/opt/gitlab/embedded/bin/chef-client


================================================================================
Recipe Compile Error in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/show_config.rb
================================================================================

NoMethodError
-------------
undefined method `[]' for nil:NilClass

Cookbook Trace:
---------------
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:44:in `block in rails_needed?'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:40:in `each'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:40:in `rails_needed?'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:31:in `load_role'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:163:in `block in load_roles'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:161:in `each'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:161:in `load_roles'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/settings_dsl.rb:182:in `generate_config'
  /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/show_config.rb:23:in `from_file'

Relevant File Content:
----------------------
/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config/roles/geo_secondary.rb:

 37:
 38:      # If a service is explicitly set, it will be set in Gitlab[svc]['enable'].
 39:      # If it us auto-enabled, it will be set to true in Gitlab[:node][svc]['enable']
 40:      %w(puma sidekiq geo_logcursor).each do |svc|
 41:        # If the service is explicitly enabled
 42:        return true if Gitlab[svc]['enable']
 43:        # If the service is auto-enabled, and not explicitly disabled
 44>>       return true if Gitlab[:node]['gitlab'][svc.tr('_', '-')]['enable'] && Gitlab[svc]['enable'].nil?
 45:      end
 46:
 47:      return true if Gitlab['gitaly']['enable'] || (Gitlab[:node]['gitaly']['enable'] && Gitlab['gitaly']['enable'].nil?)
 48:
 49:      false
 50:    end
 51:
 52:    # running as a secondary requires several additional processes (geo-postgresql, geo-logcursor, etc).
 53:    # allow more memory for them by reducing the number of Puma workers. Each one is minimum

System Info:
------------
chef_version=15.17.4
platform=ubuntu
platform_version=20.04
ruby=ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]
program_name=/opt/gitlab/embedded/bin/chef-client
executable=/opt/gitlab/embedded/bin/chef-client


Running handlers:
There was an error running gitlab-ctl reconfigure:

undefined method `[]' for nil:NilClass

Running handlers complete
Chef Infra Client failed. 0 resources updated in 05 seconds
Edited by Gabriel Mazetto