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