Sha256: b63eca5bbc6a2216ffe9f0ee723e10cd1efc57e6e02dceeab21a656f8a8a1e94

Contents?: true

Size: 1.19 KB

Versions: 10

Compression:

Stored size: 1.19 KB

Contents

class Kuroko2::Api::JobInstancesController < Kuroko2::Api::ApplicationController
  include Garage::RestfulActions

  validates :create do
    hash :env, description: 'Env variables to launch an instance' do |env|
      env.values.all? { |v| v.is_a?(String) }
    end
  end

  private

  def require_resources
    protect_resource_as Kuroko2::Api::JobInstanceResource
  end

  def create_resource
    definition = Kuroko2::JobDefinition.find(params[:job_definition_id])
    unless definition.api_allowed?
      raise HTTP::Forbidden.new("#{definition.name} is not allowed to be executed via API")
    end

    instance = definition.create_instance(
      script: definition.script.prepend(env_script),
      launched_by: "instances API (#{basic_user_name})"
    )

    Kuroko2::Api::JobInstanceResource.new(instance)
  end

  def require_resource
    instance = Kuroko2::JobInstance.find(params[:id])
    @resource = Kuroko2::Api::JobInstanceResource.new(instance)
  end

  def env_script
    return '' unless params[:env]

    params[:env].permit!.to_h.map { |key, value|
      "env: #{key}='#{value.gsub("'", "\\\\'")}'"
    }.join("\n").concat("\n")
  end

  # Don't set location header
  def location
    nil
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
kuroko2-0.5.2 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.5.1 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.5.0 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.6 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.5 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.4 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.3 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.2 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.1 app/controllers/kuroko2/api/job_instances_controller.rb
kuroko2-0.4.0 app/controllers/kuroko2/api/job_instances_controller.rb