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-02-19 13:26:14 +03:00
|
|
|
settings.mongo.image_insert ::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-02-19 13:26:14 +03:00
|
|
|
image = ::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
|
|
|
|
|
|