create_service.rb 922 字节
Newer Older
1 2
module Clusters
  class CreateService < BaseService
S
Shinya Maeda 已提交
3
    attr_reader :access_token
4

S
Shinya Maeda 已提交
5 6
    def execute(access_token)
      @access_token = access_token
7

S
Shinya Maeda 已提交
8
      create_cluster.tap do |cluster|
9
        ClusterProvisionWorker.perform_async(cluster.id) if cluster.persisted?
10
      end
11
    end
S
Shinya Maeda 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

    private

    def create_cluster
      cluster = nil

      ActiveRecord::Base.transaction do
        cluster = Clusters::Cluster.create!(cluster_params)
        cluster.projects << project
      end

      cluster
    rescue ActiveRecord::RecordInvalid => e
      e.record
    end

    def cluster_params
      return @cluster_params if defined?(@cluster_params)

      params[:provider_gcp_attributes][:machine_type] ||=
        GoogleApi::CloudPlatform::Client::DEFAULT_MACHINE_TYPE

      params[:provider_gcp_attributes][:access_token] ||= access_token

      @cluster_params = params.merge(user: current_user)
    end
38 39
  end
end