64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "commands/image"
 | |
| require "db/mongo/models/image"
 | |
| require "app/api3/parsers/image"
 | |
| require_relative "request_handler"
 | |
| 
 | |
| module Devops
 | |
|   module API3
 | |
|     module Handler
 | |
|       class Image < RequestHandler
 | |
| 
 | |
|         set_parser Devops::API3::Parser::ImageParser
 | |
| 
 | |
|         def images
 | |
|           provider = parser.images
 | |
|           if provider
 | |
|             Devops::Model::Image.where(provider: provider)
 | |
|           else
 | |
|             Devops::Model::Image.all
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         def image id
 | |
|           Devops::Model::Image.find(id)
 | |
|         rescue Mongoid::Errors::DocumentNotFound
 | |
|           raise Devops::Exception::RecordNotFound.new("Image with id '#{id}' not found")
 | |
|         end
 | |
| 
 | |
|         def create_image
 | |
|           image = parser.image
 | |
|           image.save!
 | |
|           DevopsLogger.logger.info "Image '#{image.id}' has been created"
 | |
|           image
 | |
|         rescue Mongoid::Errors::Validations => e
 | |
|           raise Devops::Exception::ValidationError.create_from_db_exception(e)
 | |
|         end
 | |
| 
 | |
|         def update_image id
 | |
|           image = image(id)
 | |
|           obj = parser.image
 | |
|           image.update_attributes! obj.to_hash_update
 | |
|           DevopsLogger.logger.info "Image '#{image.id}' has been updated"
 | |
|           image
 | |
|         rescue Mongoid::Errors::Validations => e
 | |
|           raise Devops::Exception::ValidationError.create_from_db_exception(e)
 | |
|         end
 | |
| 
 | |
|         def delete_image id
 | |
|           projects = Devops::Model::Project.find_by('environments.image' => id)
 | |
|           ar = []
 | |
|           projects.each do |p|
 | |
|             ar += p.environments.select{|e| e.respond_to?(:image)}.select{|e| e.image == id}.map{|e| "#{p.id}.#{e.id}"}
 | |
|           end
 | |
|           raise DependencyError.new "Deleting is forbidden: Image is used in #{ar.join(", ")}"
 | |
|         rescue Mongoid::Errors::DocumentNotFound
 | |
|           image(id).delete
 | |
|           DevopsLogger.logger.info "Image '#{id}' has been deleted"
 | |
|         end
 | |
| 
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | 
