fluke/devops-service/app/api3/handlers/image.rb

64 lines
1.9 KiB
Ruby
Raw Normal View History

2018-04-04 22:44:39 +03:00
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