Merge pull request #3357 from plribeiro3000/deprecate-xenserver-methods

Deprecation of methods in Xenserver
This commit is contained in:
Wesley Beary 2014-12-22 09:36:55 -06:00
commit aafb83629f
20 changed files with 284 additions and 128 deletions

View File

@ -85,6 +85,7 @@ module Fog
request :destroy_vif
request :clone_server
request :destroy_server
request :destroy_record
request :unplug_vbd
request :eject_vbd
request :insert_vbd

View File

@ -24,6 +24,9 @@ module Fog
attribute :blobs
def refresh
Fog::Logger.deprecation(
'This method is deprecated. Use #reload instead.'
)
data = service.get_record( reference, 'network' )
merge_attributes( data )
true

View File

@ -124,6 +124,9 @@ module Fog
end
def refresh
Fog::Logger.deprecation(
'This method is deprecated. Use #reload instead.'
)
data = service.get_record( reference, 'VM' )
merge_attributes( data )
true

View File

@ -5,14 +5,17 @@ module Fog
def clone_server( server_name, template_ref )
# Clone the VM template
if template_ref.kind_of? Fog::Compute::XenServer::Server
Fog::Logger.deprecation(
'Passing an object to #clone_server is deprecated. Pass the reference instead.'
)
template_ref = template_ref.reference
end
raise ArgumentError.new("Invalid template_ref") if template_ref.nil?
raise ArgumentError.new("Invalid template_ref") if server_name.nil?
ref = @connection.request(
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.clone'},
template_ref, server_name
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.clone'},
template_ref, server_name
)
end
end

View File

