51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
require "db/exceptions/invalid_record"
|
|
require "db/mongo/models/mongo_model"
|
|
require "commands/image"
|
|
|
|
class Image < MongoModel
|
|
|
|
include ImageCommands
|
|
|
|
attr_accessor :id, :provider, :remote_user, :name, :bootstrap_template
|
|
types :id => {:type => String, :empty => false},
|
|
:provider => {:type => String, :empty => false},
|
|
:remote_user => {:type => String, :empty => false},
|
|
:name => {:type => String, :empty => true},
|
|
:bootstrap_template => {:type => String, :empty => false, :nil => true}
|
|
|
|
def validate!
|
|
super
|
|
images = get_images(DevopsService.mongo, self.provider)
|
|
raise InvalidRecord.new "Invalid image id '#{self.id}' for provider '#{self.provider}', please check image filters" unless images.map{|i| i["id"]}.include?(self.id)
|
|
end
|
|
|
|
def initialize p={}
|
|
self.id = p["id"]
|
|
self.provider = p["provider"]
|
|
self.remote_user = p["remote_user"]
|
|
self.name = p["name"] || ""
|
|
self.bootstrap_template = p["bootstrap_template"]
|
|
end
|
|
|
|
def self.create_from_bson args
|
|
image = Image.new(args)
|
|
image.id = args["_id"]
|
|
image
|
|
end
|
|
|
|
def to_hash_without_id
|
|
o = {
|
|
"provider" => self.provider,
|
|
"name" => self.name,
|
|
"remote_user" => self.remote_user
|
|
}
|
|
o["bootstrap_template"] = self.bootstrap_template
|
|
o
|
|
end
|
|
|
|
def self.create_from_json! json
|
|
Image.new( JSON.parse(json) )
|
|
end
|
|
|
|
end
|