Skip to content

Commit 81034e2

Browse files
Robert Marshallbalasankarc
andcommitted
Merge branch 'redis-extra-config-command' into 'master'
Support specifying config_command to Rails's Redis configurations See merge request https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/7355 Merged-by: Robert Marshall <[email protected]> Approved-by: Andrew Patterson <[email protected]> Approved-by: Robert Marshall <[email protected]> Reviewed-by: Balasankar 'Balu' C <[email protected]> Reviewed-by: Matthew Badeau <[email protected]> Co-authored-by: Balasankar 'Balu' C <[email protected]>
2 parents ec3e156 + f2380b1 commit 81034e2

File tree

5 files changed

+86
-5
lines changed

5 files changed

+86
-5
lines changed

files/gitlab-cookbooks/gitlab/attributes/default.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@
447447
default['gitlab']['gitlab_rails']['redis_tls_client_cert_file'] = nil
448448
default['gitlab']['gitlab_rails']['redis_tls_client_key_file'] = nil
449449
default['gitlab']['gitlab_rails']['redis_password'] = nil
450+
default['gitlab']['gitlab_rails']['redis_extra_config_command'] = nil
450451
default['gitlab']['gitlab_rails']['redis_encrypted_settings_file'] = nil
451452
default['gitlab']['gitlab_rails']['redis_socket'] = "/var/opt/gitlab/redis/redis.socket"
452453
default['gitlab']['gitlab_rails']['redis_enable_client'] = true
@@ -458,6 +459,7 @@
458459
default['gitlab']['gitlab_rails']['redis_cache_username'] = nil
459460
default['gitlab']['gitlab_rails']['redis_cache_password'] = nil
460461
default['gitlab']['gitlab_rails']['redis_cache_encrypted_settings_file'] = nil
462+
default['gitlab']['gitlab_rails']['redis_cache_extra_config_command'] = nil
461463
default['gitlab']['gitlab_rails']['redis_cache_cluster_nodes'] = []
462464
default['gitlab']['gitlab_rails']['redis_cache_ssl'] = false
463465
default['gitlab']['gitlab_rails']['redis_cache_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -468,6 +470,7 @@
468470
default['gitlab']['gitlab_rails']['redis_queues_username'] = nil
469471
default['gitlab']['gitlab_rails']['redis_queues_password'] = nil
470472
default['gitlab']['gitlab_rails']['redis_queues_encrypted_settings_file'] = nil
473+
default['gitlab']['gitlab_rails']['redis_queues_extra_config_command'] = nil
471474
default['gitlab']['gitlab_rails']['redis_queues_sentinels'] = []
472475
default['gitlab']['gitlab_rails']['redis_queues_sentinels_password'] = nil
473476
default['gitlab']['gitlab_rails']['redis_queues_cluster_nodes'] = []
@@ -482,6 +485,7 @@
482485
default['gitlab']['gitlab_rails']['redis_shared_state_username'] = nil
483486
default['gitlab']['gitlab_rails']['redis_shared_state_password'] = nil
484487
default['gitlab']['gitlab_rails']['redis_shared_state_encrypted_settings_file'] = nil
488+
default['gitlab']['gitlab_rails']['redis_shared_state_extra_config_command'] = nil
485489
default['gitlab']['gitlab_rails']['redis_shared_state_cluster_nodes'] = []
486490
default['gitlab']['gitlab_rails']['redis_shared_state_ssl'] = false
487491
default['gitlab']['gitlab_rails']['redis_shared_state_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -494,6 +498,7 @@
494498
default['gitlab']['gitlab_rails']['redis_trace_chunks_username'] = nil
495499
default['gitlab']['gitlab_rails']['redis_trace_chunks_password'] = nil
496500
default['gitlab']['gitlab_rails']['redis_trace_chunks_encrypted_settings_file'] = nil
501+
default['gitlab']['gitlab_rails']['redis_trace_chunks_extra_config_command'] = nil
497502
default['gitlab']['gitlab_rails']['redis_trace_chunks_cluster_nodes'] = []
498503
default['gitlab']['gitlab_rails']['redis_trace_chunks_ssl'] = false
499504
default['gitlab']['gitlab_rails']['redis_trace_chunks_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -506,6 +511,7 @@
506511
default['gitlab']['gitlab_rails']['redis_actioncable_username'] = nil
507512
default['gitlab']['gitlab_rails']['redis_actioncable_password'] = nil
508513
default['gitlab']['gitlab_rails']['redis_actioncable_encrypted_settings_file'] = nil
514+
default['gitlab']['gitlab_rails']['redis_actioncable_extra_config_command'] = nil
509515
default['gitlab']['gitlab_rails']['redis_actioncable_cluster_nodes'] = []
510516
default['gitlab']['gitlab_rails']['redis_actioncable_ssl'] = false
511517
default['gitlab']['gitlab_rails']['redis_actioncable_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -518,6 +524,7 @@
518524
default['gitlab']['gitlab_rails']['redis_rate_limiting_username'] = nil
519525
default['gitlab']['gitlab_rails']['redis_rate_limiting_password'] = nil
520526
default['gitlab']['gitlab_rails']['redis_rate_limiting_encrypted_settings_file'] = nil
527+
default['gitlab']['gitlab_rails']['redis_rate_limiting_extra_config_command'] = nil
521528
default['gitlab']['gitlab_rails']['redis_rate_limiting_cluster_nodes'] = []
522529
default['gitlab']['gitlab_rails']['redis_rate_limiting_ssl'] = false
523530
default['gitlab']['gitlab_rails']['redis_rate_limiting_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -530,6 +537,7 @@
530537
default['gitlab']['gitlab_rails']['redis_sessions_username'] = nil
531538
default['gitlab']['gitlab_rails']['redis_sessions_password'] = nil
532539
default['gitlab']['gitlab_rails']['redis_sessions_encrypted_settings_file'] = nil
540+
default['gitlab']['gitlab_rails']['redis_sessions_extra_config_command'] = nil
533541
default['gitlab']['gitlab_rails']['redis_sessions_cluster_nodes'] = []
534542
default['gitlab']['gitlab_rails']['redis_sessions_ssl'] = false
535543
default['gitlab']['gitlab_rails']['redis_sessions_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -542,6 +550,7 @@
542550
default['gitlab']['gitlab_rails']['redis_repository_cache_username'] = nil
543551
default['gitlab']['gitlab_rails']['redis_repository_cache_password'] = nil
544552
default['gitlab']['gitlab_rails']['redis_repository_cache_encrypted_settings_file'] = nil
553+
default['gitlab']['gitlab_rails']['redis_repository_cache_extra_config_command'] = nil
545554
default['gitlab']['gitlab_rails']['redis_repository_cache_cluster_nodes'] = []
546555
default['gitlab']['gitlab_rails']['redis_repository_cache_ssl'] = false
547556
default['gitlab']['gitlab_rails']['redis_repository_cache_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -554,6 +563,7 @@
554563
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_username'] = nil
555564
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_password'] = nil
556565
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_encrypted_settings_file'] = nil
566+
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_extra_config_command'] = nil
557567
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_cluster_nodes'] = []
558568
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_ssl'] = false
559569
default['gitlab']['gitlab_rails']['redis_cluster_rate_limiting_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
@@ -566,6 +576,7 @@
566576
default['gitlab']['gitlab_rails']['redis_workhorse_username'] = nil
567577
default['gitlab']['gitlab_rails']['redis_workhorse_password'] = nil
568578
default['gitlab']['gitlab_rails']['redis_workhorse_cluster_nodes'] = []
579+
default['gitlab']['gitlab_rails']['redis_workhorse_extra_config_command'] = nil
569580
default['gitlab']['gitlab_rails']['redis_workhorse_ssl'] = false
570581
default['gitlab']['gitlab_rails']['redis_workhorse_tls_ca_cert_dir'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_dir'].dup
571582
default['gitlab']['gitlab_rails']['redis_workhorse_tls_ca_cert_file'] = default['gitlab']['gitlab_rails']['redis_tls_ca_cert_file'].dup

files/gitlab-cookbooks/gitlab/libraries/gitlab_rails.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def parse_variables
3535
parse_incoming_email_logfile
3636
parse_service_desk_email_logfile
3737
parse_maximum_request_duration
38+
parse_redis_extra_config_command
3839
validate_smtp_settings!
3940
validate_ssh_settings!
4041
end
@@ -337,6 +338,12 @@ def parse_encrypted_settings_path
337338
Gitlab['gitlab_rails']['redis_encrypted_settings_file'] ||= File.join(encrypted_settings_path, 'redis.yml.enc')
338339
end
339340

341+
def parse_redis_extra_config_command
342+
RedisHelper::REDIS_INSTANCES.each do |instance|
343+
Gitlab['gitlab_rails']["redis_#{instance}_extra_config_command"] ||= Gitlab['gitlab_rails']['redis_extra_config_command']
344+
end
345+
end
346+
340347
def parse_pages_dir
341348
# This requires the parse_shared_dir to be executed before
342349
Gitlab['gitlab_rails']['pages_path'] ||= File.join(Gitlab['gitlab_rails']['shared_path'], 'pages')

files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@
218218
redis_tls_client_cert_file = node['gitlab']['gitlab_rails']['redis_tls_client_cert_file']
219219
redis_tls_client_key_file = node['gitlab']['gitlab_rails']['redis_tls_client_key_file']
220220
redis_encrypted_settings_file = node['gitlab']['gitlab_rails']['redis_encrypted_settings_file']
221+
redis_extra_config_command = node['gitlab']['gitlab_rails']['redis_extra_config_command']
221222

222223
templatesymlink "Create a secrets.yml and create a symlink to Rails root" do
223224
link_from File.join(gitlab_rails_source_dir, "config/secrets.yml")
@@ -255,7 +256,8 @@
255256
redis_tls_ca_cert_file: redis_tls_ca_cert_file,
256257
redis_tls_client_cert_file: redis_tls_client_cert_file,
257258
redis_tls_client_key_file: redis_tls_client_key_file,
258-
redis_encrypted_settings_file: redis_encrypted_settings_file
259+
redis_encrypted_settings_file: redis_encrypted_settings_file,
260+
redis_extra_config_command: redis_extra_config_command
259261
)
260262
dependent_services.each { |svc| notifies :restart, svc }
261263
sensitive true
@@ -308,6 +310,7 @@
308310
certificate_file = node['gitlab']['gitlab_rails']["redis_#{instance}_tls_client_cert_file"]
309311
key_file = node['gitlab']['gitlab_rails']["redis_#{instance}_tls_client_key_file"]
310312
instance_encrypted_settings_file = node['gitlab']['gitlab_rails']["redis_#{instance}_encrypted_settings_file"]
313+
instance_extra_config_command = node['gitlab']['gitlab_rails']["redis_#{instance}_extra_config_command"]
311314
from_filename = File.join(gitlab_rails_source_dir, "config/#{filename}")
312315
to_filename = File.join(gitlab_rails_etc_dir, filename)
313316

@@ -333,7 +336,8 @@
333336
redis_tls_ca_cert_file: ca_cert_file,
334337
redis_tls_client_cert_file: certificate_file,
335338
redis_tls_client_key_file: key_file,
336-
redis_encrypted_settings_file: instance_encrypted_settings_file
339+
redis_encrypted_settings_file: instance_encrypted_settings_file,
340+
redis_extra_config_command: instance_extra_config_command
337341
)
338342
dependent_services.each { |svc| notifies :restart, svc }
339343
action :delete if url.nil? && clusters.empty?

files/gitlab-cookbooks/gitlab/templates/default/resque.yml.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
production:
2+
<%- if @redis_extra_config_command -%>
3+
config_command: "<%= @redis_extra_config_command %>"
4+
<%- end -%>
25
<% if !@redis_enable_client %>
36
id:
47
<% end %>

spec/chef/cookbooks/gitlab/recipes/gitlab-rails_spec.rb

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,8 @@
441441
redis_tls_ca_cert_file: "/opt/gitlab/embedded/ssl/certs/cacert.pem",
442442
redis_tls_client_cert_file: nil,
443443
redis_tls_client_key_file: nil,
444-
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc"
444+
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc",
445+
redis_extra_config_command: nil
445446
)
446447

447448
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/redis.#{instance}.yml").with_content { |content|
@@ -484,7 +485,8 @@
484485
redis_tls_ca_cert_file: "/opt/gitlab/embedded/ssl/certs/cacert.pem",
485486
redis_tls_client_cert_file: nil,
486487
redis_tls_client_key_file: nil,
487-
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc"
488+
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc",
489+
redis_extra_config_command: nil
488490
)
489491

490492
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/redis.#{instance}.yml").with_content { |content|
@@ -527,7 +529,8 @@
527529
redis_tls_ca_cert_file: "/opt/gitlab/embedded/ssl/certs/cacert.pem",
528530
redis_tls_client_cert_file: nil,
529531
redis_tls_client_key_file: nil,
530-
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc"
532+
redis_encrypted_settings_file: "/var/opt/gitlab/gitlab-rails/shared/encrypted_settings/redis.#{instance}.yml.enc",
533+
redis_extra_config_command: nil
531534
)
532535

533536
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/redis.#{instance}.yml").with_content { |content|
@@ -584,6 +587,59 @@
584587
end
585588
end
586589
end
590+
591+
describe 'extra config command' do
592+
let(:cache_command) { '/opt/redis-cache-password.sh' }
593+
let(:global_command) { '/opt/redis-global.sh' }
594+
595+
context 'with single Redis instance' do
596+
before do
597+
stub_gitlab_rb(
598+
gitlab_rails: {
599+
redis_extra_config_command: global_command
600+
}
601+
)
602+
end
603+
604+
it 'populates resque.yml with specified config command' do
605+
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/resque.yml").with_content { |content|
606+
generated_yml = YAML.safe_load(content)
607+
expect(generated_yml.dig('production', 'config_command')).to eq(global_command)
608+
}
609+
end
610+
end
611+
612+
context 'with separate command for an instance' do
613+
cached(:chef_run) do
614+
ChefSpec::SoloRunner.new(step_into: %w(templatesymlink)).converge('gitlab::default')
615+
end
616+
617+
before do
618+
stub_gitlab_rb(
619+
gitlab_rails: {
620+
redis_extra_config_command: global_command,
621+
redis_cache_instance: 'redis://redis.cache.instance',
622+
redis_cache_extra_config_command: cache_command,
623+
redis_shared_state_instance: 'redis://redis.shared_state.instance'
624+
}
625+
)
626+
end
627+
628+
it 'uses specified command for the cache instance' do
629+
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/redis.cache.yml").with_content { |content|
630+
generated_yml = YAML.safe_load(content)
631+
expect(generated_yml.dig('production', 'config_command')).to eq(cache_command)
632+
}
633+
end
634+
635+
it 'uses global command for the shared state instance' do
636+
expect(chef_run).to render_file("/var/opt/gitlab/gitlab-rails/etc/redis.shared_state.yml").with_content { |content|
637+
generated_yml = YAML.safe_load(content)
638+
expect(generated_yml.dig('production', 'config_command')).to eq(global_command)
639+
}
640+
end
641+
end
642+
end
587643
end
588644

589645
context 'redis.yml override' do

0 commit comments

Comments
 (0)