diff options
author | Alessio Caiazza <acaiazza@gitlab.com> | 2017-11-07 13:50:39 +0100 |
---|---|---|
committer | Alessio Caiazza <acaiazza@gitlab.com> | 2017-11-07 14:05:58 +0100 |
commit | 3f261a499e37daf81716f9c3f8e71db7afdf0d5c (patch) | |
tree | 6c7ab6f918236d7da125c23eaf6cf5863b6e4444 /lib | |
parent | a03b5d2291a11a23182576308897d2a8f909c970 (diff) | |
download | gitlab-ce-3f261a499e37daf81716f9c3f8e71db7afdf0d5c.tar.gz |
Add k8s namespace implementation and tests
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/kubernetes/helm.rb | 31 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/namespace.rb | 29 |
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 |