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 ::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 = ::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