mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
0e1daf3ddd
Unlike last attempt this replaces Fog::Connection with Fog::XML::Connection which should be directly compatible. Fog::Connection is there for old PRs but should be removed real soon. Providers using JSON should be able to replace "XML" with "Core" within their code to cut down on the dependency. If I get the time I may attempt to clean up some but testing with Mock will mean that is mostly educated guesswork.
176 lines
4.5 KiB
Ruby
176 lines
4.5 KiB
Ruby
require 'fog/xenserver/core'
|
|
|
|
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
|
|
recognizes :xenserver_timeout
|
|
|
|
model_path 'fog/xenserver/models/compute'
|
|
model :blob
|
|
collection :blobs
|
|
model :bond
|
|
collection :bonds
|
|
model :crash_dump
|
|
collection :crash_dumps
|
|
model :dr_task
|
|
collection :dr_tasks
|
|
model :gpu_group
|
|
collection :gpu_groups
|
|
model :host_crash_dump
|
|
collection :host_crash_dumps
|
|
model :host_patch
|
|
collection :host_patchs
|
|
model :pci
|
|
collection :pcis
|
|
model :pgpu
|
|
collection :pgpus
|
|
model :pif_metrics
|
|
collection :pifs_metrics
|
|
model :pool_patch
|
|
collection :pool_patchs
|
|
model :role
|
|
collection :roles
|
|
model :server
|
|
collection :servers
|
|
model :server_appliance
|
|
collection :server_appliances
|
|
model :storage_manager
|
|
collection :storage_managers
|
|
model :tunnel
|
|
collection :tunnels
|
|
model :vmpp
|
|
collection :vmpps
|
|
model :vtpm
|
|
collection :vtpms
|
|
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
|
|
model :host_metrics
|
|
model :host_cpu
|
|
model :vlan
|
|
collection :vlans
|
|
model :console
|
|
collection :consoles
|
|
|
|
request_path 'fog/xenserver/requests/compute'
|
|
request :create_server
|
|
request :create_vif
|
|
request :create_vdi
|
|
request :create_vbd
|
|
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 :set_attribute
|
|
request :reboot_server
|
|
request :provision_server
|
|
request :scan_sr
|
|
request :unplug_pbd
|
|
request :destroy_sr
|
|
request :create_sr
|
|
request :reboot_host
|
|
request :disable_host
|
|
request :enable_host
|
|
request :shutdown_host
|
|
request :create_network
|
|
request :destroy_network
|
|
request :create_vlan
|
|
request :destroy_vlan
|
|
request :snapshot_server
|
|
request :snapshot_revert
|
|
|
|
class Real
|
|
|
|
def initialize(options={})
|
|
@host = options[:xenserver_url]
|
|
@username = options[:xenserver_username]
|
|
@password = options[:xenserver_password]
|
|
@defaults = options[:xenserver_defaults] || {}
|
|
@timeout = options[:xenserver_timeout] || 30
|
|
@connection = Fog::XenServer::Connection.new(@host, @timeout)
|
|
@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
|
|
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::XML::Connection.new(@host)
|
|
@connection.authenticate(@username, @password)
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|