76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 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 ::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
 | |
| 
 | 
