diff --git a/files/gitlab-config-template/gitlab.rb.template b/files/gitlab-config-template/gitlab.rb.template index 7b16b294829bab69cfe7ccebd780ef3c153dae41_ZmlsZXMvZ2l0bGFiLWNvbmZpZy10ZW1wbGF0ZS9naXRsYWIucmIudGVtcGxhdGU=..0e66e2b7cc5efb30e876a0e2d0d0ce31c5ca3dec_ZmlsZXMvZ2l0bGFiLWNvbmZpZy10ZW1wbGF0ZS9naXRsYWIucmIudGVtcGxhdGU= 100644 --- a/files/gitlab-config-template/gitlab.rb.template +++ b/files/gitlab-config-template/gitlab.rb.template @@ -765,6 +765,13 @@ # gitlab_rails['databases']['ci']['db_database'] = 'gitlabhq_production' # gitlab_rails['databases']['ci']['database_tasks'] = false +### GitLab ClickHouse connection settings +###! EXPERIMENTAL +# gitlab_rails['clickhouse_databases']['main']['database'] = 'dbname' +# gitlab_rails['clickhouse_databases']['main']['url'] = 'https://example.com/path' +# gitlab_rails['clickhouse_databases']['main']['username'] = 'gitlab' +# gitlab_rails['clickhouse_databases']['main']['password'] = 'password' + ### GitLab Redis settings ###! Connect to your own Redis instance ###! Docs: https://docs.gitlab.com/omnibus/settings/redis.html diff --git a/files/gitlab-cookbooks/gitlab/attributes/default.rb b/files/gitlab-cookbooks/gitlab/attributes/default.rb index 7b16b294829bab69cfe7ccebd780ef3c153dae41_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvYXR0cmlidXRlcy9kZWZhdWx0LnJi..0e66e2b7cc5efb30e876a0e2d0d0ce31c5ca3dec_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvYXR0cmlidXRlcy9kZWZhdWx0LnJi 100644 --- a/files/gitlab-cookbooks/gitlab/attributes/default.rb +++ b/files/gitlab-cookbooks/gitlab/attributes/default.rb @@ -427,6 +427,7 @@ default['gitlab']['gitlab_rails']['db_application_name'] = nil default['gitlab']['gitlab_rails']['databases'] = {} +default['gitlab']['gitlab_rails']['clickhouse_databases'] = {} # Automatic Database Reindexing # See https://docs.gitlab.com/omnibus/settings/database.html#automatic-database-reindexing diff --git a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb index 7b16b294829bab69cfe7ccebd780ef3c153dae41_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvcmVjaXBlcy9naXRsYWItcmFpbHMucmI=..0e66e2b7cc5efb30e876a0e2d0d0ce31c5ca3dec_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvcmVjaXBlcy9naXRsYWItcmFpbHMucmI= 100644 --- a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb +++ b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb @@ -196,6 +196,18 @@ sensitive true end +templatesymlink "Create a clickhouse.yml and create a symlink to Rails root" do + link_from File.join(gitlab_rails_source_dir, "config/click_house.yml") + link_to File.join(gitlab_rails_etc_dir, "click_house.yml") + source "click_house.yml.erb" + owner "root" + group gitlab_group + mode "0640" + variables node['gitlab']['gitlab_rails'].to_hash + dependent_services.each { |svc| notifies :restart, svc } + sensitive true +end + redis_url = redis_helper.redis_url redis_sentinels = node['gitlab']['gitlab_rails']['redis_sentinels'] redis_sentinels_password = node['gitlab']['gitlab_rails']['redis_sentinels_password'] diff --git a/files/gitlab-cookbooks/gitlab/templates/default/click_house.yml.erb b/files/gitlab-cookbooks/gitlab/templates/default/click_house.yml.erb new file mode 100644 index 0000000000000000000000000000000000000000..0e66e2b7cc5efb30e876a0e2d0d0ce31c5ca3dec_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvdGVtcGxhdGVzL2RlZmF1bHQvY2xpY2tfaG91c2UueW1sLmVyYg== --- /dev/null +++ b/files/gitlab-cookbooks/gitlab/templates/default/click_house.yml.erb @@ -0,0 +1,16 @@ +# This file is managed by gitlab-ctl. Manual changes will be +# erased! To change the contents below, edit /etc/gitlab/gitlab.rb +# and run `sudo gitlab-ctl reconfigure`. + +production: + <% @clickhouse_databases.each do |database, attributes| %> + <%= database %>: + database: <%= quote(attributes['database']) %> + url: <%= quote(attributes['url']) %> + username: <%= quote(attributes['username']) %> + password: <%= quote(attributes['password']) %> + variables: + enable_http_compression: 1 + date_time_input_format: basic # needed for CH cloud + <% end %> + diff --git a/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/click_house_yml_spec.rb b/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/click_house_yml_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..0e66e2b7cc5efb30e876a0e2d0d0ce31c5ca3dec_c3BlYy9jaGVmL2Nvb2tib29rcy9naXRsYWIvcmVjaXBlcy9naXRsYWItcmFpbHMvY2xpY2tfaG91c2VfeW1sX3NwZWMucmI= --- /dev/null +++ b/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/click_house_yml_spec.rb @@ -0,0 +1,71 @@ +require 'chef_helper' + +RSpec.describe 'gitlab::gitlab-rails' do + describe 'ClickHouse database settings' do + let(:chef_run) { ChefSpec::SoloRunner.new(step_into: 'templatesymlink').converge('gitlab::default') } + let(:clickhouse_yml_template) { chef_run.template('/var/opt/gitlab/gitlab-rails/etc/click_house.yml') } + let(:clickhouse_yml_file_content) { ChefSpec::Renderer.new(chef_run, clickhouse_yml_template).content } + let(:clickhouse_yml) { YAML.safe_load(clickhouse_yml_file_content, [], [], true, symbolize_names: true) } + + before do + allow(Gitlab).to receive(:[]).and_call_original + allow(File).to receive(:symlink?).and_call_original + end + + context 'with default settings' do + it 'renders empty clickhouse.yml' do + expect(clickhouse_yml[:production]).to eq(nil) + end + end + + context 'with databases setup' do + before do + stub_gitlab_rb( + gitlab_rails: { + clickhouse_databases: { + main: { + database: 'production', + url: 'https://example.com/path', + username: 'gitlab', + password: 'password' + }, + main2: { + database: 'production2', + url: 'https://example.com/path2', + username: 'gitlab2', + password: 'password2' + } + } + } + ) + end + + it 'renders clickhouse.yml using these settings' do + expect(clickhouse_yml[:production]).to eq( + { + main: { + database: 'production', + url: 'https://example.com/path', + username: 'gitlab', + password: 'password', + variables: { + enable_http_compression: 1, + date_time_input_format: "basic" + } + }, + main2: { + database: 'production2', + url: 'https://example.com/path2', + username: 'gitlab2', + password: 'password2', + variables: { + enable_http_compression: 1, + date_time_input_format: "basic" + } + } + } + ) + end + end + end +end