fluke/devops-service/routes/v2.0/handlers/image.rb
2015-03-11 15:10:05 +03:00

76 lines
2.3 KiB
Ruby

require "providers/provider_factory"
require "commands/image"
module Devops
module Version2_0
module Handler
class Image
extend ImageCommands
def self.get_images
lambda {
check_privileges("image", "r")
check_provider(params[:provider]) if params[:provider]
images = settings.mongo.images(params[:provider])
json(images.map {|i| i.to_hash})
}
end
def self.get_provider_images
lambda {
check_privileges("image", "r")
check_provider(params[:provider])
json Image.get_available_provider_images(settings.mongo, params[:provider])
}
end
def self.get_image
lambda {
check_privileges("image", "r")
json settings.mongo.image(params[:image_id])
}
end
def self.create_image
lambda {
check_privileges("image", "w")
image = create_object_from_json_body
settings.mongo.image_insert Devops::Model::Image.new(image)
create_response "Created", nil, 201
}
end
def self.update_image
lambda {
check_privileges("image", "w")
settings.mongo.image params[:image_id]
image = Devops::Model::Image.new(create_object_from_json_body)
image.id = params[:image_id]
settings.mongo.image_update image
create_response("Image '#{params[:image_id]}' has been updated")
}
end
def self.delete_image
lambda {
check_privileges("image", "w")
projects = settings.mongo.projects_by_image params[:image_id]
unless projects.empty?
ar = []
projects.each do |p|
ar += p.deploy_envs.select{|e| e.respond_to?(:image)}.select{|e| e.image == params[:image_id]}.map{|e| "#{p.id}.#{e.identifier}"}
end
raise DependencyError.new "Deleting is forbidden: Image is used in #{ar.join(", ")}"
end
r = settings.mongo.image_delete params[:image_id]
create_response("Image '#{params[:image_id]}' has been removed")
}
end
end
end
end
end