Update config map if already present on install
When an application install fails, and the user retries install, the configmap for the application will already exists. If so, we simply update instead of create.
This commit is contained in:
parent
f76b3106e8
commit
429d3e4952
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Update config map for gitlab managed application if already present on install
|
||||
merge_request: 22969
|
||||
author:
|
||||
type: other
|
|
@ -54,7 +54,11 @@ module Gitlab
|
|||
|
||||
def create_config_map(command)
|
||||
command.config_map_resource.tap do |config_map_resource|
|
||||
kubeclient.create_config_map(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)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -88,6 +92,12 @@ module Gitlab
|
|||
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)
|
||||
kubeclient.get_service_account(resource.metadata.name, resource.metadata.namespace)
|
||||
rescue ::Kubeclient::ResourceNotFoundError
|
||||
|
|
|
@ -36,6 +36,7 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
describe '#install' do
|
||||
before do
|
||||
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_service_account).and_return(nil)
|
||||
allow(client).to receive(:create_cluster_role_binding).and_return(nil)
|
||||
|
@ -57,6 +58,18 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
|
||||
subject.install(command)
|
||||
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
|
||||
|
||||
context 'without a service account' do
|
||||
|
@ -88,8 +101,8 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
|
||||
context 'service account and cluster role binding does not exist' 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_cluster_role_binding').with('tiller-admin').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))
|
||||
end
|
||||
|
||||
it 'creates a service account, followed the cluster role binding on kubeclient' do
|
||||
|
@ -102,8 +115,8 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
|
||||
context 'service account already exists' 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_cluster_role_binding').with('tiller-admin').and_raise(Kubeclient::ResourceNotFoundError.new(404, 'Not found', nil))
|
||||
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))
|
||||
end
|
||||
|
||||
it 'updates the service account, followed by creating the cluster role binding' do
|
||||
|
@ -116,8 +129,8 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
|
||||
context 'service account and cluster role binding already exists' 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_cluster_role_binding').with('tiller-admin').and_return(cluster_role_binding_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)
|
||||
end
|
||||
|
||||
it 'updates the service account, followed by creating the cluster role binding' do
|
||||
|
@ -130,7 +143,7 @@ describe Gitlab::Kubernetes::Helm::Api do
|
|||
|
||||
context 'a non-404 error is thrown' 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
|
||||
|
||||
it 'raises an error' do
|
||||
|
|
Loading…
Reference in New Issue