Skip to content
Snippets Groups Projects
Unverified Commit 49210dff authored by Alessio Caiazza's avatar Alessio Caiazza
Browse files

Schedule k8s application installation with a service

parent 1ca9aaf8
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -11,6 +11,8 @@ module Clusters
 
default_value_for :version, Gitlab::Kubernetes::Helm::HELM_VERSION
 
validates :cluster, presence: true
def name
NAME
end
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment