summaryrefslogtreecommitdiff
path: root/lib/gitlab/kubernetes/helm/api.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/kubernetes/helm/api.rb')
-rw-r--r--lib/gitlab/kubernetes/helm/api.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/gitlab/kubernetes/helm/api.rb b/lib/gitlab/kubernetes/helm/api.rb
index d65374cc23b..2dd74c68075 100644
--- a/lib/gitlab/kubernetes/helm/api.rb
+++ b/lib/gitlab/kubernetes/helm/api.rb
@@ -9,7 +9,11 @@ module Gitlab
def install(command)
namespace.ensure_exists!
+
+ create_service_account(command)
+ create_cluster_role_binding(command)
create_config_map(command)
+
kubeclient.create_pod(command.pod_resource)
end
@@ -41,6 +45,50 @@ module Gitlab
kubeclient.create_config_map(config_map_resource)
end
end
+
+ def create_service_account(command)
+ command.service_account_resource.tap do |service_account_resource|
+ break unless service_account_resource
+
+ if service_account_exists?(service_account_resource)
+ kubeclient.update_service_account(service_account_resource)
+ else
+ kubeclient.create_service_account(service_account_resource)
+ end
+ end
+ end
+
+ def create_cluster_role_binding(command)
+ command.cluster_role_binding_resource.tap do |cluster_role_binding_resource|
+ break unless cluster_role_binding_resource
+
+ if cluster_role_binding_exists?(cluster_role_binding_resource)
+ kubeclient.update_cluster_role_binding(cluster_role_binding_resource)
+ else
+ kubeclient.create_cluster_role_binding(cluster_role_binding_resource)
+ end
+ end
+ end
+
+ def service_account_exists?(resource)
+ resource_exists? do
+ kubeclient.get_service_account(resource.metadata.name, resource.metadata.namespace)
+ end
+ end
+
+ def cluster_role_binding_exists?(resource)
+ resource_exists? do
+ kubeclient.get_cluster_role_binding(resource.metadata.name)
+ end
+ end
+
+ def resource_exists?
+ yield
+ rescue ::Kubeclient::HttpError => e
+ raise e unless e.error_code == 404
+
+ false
+ end
end
end
end