Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessio Caiazza <acaiazza@gitlab.com>2017-11-02 13:14:10 +0300
committerAlessio Caiazza <acaiazza@gitlab.com>2017-11-02 13:14:39 +0300
commit6950f38f830079199c382c974b51ad73048a6939 (patch)
tree80f4275ba2bfa0a4a8124362003be85d79debe1f /app/services/clusters
parent84f5aaa729d6286252602800a1f9e1bf1e5b47d3 (diff)
Install k8s application with helm running inside the cluster
Diffstat (limited to 'app/services/clusters')
-rw-r--r--app/services/clusters/base_helm_service.rb17
-rw-r--r--app/services/clusters/fetch_app_installation_status_service.rb13
-rw-r--r--app/services/clusters/finalize_app_installation_service.rb15
-rw-r--r--app/services/clusters/install_app_service.rb23
-rw-r--r--app/services/clusters/install_tiller_service.rb24
5 files changed, 92 insertions, 0 deletions
diff --git a/app/services/clusters/base_helm_service.rb b/app/services/clusters/base_helm_service.rb
new file mode 100644
index 00000000000..b8ed52bf376
--- /dev/null
+++ b/app/services/clusters/base_helm_service.rb
@@ -0,0 +1,17 @@
+module Clusters
+ class BaseHelmService
+ attr_accessor :app
+
+ def initialize(app)
+ @app = app
+ end
+
+ protected
+
+ def helm
+ return @helm if defined?(@helm)
+
+ @helm = @app.cluster.helm
+ end
+ end
+end
diff --git a/app/services/clusters/fetch_app_installation_status_service.rb b/app/services/clusters/fetch_app_installation_status_service.rb
new file mode 100644
index 00000000000..e21aa49bb43
--- /dev/null
+++ b/app/services/clusters/fetch_app_installation_status_service.rb
@@ -0,0 +1,13 @@
+module Clusters
+ class FetchAppInstallationStatusService < BaseHelmService
+ def execute
+ return unless app.installing?
+
+ phase = helm.installation_status(app)
+ log = helm.installation_log(app) if phase == 'Failed'
+ yield(phase, log) if block_given?
+ rescue KubeException => ke
+ app.make_errored!("Kubernetes error: #{ke.message}") unless app.errored?
+ end
+ end
+end
diff --git a/app/services/clusters/finalize_app_installation_service.rb b/app/services/clusters/finalize_app_installation_service.rb
new file mode 100644
index 00000000000..c921747febc
--- /dev/null
+++ b/app/services/clusters/finalize_app_installation_service.rb
@@ -0,0 +1,15 @@
+module Clusters
+ class FinalizeAppInstallationService < BaseHelmService
+ def execute
+ helm.delete_installation_pod!(app)
+
+ app.make_errored!('Installation aborted') if aborted?
+ end
+
+ private
+
+ def aborted?
+ app.installing? || app.scheduled?
+ end
+ end
+end
diff --git a/app/services/clusters/install_app_service.rb b/app/services/clusters/install_app_service.rb
new file mode 100644
index 00000000000..dd8556108d4
--- /dev/null
+++ b/app/services/clusters/install_app_service.rb
@@ -0,0 +1,23 @@
+module Clusters
+ class InstallAppService < BaseHelmService
+ def execute
+ return unless app.scheduled?
+
+ begin
+ helm.install(app)
+ if app.make_installing
+ ClusterWaitForAppInstallationWorker.perform_in(
+ ClusterWaitForAppInstallationWorker::INITIAL_INTERVAL, app.name, app.id)
+ else
+ app.make_errored!("Failed to update app record; #{app.errors}")
+ end
+
+ rescue KubeException => ke
+ app.make_errored!("Kubernetes error: #{ke.message}")
+ rescue StandardError => e
+ Rails.logger.warn(e.message)
+ app.make_errored!("Can't start installation process")
+ end
+ end
+ end
+end
diff --git a/app/services/clusters/install_tiller_service.rb b/app/services/clusters/install_tiller_service.rb
new file mode 100644
index 00000000000..ac77a7ea3c2
--- /dev/null
+++ b/app/services/clusters/install_tiller_service.rb
@@ -0,0 +1,24 @@
+module Clusters
+ class InstallTillerService < BaseService
+ def execute
+ ensure_namespace
+ install
+ end
+
+ private
+
+ def kubernetes_service
+ return @kubernetes_service if defined?(@kubernetes_service)
+
+ @kubernetes_service = project&.kubernetes_service
+ end
+
+ def ensure_namespace
+ kubernetes_service&.ensure_namespace!
+ end
+
+ def install
+ kubernetes_service&.helm_client&.init!
+ end
+ end
+end