fluke/devops-service/app/api2/handlers/image.rb

76 lines
2.3 KiB
Ruby
Raw Normal View History

2014-12-22 14:22:04 +03:00
require "providers/provider_factory"
require "commands/image"
module Devops
module Version2_0
module Handler
class Image
extend ImageCommands
def self.get_images
lambda {
2015-02-18 13:15:25 +03:00
check_privileges("image", "r")
check_provider(params[:provider]) if params[:provider]
2014-12-22 14:22:04 +03:00
images = settings.mongo.images(params[:provider])
json(images.map {|i| i.to_hash})
}
end
def self.get_provider_images
lambda {
2015-02-18 13:15:25 +03:00
check_privileges("image", "r")
check_provider(params[:provider])
2015-02-19 13:26:14 +03:00
json Image.get_available_provider_images(settings.mongo, params[:provider])
2014-12-22 14:22:04 +03:00
}
end
def self.get_image
lambda {
2015-02-18 13:15:25 +03:00
check_privileges("image", "r")
2014-12-22 14:22:04 +03:00
json settings.mongo.image(params[:image_id])
}
end
def self.create_image
lambda {
2015-02-18 13:15:25 +03:00
check_privileges("image", "w")
2014-12-22 14:22:04 +03:00
image = create_object_from_json_body
2015-03-11 15:10:05 +03:00
settings.mongo.image_insert Devops::Model::Image.new(image)
2014-12-22 14:22:04 +03:00
create_response "Created", nil, 201
}
end
def self.update_image
lambda {
2015-02-18 13:15:25 +03:00
check_privileges("image", "w")
2014-12-22 14:22:04 +03:00
settings.mongo.image params[:image_id]
2015-03-06 12:20:30 +03:00
image = Devops::Model::Image.new(create_object_from_json_body)
2014-12-22 14:22:04 +03:00
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 {
2015-02-18 13:15:25 +03:00
check_privileges("image", "w")
2014-12-22 14:22:04 +03:00
projects = settings.mongo.projects_by_image params[:image_id]
unless projects.empty?
ar = []
projects.each do |p|
2015-02-19 13:26:14 +03:00
ar += p.deploy_envs.select{|e| e.respond_to?(:image)}.select{|e| e.image == params[:image_id]}.map{|e| "#{p.id}.#{e.identifier}"}
2014-12-22 14:22:04 +03:00
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