Schedule k8s application installation with a service

This commit is contained in:
Alessio Caiazza 2017-11-03 11:10:50 +01:00
parent 1ca9aaf860
commit 49210dfff1
No known key found for this signature in database
GPG Key ID: 8655B9CB5B8B512E
4 changed files with 42 additions and 9 deletions

View File

@ -5,12 +5,12 @@ class Projects::Clusters::ApplicationsController < Projects::ApplicationControll
before_action :authorize_create_cluster!, only: [:create]
def create
return render_404 if application
respond_to do |format|
format.json do
# TODO: Do that via Service
if application_class.create(cluster: cluster).persisted?
scheduled = Clusters::Applications::ScheduleInstallationService.new(project, current_user,
application_class: @application_class,
cluster: @cluster).execute
if scheduled
head :no_data
else
head :bad_request
@ -26,10 +26,6 @@ class Projects::Clusters::ApplicationsController < Projects::ApplicationControll
end
def application_class
Clusters::Cluster::APPLICATIONS[params[:application]] || render_404
end
def application
application_class.find_by(cluster: cluster)
@application_class ||= Clusters::Cluster::APPLICATIONS[params[:application]] || render_404
end
end

View File

@ -11,6 +11,8 @@ module Clusters
default_value_for :version, Gitlab::Kubernetes::Helm::HELM_VERSION
validates :cluster, presence: true
def name
NAME
end

View File

@ -23,6 +23,14 @@ module Clusters
transition any - [:errored] => :errored
end
event :make_scheduled do
transition %i(installable errored) => :scheduled
end
before_transition any => [:scheduled] do |app_status, _|
app_status.status_reason = nil
end
before_transition any => [:errored] do |app_status, transition|
status_reason = transition.args.first
app_status.status_reason = status_reason if status_reason

View File

@ -0,0 +1,27 @@
module Clusters
module Applications
class ScheduleInstallationService < ::BaseService
def execute
application = application_class.find_or_create_by!(cluster: cluster)
application.make_scheduled!
ClusterInstallAppWorker.perform_async(application.name, application.id)
true
rescue ActiveRecord::RecordInvalid
false
rescue StateMachines::InvalidTransition
false
end
private
def application_class
params[:application_class]
end
def cluster
params[:cluster]
end
end
end
end