68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.8 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 { | ||
|  |             images = settings.mongo.images(params[:provider]) | ||
|  |             json(images.map {|i| i.to_hash}) | ||
|  |           } | ||
|  |         end | ||
|  | 
 | ||
|  |         def self.get_provider_images | ||
|  |           lambda { | ||
|  |             json get_images(settings.mongo, params[:provider]) | ||
|  |           } | ||
|  |         end | ||
|  | 
 | ||
|  |         def self.get_image | ||
|  |           lambda { | ||
|  |             json settings.mongo.image(params[:image_id]) | ||
|  |           } | ||
|  |         end | ||
|  | 
 | ||
|  |         def self.create_image | ||
|  |           lambda { | ||
|  |             image = create_object_from_json_body | ||
|  |             settings.mongo.image_insert Image.new(image) | ||
|  |             create_response "Created", nil, 201
 | ||
|  |           } | ||
|  |         end | ||
|  | 
 | ||
|  |         def self.update_image | ||
|  |           lambda { | ||
|  |             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 { | ||
|  |             projects = settings.mongo.projects_by_image params[:image_id] | ||
|  |             unless projects.empty? | ||
|  |               ar = [] | ||
|  |               projects.each do |p| | ||
|  |                 ar += p.deploy_envs.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 | ||
|  | 
 |