diff --git a/files/gitlab-cookbooks/gitlab-kas/attributes/default.rb b/files/gitlab-cookbooks/gitlab-kas/attributes/default.rb index 4accb77b78ab5f982488341450cdf0e4fa3213bd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL2F0dHJpYnV0ZXMvZGVmYXVsdC5yYg==..006e6b7d1265fe5a7e8561ae28edbdba04e16c85_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL2F0dHJpYnV0ZXMvZGVmYXVsdC5yYg== 100644 --- a/files/gitlab-cookbooks/gitlab-kas/attributes/default.rb +++ b/files/gitlab-cookbooks/gitlab-kas/attributes/default.rb @@ -9,6 +9,7 @@ default['gitlab_kas']['agent_info_cache_ttl'] = 300 default['gitlab_kas']['agent_info_cache_error_ttl'] = 60 default['gitlab_kas']['gitlab_address'] = '' +default['gitlab_kas']['gitlab_external_url'] = nil default['gitlab_kas']['api_secret_key'] = nil default['gitlab_kas']['listen_address'] = 'localhost:8150' default['gitlab_kas']['listen_network'] = 'tcp' diff --git a/files/gitlab-cookbooks/gitlab-kas/libraries/gitlab_kas.rb b/files/gitlab-cookbooks/gitlab-kas/libraries/gitlab_kas.rb index 4accb77b78ab5f982488341450cdf0e4fa3213bd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL2xpYnJhcmllcy9naXRsYWJfa2FzLnJi..006e6b7d1265fe5a7e8561ae28edbdba04e16c85_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL2xpYnJhcmllcy9naXRsYWJfa2FzLnJi 100644 --- a/files/gitlab-cookbooks/gitlab-kas/libraries/gitlab_kas.rb +++ b/files/gitlab-cookbooks/gitlab-kas/libraries/gitlab_kas.rb @@ -21,6 +21,7 @@ class << self def parse_variables parse_address + parse_gitlab_external_url parse_gitlab_kas_enabled parse_gitlab_kas_external_url parse_gitlab_kas_internal_url @@ -78,6 +79,14 @@ end end + def parse_gitlab_external_url + return if Gitlab['external_url'].nil? + + gitlab_uri = URI(Gitlab['external_url']) + + Gitlab['gitlab_kas']['gitlab_external_url'] ||= "#{gitlab_uri.scheme}://#{gitlab_uri.host}" + end + def parse_secrets # KAS and GitLab expects exactly 32 bytes, encoded with base64 diff --git a/files/gitlab-cookbooks/gitlab-kas/templates/default/gitlab-kas-config.yml.erb b/files/gitlab-cookbooks/gitlab-kas/templates/default/gitlab-kas-config.yml.erb index 4accb77b78ab5f982488341450cdf0e4fa3213bd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL3RlbXBsYXRlcy9kZWZhdWx0L2dpdGxhYi1rYXMtY29uZmlnLnltbC5lcmI=..006e6b7d1265fe5a7e8561ae28edbdba04e16c85_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIta2FzL3RlbXBsYXRlcy9kZWZhdWx0L2dpdGxhYi1rYXMtY29uZmlnLnltbC5lcmI= 100644 --- a/files/gitlab-cookbooks/gitlab-kas/templates/default/gitlab-kas-config.yml.erb +++ b/files/gitlab-cookbooks/gitlab-kas/templates/default/gitlab-kas-config.yml.erb @@ -25,6 +25,7 @@ info_cache_error_ttl: <%= @agent_info_cache_error_ttl %>s gitlab: address: <%= @gitlab_address %> + external_url: <%= @gitlab_external_url %> authentication_secret_file: <%= @authentication_secret_file %> observability: listen: diff --git a/spec/chef/cookbooks/gitlab-kas/recipes/gitlab-kas_spec.rb b/spec/chef/cookbooks/gitlab-kas/recipes/gitlab-kas_spec.rb index 4accb77b78ab5f982488341450cdf0e4fa3213bd_c3BlYy9jaGVmL2Nvb2tib29rcy9naXRsYWIta2FzL3JlY2lwZXMvZ2l0bGFiLWthc19zcGVjLnJi..006e6b7d1265fe5a7e8561ae28edbdba04e16c85_c3BlYy9jaGVmL2Nvb2tib29rcy9naXRsYWIta2FzL3JlY2lwZXMvZ2l0bGFiLWthc19zcGVjLnJi 100644 --- a/spec/chef/cookbooks/gitlab-kas/recipes/gitlab-kas_spec.rb +++ b/spec/chef/cookbooks/gitlab-kas/recipes/gitlab-kas_spec.rb @@ -72,7 +72,10 @@ authentication_secret_file: "/var/opt/gitlab/gitlab-kas/private_api_authentication_secret_file", network: "tcp" }, - } + }, + gitlab: hash_including( + external_url: 'https://gitlab.example.com' + ) ) ) end @@ -243,6 +246,16 @@ external_k8s_proxy_url: 'https://example.com/gitlab/-/kubernetes-agent/k8s-proxy/' ) end + + it 'renders KAS config gitlab external URL correctly' do + expect(gitlab_kas_config_yml).to( + include( + gitlab: hash_including( + external_url: 'https://example.com' + ) + ) + ) + end end context 'with kas url using own sub-domain' do @@ -298,6 +311,22 @@ "gitlab_kas_external_url scheme must be 'ws' or 'wss'" ) end + + it 'renders KAS config gitlab external URL correctly' do + stub_gitlab_rb( + external_url: 'https://gitlab.example.com', + gitlab_kas_external_url: 'wss://kas.gitlab.example.com/', + gitlab_kas: { listen_websocket: true } + ) + + expect(gitlab_kas_config_yml).to( + include( + gitlab: hash_including( + external_url: 'https://gitlab.example.com' + ) + ) + ) + end end end