summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlessio Caiazza <acaiazza@gitlab.com>2017-11-07 13:50:39 +0100
committerAlessio Caiazza <acaiazza@gitlab.com>2017-11-07 14:05:58 +0100
commit3f261a499e37daf81716f9c3f8e71db7afdf0d5c (patch)
tree6c7ab6f918236d7da125c23eaf6cf5863b6e4444 /lib
parenta03b5d2291a11a23182576308897d2a8f909c970 (diff)
downloadgitlab-ce-3f261a499e37daf81716f9c3f8e71db7afdf0d5c.tar.gz
Add k8s namespace implementation and tests
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/kubernetes/helm.rb31
-rw-r--r--lib/gitlab/kubernetes/namespace.rb29
2 files changed, 35 insertions, 25 deletions
diff --git a/lib/gitlab/kubernetes/helm.rb b/lib/gitlab/kubernetes/helm.rb
index 76bb14a0609..16b2abb7de2 100644
--- a/lib/gitlab/kubernetes/helm.rb
+++ b/lib/gitlab/kubernetes/helm.rb
@@ -14,6 +14,7 @@ module Gitlab
def initialize(kubeclient)
@kubeclient = kubeclient
+ @namespace = Namespace.new(NAMESPACE, kubeclient)
end
def init!
@@ -21,7 +22,7 @@ module Gitlab
end
def install(app)
- create_namespace! unless has_namespace?
+ @namespace.ensure_exists!
@kubeclient.create_pod(pod_resource(app))
end
@@ -33,15 +34,15 @@ module Gitlab
# values: "Pending", "Running", "Succeeded", "Failed", "Unknown"
#
def installation_status(app)
- @kubeclient.get_pod(pod_name(app), NAMESPACE).status.phase
+ @kubeclient.get_pod(pod_name(app), @namespace.name).status.phase
end
def installation_log(app)
- @kubeclient.get_pod_log(pod_name(app), NAMESPACE).body
+ @kubeclient.get_pod_log(pod_name(app), @namespace.name).body
end
def delete_installation_pod!(app)
- @kubeclient.delete_pod(pod_name(app), NAMESPACE)
+ @kubeclient.delete_pod(pod_name(app), @namespace.name)
end
private
@@ -52,7 +53,7 @@ module Gitlab
def pod_resource(app)
labels = { 'gitlab.org/action': 'install', 'gitlab.org/application': app.name }
- metadata = { name: pod_name(app), namespace: NAMESPACE, labels: labels }
+ metadata = { name: pod_name(app), namespace: @namespace.name, labels: labels }
container = {
name: 'helm',
image: 'alpine:3.6',
@@ -83,26 +84,6 @@ module Gitlab
def helm_install_comand(app)
"install #{app.chart} --name #{app.name} --namespace #{NAMESPACE}"
end
-
- def has_namespace?
- return @has_namespace if defined?(@has_namespace)
-
- begin
- @kubeclient.get_namespace(NAMESPACE)
- @has_namespace = true
- rescue KubeException => ke
- raise ke unless ke.error_code == 404
- false
- end
- end
-
- def create_namespace!
- namespace_resource = ::Kubeclient::Resource.new
- namespace_resource.metadata = {}
- namespace_resource.metadata.name = NAMESPACE
-
- @kubeclient.create_namespace(namespace_resource)
- end
end
end
end
diff --git a/lib/gitlab/kubernetes/namespace.rb b/lib/gitlab/kubernetes/namespace.rb
new file mode 100644
index 00000000000..17c6317f32f
--- /dev/null
+++ b/lib/gitlab/kubernetes/namespace.rb
@@ -0,0 +1,29 @@
+module Gitlab
+ module Kubernetes
+ class Namespace
+ attr_accessor :name
+
+ def initialize(name, client)
+ self.name = name
+ @client = client
+ end
+
+ def exists?
+ @client.get_namespace(name)
+ rescue ::KubeException => ke
+ raise ke unless ke.error_code == 404
+ false
+ end
+
+ def create!
+ resource = ::Kubeclient::Resource.new(metadata: { name: name })
+
+ @client.create_namespace(resource)
+ end
+
+ def ensure_exists!
+ exists? || create!
+ end
+ end
+ end
+end