Commit 5059c15d authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch '53626-update-config-map-on-install-retry' into 'master'

Update config map if already present on install

Closes #53626

See merge request gitlab-org/gitlab-ce!22969
parents ed156528 429d3e49
---
title: Update config map for gitlab managed application if already present on install
merge_request: 22969
author:
type: other
...@@ -54,9 +54,13 @@ module Gitlab ...@@ -54,9 +54,13 @@ module Gitlab
def create_config_map(command) def create_config_map(command)
command.config_map_resource.tap do |config_map_resource| command.config_map_resource.tap do |config_map_resource|
if config_map_exists?(config_map_resource)
kubeclient.update_config_map(config_map_resource)
else
kubeclient.create_config_map(config_map_resource) kubeclient.create_config_map(config_map_resource)
end end
end end
end
def update_config_map(command) def update_config_map(command)
command.config_map_resource.tap do |config_map_resource| command.config_map_resource.tap do |config_map_resource|
...@@ -88,6 +92,12 @@ module Gitlab ...@@ -88,6 +92,12 @@ module Gitlab
end end
end end
def config_map_exists?(resource)
kubeclient.get_config_map(resource.metadata.name, resource.metadata.namespace)
rescue ::Kubeclient::ResourceNotFoundError
false
end
def service_account_exists?(resource) def service_account_exists?(resource)
kubeclient.get_service_account(resource.metadata.name, resource.metadata.namespace) kubeclient.get_service_account(resource.metadata.name, resource.metadata.namespace)
rescue ::Kubeclient::ResourceNotFoundError rescue ::Kubeclient::ResourceNotFoundError
......
...@@ -36,6 +36,7 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -36,6 +36,7 @@ describe Gitlab::Kubernetes::Helm::Api do
describe '#install' do describe '#install' do
before do before do
allow(client).to receive(:create_pod).and_return(nil) allow(client).to receive(:create_pod).and_return(nil)
allow(client).to receive(:get_config_map).and_return(nil)
allow(client).to receive(:create_config_map).and_return(nil) allow(client).to receive(:create_config_map).and_return(nil)
allow(client).to receive(:create_service_account).and_return(nil) allow(client).to receive(:create_service_account).and_return(nil)
allow(client).to receive(:create_cluster_role_binding).and_return(nil) allow(client).to receive(:create_cluster_role_binding).and_return(nil)
...@@ -57,6 +58,18 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -57,6 +58,18 @@ describe Gitlab::Kubernetes::Helm::Api do
subject.install(command) subject.install(command)
end end
context 'config map already exists' do
before do
expect(client).to receive(:get_config_map).with("values-content-configuration-#{application_name}", gitlab_namespace).and_return(resource)
end
it 'updates the config map' do
expect(client).to receive(:update_config_map).with(resource).once
subject.install(command)
end
end
end end
context 'without a service account' do context 'without a service account' do
...@@ -88,8 +101,8 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -88,8 +101,8 @@ describe Gitlab::Kubernetes::Helm::Api do
context 'service account and cluster role binding does not exist' do context 'service account and cluster role binding does not exist' do
before do before do
expect(client).to receive('get_service_account').with('tiller', 'gitlab-managed-apps').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil)) expect(client).to receive(:get_service_account).with('tiller', 'gitlab-managed-apps').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil))
expect(client).to receive('get_cluster_role_binding').with('tiller-admin').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil)) expect(client).to receive(:get_cluster_role_binding).with('tiller-admin').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil))
end end
it 'creates a service account, followed the cluster role binding on kubeclient' do it 'creates a service account, followed the cluster role binding on kubeclient' do
...@@ -102,8 +115,8 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -102,8 +115,8 @@ describe Gitlab::Kubernetes::Helm::Api do
context 'service account already exists' do context 'service account already exists' do
before do before do
expect(client).to receive('get_service_account').with('tiller', 'gitlab-managed-apps').and_return(service_account_resource) expect(client).to receive(:get_service_account).with('tiller', 'gitlab-managed-apps').and_return(service_account_resource)
expect(client).to receive('get_cluster_role_binding').with('tiller-admin').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil)) expect(client).to receive(:get_cluster_role_binding).with('tiller-admin').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil))
end end
it 'updates the service account, followed by creating the cluster role binding' do it 'updates the service account, followed by creating the cluster role binding' do
...@@ -116,8 +129,8 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -116,8 +129,8 @@ describe Gitlab::Kubernetes::Helm::Api do
context 'service account and cluster role binding already exists' do context 'service account and cluster role binding already exists' do
before do before do
expect(client).to receive('get_service_account').with('tiller', 'gitlab-managed-apps').and_return(service_account_resource) expect(client).to receive(:get_service_account).with('tiller', 'gitlab-managed-apps').and_return(service_account_resource)
expect(client).to receive('get_cluster_role_binding').with('tiller-admin').and_return(cluster_role_binding_resource) expect(client).to receive(:get_cluster_role_binding).with('tiller-admin').and_return(cluster_role_binding_resource)
end end
it 'updates the service account, followed by creating the cluster role binding' do it 'updates the service account, followed by creating the cluster role binding' do
...@@ -130,7 +143,7 @@ describe Gitlab::Kubernetes::Helm::Api do ...@@ -130,7 +143,7 @@ describe Gitlab::Kubernetes::Helm::Api do
context 'a non-404 error is thrown' do context 'a non-404 error is thrown' do
before do before do
expect(client).to receive('get_service_account').with('tiller', 'gitlab-managed-apps').and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil)) expect(client).to receive(:get_service_account).with('tiller', 'gitlab-managed-apps').and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil))
end end
it 'raises an error' do it 'raises an error' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment