summaryrefslogtreecommitdiff
path: root/lib/gitlab/kubernetes
diff options
context:
space:
mode:
authorAlessio Caiazza <acaiazza@gitlab.com>2017-11-07 15:26:14 +0100
committerAlessio Caiazza <acaiazza@gitlab.com>2017-11-07 17:12:41 +0100
commit8ec618a6ede619d9f75279f03c03b24d106c79c7 (patch)
tree7fe8501fb56edf3f33febe5c0d39019160715293 /lib/gitlab/kubernetes
parent760a154a032319a90e15dcf4d54ec1c1cdde9e1c (diff)
downloadgitlab-ce-8ec618a6ede619d9f75279f03c03b24d106c79c7.tar.gz
Add Helm InstallCommand
Diffstat (limited to 'lib/gitlab/kubernetes')
-rw-r--r--lib/gitlab/kubernetes/helm.rb77
1 files changed, 42 insertions, 35 deletions
diff --git a/lib/gitlab/kubernetes/helm.rb b/lib/gitlab/kubernetes/helm.rb
index 16b2abb7de2..7a50f07f3c5 100644
--- a/lib/gitlab/kubernetes/helm.rb
+++ b/lib/gitlab/kubernetes/helm.rb
@@ -3,27 +3,27 @@ module Gitlab
class Helm
HELM_VERSION = '2.7.0'.freeze
NAMESPACE = 'gitlab-managed-apps'.freeze
- COMMAND_SCRIPT = <<-EOS.freeze
+ INSTALL_DEPS = <<-EOS.freeze
set -eo pipefail
apk add -U ca-certificates openssl >/dev/null
wget -q -O - https://kubernetes-helm.storage.googleapis.com/helm-v${HELM_VERSION}-linux-amd64.tar.gz | tar zxC /tmp >/dev/null
mv /tmp/linux-amd64/helm /usr/bin/
- helm init ${HELM_INIT_OPTS} >/dev/null
- [[ -z "${HELM_COMMAND+x}" ]] || helm ${HELM_COMMAND} >/dev/null
EOS
+ InstallCommand = Struct.new(:name, :install_helm, :chart) do
+ def pod_name
+ "install-#{name}"
+ end
+ end
+
def initialize(kubeclient)
@kubeclient = kubeclient
@namespace = Namespace.new(NAMESPACE, kubeclient)
end
- def init!
- install(OpenStruct.new(name: 'helm'))
- end
-
- def install(app)
+ def install(command)
@namespace.ensure_exists!
- @kubeclient.create_pod(pod_resource(app))
+ @kubeclient.create_pod(pod_resource(command))
end
##
@@ -33,31 +33,27 @@ module Gitlab
#
# values: "Pending", "Running", "Succeeded", "Failed", "Unknown"
#
- def installation_status(app)
- @kubeclient.get_pod(pod_name(app), @namespace.name).status.phase
+ def installation_status(pod_name)
+ @kubeclient.get_pod(pod_name, @namespace.name).status.phase
end
- def installation_log(app)
- @kubeclient.get_pod_log(pod_name(app), @namespace.name).body
+ def installation_log(pod_name)
+ @kubeclient.get_pod_log(pod_name, @namespace.name).body
end
- def delete_installation_pod!(app)
- @kubeclient.delete_pod(pod_name(app), @namespace.name)
+ def delete_installation_pod!(pod_name)
+ @kubeclient.delete_pod(pod_name, @namespace.name)
end
private
- def pod_name(app)
- "install-#{app.name}"
- end
-
- def pod_resource(app)
- labels = { 'gitlab.org/action': 'install', 'gitlab.org/application': app.name }
- metadata = { name: pod_name(app), namespace: @namespace.name, labels: labels }
+ def pod_resource(command)
+ labels = { 'gitlab.org/action': 'install', 'gitlab.org/application': command.name }
+ metadata = { name: command.pod_name, namespace: @namespace.name, labels: labels }
container = {
name: 'helm',
image: 'alpine:3.6',
- env: generate_pod_env(app),
+ env: generate_pod_env(command),
command: %w(/bin/sh),
args: %w(-c $(COMMAND_SCRIPT))
}
@@ -66,23 +62,34 @@ module Gitlab
::Kubeclient::Resource.new(metadata: metadata, spec: spec)
end
- def generate_pod_env(app)
- env = {
+ def generate_pod_env(command)
+ {
HELM_VERSION: HELM_VERSION,
- TILLER_NAMESPACE: NAMESPACE,
- COMMAND_SCRIPT: COMMAND_SCRIPT
- }
+ TILLER_NAMESPACE: @namespace.name,
+ COMMAND_SCRIPT: generate_script(command)
+ }.map { |key, value| { name: key, value: value } }
+ end
- if app.name != 'helm'
- env[:HELM_INIT_OPTS] = '--client-only'
- env[:HELM_COMMAND] = helm_install_comand(app)
- end
+ def generate_script(command)
+ [
+ INSTALL_DEPS,
+ helm_init_command(command),
+ helm_install_command(command)
+ ].join("\n")
+ end
- env.map { |key, value| { name: key, value: value } }
+ def helm_init_command(command)
+ if command.install_helm
+ 'helm init >/dev/null'
+ else
+ 'helm init --client-only >/dev/null'
+ end
end
- def helm_install_comand(app)
- "install #{app.chart} --name #{app.name} --namespace #{NAMESPACE}"
+ def helm_install_command(command)
+ return if command.chart.nil?
+
+ "helm install #{command.chart} --name #{command.name} --namespace #{@namespace.name} >/dev/null"
end
end
end