62 lines
1.5 KiB
Ruby
62 lines
1.5 KiB
Ruby
require_relative 'category_provider'
|
|
require "commands/image"
|
|
|
|
module Devops
|
|
module Model
|
|
class CategoryCloudProvider < CategoryProvider
|
|
|
|
include ::ImageCommands
|
|
include ActiveModel::Validations
|
|
|
|
attr_accessor :flavor, :image, :security_groups
|
|
|
|
validate :validate_cloud_params
|
|
|
|
def initialize d={}
|
|
super(d)
|
|
self.flavor = d["flavor"]
|
|
self.image = d["image"]
|
|
# b = d["security_groups"] || ["default"]
|
|
self.security_groups = d["security_groups"]
|
|
end
|
|
|
|
def to_hash
|
|
h = super
|
|
h.merge!({
|
|
"flavor" => self.flavor,
|
|
"image" => self.image,
|
|
"security_groups" => self.security_groups
|
|
})
|
|
end
|
|
|
|
def validate_flavor
|
|
if flavor.nil?
|
|
errors.add(:flavor, "'flavor' is udefined")
|
|
else
|
|
if provider_instance.flavors.detect{|f| f['id'] == flavor}.nil?
|
|
errors.add(:flavor, "'flavor' is invalid")
|
|
end
|
|
end
|
|
end
|
|
|
|
def validate_image
|
|
if image.nil?
|
|
errors.add(:image, "'image' is udefined")
|
|
else
|
|
if get_available_provider_images(self.provider, self.provider_account).detect{|i| i["id"] == @model.image}.nil?
|
|
errors.add(:image, "'image' is invalid")
|
|
end
|
|
end
|
|
end
|
|
|
|
def waiting_server(server, out)
|
|
out << "\nWaiting for a server"
|
|
out.flush
|
|
provider_instance.waiting_server(server, out)
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|