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