1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/xenserver/compute.rb
2012-04-10 08:01:17 +02:00

120 lines
3.1 KiB
Ruby

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'xenserver'))
require 'fog/compute'
module Fog
module Compute
class XenServer < Fog::Service
require 'fog/xenserver/utilities'
require 'fog/xenserver/parser'
requires :xenserver_username
requires :xenserver_password
requires :xenserver_url
recognizes :xenserver_defaults
model_path 'fog/xenserver/models/compute'
model :server
collection :servers
model :host
collection :hosts
collection :vifs
model :vif
collection :storage_repositories
model :storage_repository
collection :pools
model :pool
collection :vbds
model :vbd
collection :vdis
model :vdi
collection :networks
model :network
collection :pifs
model :pif
collection :pbds
model :pbd
model :guest_metrics
model :vbd_metrics
request_path 'fog/xenserver/requests/compute'
request :create_server
request :create_vif
request :create_vdi
request :destroy_vif
request :clone_server
request :destroy_server
request :unplug_vbd
request :eject_vbd
request :insert_vbd
request :destroy_vdi
request :shutdown_server
request :start_vm
request :start_server
request :get_record
request :get_records
request :set_affinity
request :reboot_server
class Real
attr_accessor :default_template
def initialize(options={})
@host = options[:xenserver_url]
@username = options[:xenserver_username]
@password = options[:xenserver_password]
@defaults = options[:xenserver_defaults] || {}
@connection = Fog::XenServer::Connection.new(@host)
@connection.authenticate(@username, @password)
end
def reload
@connection.authenticate(@username, @password)
end
def default_template=(name)
@defaults[:template] = name
end
def default_template
return nil if @defaults[:template].nil?
(servers.custom_templates + servers.builtin_templates).find do |s|
(s.name == @defaults[:template]) or (s.uuid == @defaults[:template])
end
end
def default_network
net = networks.find { |n| n.name == (@defaults[:network] || "Pool-wide network associated with eth0") }
end
end
class Mock
def self.data
@data ||= Hash.new do |hash, key|
hash[key] = {}
end
end
def self.reset_data(keys=data.keys)
for key in [*keys]
data.delete(key)
end
end
def initialize(options={})
@host = options[:xenserver_pool_master]
@username = options[:xenserver_username]
@password = options[:xenserver_password]
@connection = Fog::Connection.new(@host)
@connection.authenticate(@username, @password)
end
end
end
end
end