@ -7,15 +7,24 @@ module Fog
# @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=network
#
def create_network( name, config = {} )
config.reject! { |k,v| v.nil? }
if name.is_a?(Hash)
default_config = name
default_config.reject! { |_k,v| v.nil? }
else
Fog::Logger.deprecation(
'This api is deprecated. The only expected param is a hash with the attributes.'
)
default_config = {
:name_label => name,
# Description is mandatory in XenAPI but we default to empty
:name_description => config[:description] || '',
# Mandatory, but can be empty
:other_config => {}
}.merge config
config.reject! { |k,v| v.nil? }
default_config = {
:name_label => name,
# Description is mandatory in XenAPI but we default to empty
:name_description => config[:description] || '',
# Mandatory, but can be empty
:other_config => {}
}.merge config
end
@connection.request(
{

View File

@ -3,14 +3,24 @@ module Fog
class XenServer
class Real
def get_vm_by_name(label)
Fog::Logger.deprecation(
'This method is deprecated. Use #get_by_name instead.'
)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.get_by_name_label' }, label)
end
def get_vm_by_uuid(uuid)
Fog::Logger.deprecation(
'This method is deprecated. Use #get_by_uuid instead.'
)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.get_by_uuid' }, uuid)
end
def create_server_raw(config = {})
Fog::Logger.deprecation(
'This method is deprecated. To create a server from scratch, use #create_server.'
)
config[:name_label] = config[:name] if config[:name]
config.delete :name
config[:affinity] = config[:__affinity] if config[:__affinity]
@ -39,71 +49,81 @@ module Fog
end
end
vm_record = {
:name_label => '',
:name_description => 'description',
:user_version => '0',
:affinity => '',
:is_a_template => true,
:auto_power_on => false,
:memory_static_max => '536870912',
:memory_static_min => '536870912',
:memory_dynamic_max => '536870912',
:memory_dynamic_min => '536870912',
:VCPUs_params => {},
:VCPUs_max => '1',
:VCPUs_at_startup => '1',
:actions_after_shutdown => 'Destroy',
:actions_after_reboot => 'Restart',
:actions_after_crash => 'Restart',
:platform => { :'nx' => 'true', :'acpi' => 'true', :'apic' => 'true', :'pae' => 'true', :'viridian' => 'true' },
:other_config => {},
:pool_name => '',
:PV_bootloader => 'pygrub', #pvgrub, eliloader
:PV_kernel => '',
:PV_ramdisk => '',
:PV_args => '-- quiet console=hvc0',
:PV_bootloader_args => '',
:PV_legacy_args => '',
:HVM_boot_policy => '',
:HVM_boot_params => {},
:PCI_bus => '',
:recommendations => '',
:name_label => '',
:name_description => 'description',
:user_version => '0',
:affinity => '',
:is_a_template => true,
:auto_power_on => false,
:memory_static_max => '536870912',
:memory_static_min => '536870912',
:memory_dynamic_max => '536870912',
:memory_dynamic_min => '536870912',
:VCPUs_params => {},
:VCPUs_max => '1',
:VCPUs_at_startup => '1',
:actions_after_shutdown => 'Destroy',
:actions_after_reboot => 'Restart',
:actions_after_crash => 'Restart',
:platform => { :'nx' => 'true', :'acpi' => 'true', :'apic' => 'true', :'pae' => 'true', :'viridian' => 'true' },
:other_config => {},
:pool_name => '',
:PV_bootloader => 'pygrub', #pvgrub, eliloader
:PV_kernel => '',
:PV_ramdisk => '',
:PV_args => '-- quiet console=hvc0',
:PV_bootloader_args => '',
:PV_legacy_args => '',
:HVM_boot_policy => '',
:HVM_boot_params => {},
:PCI_bus => '',
:recommendations => '',
}.merge config
ref = @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.create' }, vm_record)
ref
end
def create_server( name_label, template = nil, networks = [], extra_args = {})
if !networks.kind_of? Array
raise "Invalid networks argument"
end
if name_label.is_a?(Hash)
config = name_label.reject! { |_k,v| v.nil? }
ref = @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.create' }, config)
else
Fog::Logger.deprecation(
'This api is deprecated. The only expected param is a hash with the attributes.' + "\n" +
'To create a server from a template, use #clone_server instead.'
)
if template.kind_of? String
template_string = template
# try template by UUID
template = servers.templates.find { |s| s.uuid == template_string }
if template.nil?
# Try with the template name just in case
template = servers.get get_vm_by_name(template_string)
if !networks.kind_of? Array
raise "Invalid networks argument"
end
end
if template.nil?
raise "Invalid template"
end
if template.kind_of? String
template_string = template
# try template by UUID
template = servers.templates.find { |s| s.uuid == template_string }
if template.nil?
# Try with the template name just in case
template = servers.get get_vm_by_name(template_string)
end
end
raise "Template #{template_string} does not exist" if template.allowed_operations.nil?
raise 'Clone Operation not Allowed' unless template.allowed_operations.include?('clone')
if template.nil?
raise "Invalid template"
end
# Clone the VM template
ref = clone_server name_label, template.reference
# Add additional NICs
networks.each do |n|
create_vif ref, n.reference
end
if !extra_args[:auto_start] == false
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.provision'}, ref)
start_vm( ref )
raise "Template #{template_string} does not exist" if template.allowed_operations.nil?
raise 'Clone Operation not Allowed' unless template.allowed_operations.include?('clone')
# Clone the VM template
ref = clone_server name_label, template.reference
# Add additional NICs
networks.each do |n|
create_vif ref, n.reference
end
if !extra_args[:auto_start] == false
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.provision'}, ref)
start_vm( ref )
end
end
ref

View File

@ -24,40 +24,63 @@ module Fog
#
# @return [String] an OpaqueRef to the storage repository
def create_sr( host_ref,
name_label,
type,
name_description = '',
device_config = {},
physical_size = '0',
content_type = 'user',
shared = false,
sm_config = {} )
@connection.request(
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.create'},
host_ref,
device_config || {},
physical_size || '0',
name_label,
name_description || '',
type,
content_type,
shared || false,
sm_config || {}
)
type = '',
name_description = '',
device_config = {},
physical_size = '0',
content_type = 'user',
shared = false,
sm_config = {} )
if host_ref.is_a?(Hash)
config = host_ref
extra_params = name_label
%i(physical_size name description type content_type shared sm_config).each do |attribute|
raise "Missing Argument in first param: #{attribute}" if config[attribute].nil?
end
%i(host_ref device_config).each do |attribute|
raise "Missing Argument in second param: #{attribute}" if extra_params[attribute].nil?
end
@connection.request({ :parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.create' },
extra_params[:host_ref], extra_params[:device_config], config[:physical_size],
config[:name], config[:description], config[:type], config[:content_type],
config[:shared], config[:sm_config])
else
Fog::Logger.deprecation(
'This api is deprecated. The expected params are two hashes of attributes.' + "\n" +
'To create a server from a template, use #clone_server instead.'
)
@connection.request(
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.create'},
host_ref,
device_config || {},
physical_size || '0',
name_label,
name_description || '',
type,
content_type,
shared || false,
sm_config || {}
)
end
end
end
class Mock
def create_sr( host_ref,
name_label,
type,
name_description = nil,
device_config = {},
physical_size = '0',
content_type = nil,
shared = false,
sm_config = {} )
name_label,
type,
name_description = nil,
device_config = {},
physical_size = '0',
content_type = nil,
shared = false,
sm_config = {} )
Fog::Mock.not_implemented
end
end

View File

@ -2,24 +2,32 @@ module Fog
module Compute
class XenServer
class Real
def create_vbd( vm_ref, vdi_ref, config = {} )
raise ArgumentError.new('Invalid config') if config.nil?
vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Compute::XenServer::Server
vdi_ref = vdi_ref.reference if vdi_ref.kind_of? Fog::Compute::XenServer::VDI
config.reject! { |k,v| (k == :server) or (k == :vdi) }
default_config = {
:VM => vm_ref,
:VDI => vdi_ref,
:empty => false,
:other_config => {'owner' => ''},
:userdevice => "0",
:bootable => true,
:mode => 'RW',
:qos_algorithm_type=> '',
:qos_algorithm_params=> {},
:qos_supported_algorithms=> [],
:type => 'Disk'
}.merge config
def create_vbd( vm_ref, vdi_ref = '', config = {} )
if vm_ref.is_a?(Hash)
default_config = vm_ref.reject! { |_k,v| v.nil? }
else
Fog::Logger.deprecation(
'This api is deprecated. The only expected param is a hash of attributes.'
)
raise ArgumentError.new('Invalid config') if config.nil?
vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Compute::XenServer::Server
vdi_ref = vdi_ref.reference if vdi_ref.kind_of? Fog::Compute::XenServer::VDI
config.reject! { |k,v| (k == :server) or (k == :vdi) }
default_config = {
:VM => vm_ref,
:VDI => vdi_ref,
:empty => false,
:other_config => {'owner' => ''},
:userdevice => "0",
:bootable => true,
:mode => 'RW',
:qos_algorithm_type=> '',
:qos_algorithm_params=> {},
:qos_supported_algorithms=> [],
:type => 'Disk'
}.merge config
end
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VBD.create'}, default_config )
end

View File

@ -3,16 +3,35 @@ module Fog
class XenServer
class Real
def create_vdi( config )
raise ArgumentError.new('Invalid config') if config.nil?
raise ArgumentError.new('Missing virtual_size attribute') if config[:virtual_size].nil?
raise ArgumentError.new('Missing read_only attribute') if config[:read_only].nil?
raise ArgumentError.new('Missing type attribute') if config[:type].nil?
raise ArgumentError.new('Missing sharable attribute') if config[:sharable].nil?
raise ArgumentError.new('Missing other_config attribute') if config[:other_config].nil?
raise ArgumentError.new('Missing storage_repository attribute') if config[:storage_repository].nil?
config[:SR] = config[:storage_repository].reference
config[:name_label] = config[:name]
config[:name_description] = config[:description] if config[:description]
raise ArgumentError.new('Invalid #config') if config.nil?
raise ArgumentError.new('Missing #virtual_size attribute') if config[:virtual_size].nil?
raise ArgumentError.new('Missing #read_only attribute') if config[:read_only].nil?
raise ArgumentError.new('Missing #type attribute') if config[:type].nil?
raise ArgumentError.new('Missing #sharable attribute') if config[:sharable].nil?
raise ArgumentError.new('Missing #other_config attribute') if config[:other_config].nil?
if config[:storage_repository].nil? || config[:SR].nil?
raise ArgumentError.new('Missing #storage_repository or #SR attribute')
end
if config[:storage_repository].present?
Fog::Logger.deprecation(
'The attribute #storage_repository is deprecated. Use #SR instead.'
)
config[:SR] = config[:storage_repository].reference
end
if config[:name].present?
Fog::Logger.deprecation(
'The attribute #name is deprecated. Use #name_label instead.'
)
config[:name_label] = config[:name]
end
if config[:description].present?
Fog::Logger.deprecation(
'The attribute storage_repository is deprecated. Use SR instead.'
)
config[:name_description] = config[:description]
end
config.reject! { |k,v| (k == :__sr) or (k == :storage_repository) }
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VDI.create'}, config )
end

View File

@ -5,18 +5,28 @@ module Fog
def create_vif( vm_ref, network_ref, device = -1)
raise ArgumentError.new('Invalid vm_ref') if vm_ref.nil?
raise ArgumentError.new('Invalid network_ref') if network_ref.nil?
vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Model
network_ref = network_ref.reference if network_ref.kind_of? Fog::Model
vif_config = default_vif_config(vm_ref, network_ref, device.to_s)
if vm_ref.is_a?(Hash)
vif_config = vm_ref.reject! { |_k,v| v.nil? }
else
vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Model
network_ref = network_ref.reference if network_ref.kind_of? Fog::Model
vif_config = default_vif_config(vm_ref, network_ref, device.to_s)
end
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.create'}, vif_config )
end
def create_vif_custom( conf )
raise ArgumentError.new('VIF config is not a Hash') if not conf.kind_of?(Hash)
Fog::Logger.deprecation(
'This method is deprecated. Use #create_vif instead.'
)
raise ArgumentError.new('VIF config is not a Hash') unless conf.kind_of?(Hash)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.create'}, conf )
end
def default_vif_config( vm_ref, network_ref, device_number = '-1' )
Fog::Logger.deprecation(
'This method is deprecatedx.'
)
conf = {
'MAC_autogenerated' => 'True',
'VM' => vm_ref,

View File

@ -7,14 +7,27 @@ module Fog
#
# @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VLAN
#
def create_vlan( pif_ref, vlan_id, network_ref )
def create_vlan( pif_ref, vlan_id, network_ref = '' )
if pif_ref.is_a?(Hash)
config = pif_ref
extra_config = vlan_id
pif_ref = extra_config[:pif_ref]
tag = config[:tag].to_s
network_ref = extra_config[:network_ref]
else
Fog::Logger.deprecation(
'This api is deprecated. The only expected params are two hash of attributes.'
)
tag = vlan_id.to_s
end
@connection.request(
{
:parser => Fog::Parsers::XenServer::Base.new,
:method => 'VLAN.create'
},
pif_ref,
vlan_id.to_s,
tag,
network_ref
)
end

View File

@ -8,6 +8,9 @@ module Fog
# @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=network
#
def destroy_network( ref )
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request(
{
:parser => Fog::Parsers::XenServer::Base.new,

View File

@ -0,0 +1,11 @@
module Fog
module Compute
class XenServer
class Real
def destroy_record(ref, provider_class)
@connection.request({ :parser => Fog::Parsers::XenServer::Base.new, :method => "#{provider_class}.destroy" }, ref)
end
end
end
end
end

View File

@ -3,6 +3,9 @@ module Fog
class XenServer
class Real
def destroy_server( vm_ref , extra_args = {})
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.destroy'}, vm_ref)
end
end

View File

@ -8,6 +8,9 @@ module Fog
# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=SR
#
def destroy_sr( sr_ref )
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request(
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.destroy'},
sr_ref

View File

@ -3,6 +3,9 @@ module Fog
class XenServer
class Real
def destroy_vdi( vdi_ref, extra_args = {})
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VDI.destroy'}, vdi_ref)
end
end

View File

@ -3,6 +3,9 @@ module Fog
class XenServer
class Real
def destroy_vif( ref, extra_args = {})
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.destroy'}, ref)
end
end

View File

@ -7,6 +7,9 @@ module Fog
# @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VLAN
#
def destroy_vlan( ref )
Fog::Logger.deprecation(
'This method is deprecated. Use #destroy_record instead.'
)
@connection.request(
{
:parser => Fog::Parsers::XenServer::Base.new,

View File

@ -11,6 +11,14 @@ module Fog
def get_record_by_ref( ref, klass, options = {} )
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => "#{klass}.get_record"}, ref).merge(:reference => ref)
end
def get_by_name(name, provider_class)
@connection.request({ :parser => Fog::Parsers::XenServer::Base.new, :method => "#{provider_class}.get_by_name_label" }, name)
end
def get_by_uuid(uuid, provider_class)
@connection.request({ :parser => Fog::Parsers::XenServer::Base.new, :method => "#{provider_class}.get_by_uuid" }, uuid)
end
end
class Mock

View File

@ -2,13 +2,20 @@ module Fog
module Compute
class XenServer
class Real
def snapshot_revert( snapshot_ref, extra_args = {})
def revert_server( snapshot_ref, extra_args = {})
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.revert'}, snapshot_ref)
end
def snapshot_revert(snapshot_ref, extra_args = {})
Fog::Logger.deprecation(
'This method is deprecated. Use #revert_server instead.'
)
revert_server(snapshot_ref, extra_args)
end
end
class Mock
def snapshot_revert()
def revert_server()
Fog::Mock.not_implemented
end
end