fog-xenserver 0.0.1.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +1 -0
- data/Gemfile +4 -0
- data/LICENSE.md +20 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/fog-xenserver.gemspec +26 -0
- data/lib/fog.rb +3 -0
- data/lib/fog/compute.rb +7 -0
- data/lib/fog/xenserver.rb +1 -0
- data/lib/fog/xenserver/compute.rb +176 -0
- data/lib/fog/xenserver/core.rb +84 -0
- data/lib/fog/xenserver/examples/README.md +11 -0
- data/lib/fog/xenserver/examples/chage_default_storage_repository.md +99 -0
- data/lib/fog/xenserver/examples/creating_servers.md +168 -0
- data/lib/fog/xenserver/examples/getting_started.md +163 -0
- data/lib/fog/xenserver/examples/networks-and-vlans.rb +45 -0
- data/lib/fog/xenserver/examples/storage_repositories.md +94 -0
- data/lib/fog/xenserver/models/compute/blob.rb +22 -0
- data/lib/fog/xenserver/models/compute/blobs.rb +25 -0
- data/lib/fog/xenserver/models/compute/bond.rb +23 -0
- data/lib/fog/xenserver/models/compute/bonds.rb +25 -0
- data/lib/fog/xenserver/models/compute/console.rb +29 -0
- data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
- data/lib/fog/xenserver/models/compute/crash_dump.rb +19 -0
- data/lib/fog/xenserver/models/compute/crash_dumps.rb +25 -0
- data/lib/fog/xenserver/models/compute/dr_task.rb +17 -0
- data/lib/fog/xenserver/models/compute/dr_tasks.rb +25 -0
- data/lib/fog/xenserver/models/compute/gpu_group.rb +22 -0
- data/lib/fog/xenserver/models/compute/gpu_groups.rb +25 -0
- data/lib/fog/xenserver/models/compute/guest_metrics.rb +29 -0
- data/lib/fog/xenserver/models/compute/host.rb +159 -0
- data/lib/fog/xenserver/models/compute/host_cpu.rb +38 -0
- data/lib/fog/xenserver/models/compute/host_crash_dump.rb +20 -0
- data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +25 -0
- data/lib/fog/xenserver/models/compute/host_metrics.rb +29 -0
- data/lib/fog/xenserver/models/compute/host_patch.rb +25 -0
- data/lib/fog/xenserver/models/compute/host_patchs.rb +25 -0
- data/lib/fog/xenserver/models/compute/hosts.rb +29 -0
- data/lib/fog/xenserver/models/compute/network.rb +92 -0
- data/lib/fog/xenserver/models/compute/networks.rb +33 -0
- data/lib/fog/xenserver/models/compute/pbd.rb +40 -0
- data/lib/fog/xenserver/models/compute/pbds.rb +33 -0
- data/lib/fog/xenserver/models/compute/pci.rb +22 -0
- data/lib/fog/xenserver/models/compute/pcis.rb +25 -0
- data/lib/fog/xenserver/models/compute/pgpu.rb +20 -0
- data/lib/fog/xenserver/models/compute/pgpus.rb +25 -0
- data/lib/fog/xenserver/models/compute/pif.rb +57 -0
- data/lib/fog/xenserver/models/compute/pif_metrics.rb +28 -0
- data/lib/fog/xenserver/models/compute/pifs.rb +33 -0
- data/lib/fog/xenserver/models/compute/pifs_metrics.rb +25 -0
- data/lib/fog/xenserver/models/compute/pool.rb +79 -0
- data/lib/fog/xenserver/models/compute/pool_patch.rb +24 -0
- data/lib/fog/xenserver/models/compute/pool_patchs.rb +25 -0
- data/lib/fog/xenserver/models/compute/pools.rb +33 -0
- data/lib/fog/xenserver/models/compute/role.rb +19 -0
- data/lib/fog/xenserver/models/compute/roles.rb +25 -0
- data/lib/fog/xenserver/models/compute/server.rb +250 -0
- data/lib/fog/xenserver/models/compute/server_appliance.rb +21 -0
- data/lib/fog/xenserver/models/compute/server_appliances.rb +25 -0
- data/lib/fog/xenserver/models/compute/servers.rb +68 -0
- data/lib/fog/xenserver/models/compute/storage_manager.rb +28 -0
- data/lib/fog/xenserver/models/compute/storage_managers.rb +25 -0
- data/lib/fog/xenserver/models/compute/storage_repositories.rb +31 -0
- data/lib/fog/xenserver/models/compute/storage_repository.rb +93 -0
- data/lib/fog/xenserver/models/compute/tunnel.rb +20 -0
- data/lib/fog/xenserver/models/compute/tunnels.rb +25 -0
- data/lib/fog/xenserver/models/compute/vbd.rb +91 -0
- data/lib/fog/xenserver/models/compute/vbd_metrics.rb +27 -0
- data/lib/fog/xenserver/models/compute/vbds.rb +33 -0
- data/lib/fog/xenserver/models/compute/vdi.rb +105 -0
- data/lib/fog/xenserver/models/compute/vdis.rb +29 -0
- data/lib/fog/xenserver/models/compute/vif.rb +60 -0
- data/lib/fog/xenserver/models/compute/vifs.rb +29 -0
- data/lib/fog/xenserver/models/compute/vlan.rb +81 -0
- data/lib/fog/xenserver/models/compute/vlans.rb +39 -0
- data/lib/fog/xenserver/models/compute/vmpp.rb +35 -0
- data/lib/fog/xenserver/models/compute/vmpps.rb +25 -0
- data/lib/fog/xenserver/models/compute/vtpm.rb +18 -0
- data/lib/fog/xenserver/models/compute/vtpms.rb +25 -0
- data/lib/fog/xenserver/parser.rb +36 -0
- data/lib/fog/xenserver/parsers/get_hosts.rb +19 -0
- data/lib/fog/xenserver/parsers/get_networks.rb +19 -0
- data/lib/fog/xenserver/parsers/get_pools.rb +19 -0
- data/lib/fog/xenserver/parsers/get_records.rb +19 -0
- data/lib/fog/xenserver/parsers/get_storage_repositories.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vbds.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vifs.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vms.rb +20 -0
- data/lib/fog/xenserver/requests/compute/clone_server.rb +31 -0
- data/lib/fog/xenserver/requests/compute/create_network.rb +42 -0
- data/lib/fog/xenserver/requests/compute/create_server.rb +130 -0
- data/lib/fog/xenserver/requests/compute/create_sr.rb +72 -0
- data/lib/fog/xenserver/requests/compute/create_vbd.rb +40 -0
- data/lib/fog/xenserver/requests/compute/create_vdi.rb +33 -0
- data/lib/fog/xenserver/requests/compute/create_vif.rb +57 -0
- data/lib/fog/xenserver/requests/compute/create_vlan.rb +35 -0
- data/lib/fog/xenserver/requests/compute/destroy_network.rb +33 -0
- data/lib/fog/xenserver/requests/compute/destroy_server.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_sr.rb +30 -0
- data/lib/fog/xenserver/requests/compute/destroy_vdi.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_vif.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_vlan.rb +32 -0
- data/lib/fog/xenserver/requests/compute/disable_host.rb +29 -0
- data/lib/fog/xenserver/requests/compute/eject_vbd.rb +22 -0
- data/lib/fog/xenserver/requests/compute/enable_host.rb +28 -0
- data/lib/fog/xenserver/requests/compute/get_record.rb +29 -0
- data/lib/fog/xenserver/requests/compute/get_records.rb +30 -0
- data/lib/fog/xenserver/requests/compute/insert_vbd.rb +22 -0
- data/lib/fog/xenserver/requests/compute/provision_server.rb +21 -0
- data/lib/fog/xenserver/requests/compute/reboot_host.rb +23 -0
- data/lib/fog/xenserver/requests/compute/reboot_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/scan_sr.rb +22 -0
- data/lib/fog/xenserver/requests/compute/set_affinity.rb +25 -0
- data/lib/fog/xenserver/requests/compute/set_attribute.rb +25 -0
- data/lib/fog/xenserver/requests/compute/shutdown_host.rb +23 -0
- data/lib/fog/xenserver/requests/compute/shutdown_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/snapshot_revert.rb +22 -0
- data/lib/fog/xenserver/requests/compute/snapshot_server.rb +22 -0
- data/lib/fog/xenserver/requests/compute/start_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/start_vm.rb +25 -0
- data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +25 -0
- data/lib/fog/xenserver/requests/compute/unplug_vbd.rb +30 -0
- data/lib/fog/xenserver/utilities.rb +8 -0
- data/lib/fog/xenserver/version.rb +5 -0
- metadata +228 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
class ServerAppliance < Fog::Model
|
|
7
|
+
# API Reference here:
|
|
8
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VM_appliance
|
|
9
|
+
|
|
10
|
+
identity :reference
|
|
11
|
+
|
|
12
|
+
attribute :allowed_operations
|
|
13
|
+
attribute :current_operations
|
|
14
|
+
attribute :description, :aliases => :name_description
|
|
15
|
+
attribute :name, :aliases => :name_label
|
|
16
|
+
attribute :uuid
|
|
17
|
+
attribute :__vms, :aliases => :VMs
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/server_appliance'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
class ServerAppliances < Fog::Collection
|
|
8
|
+
model Fog::Compute::XenServer::ServerAppliance
|
|
9
|
+
|
|
10
|
+
def all(options={})
|
|
11
|
+
data = service.get_records 'VM_appliance'
|
|
12
|
+
load(data)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get( server_appliance_ref )
|
|
16
|
+
if server_appliance_ref && server_appliance = service.get_record( server_appliance_ref, 'VM_appliance' )
|
|
17
|
+
new(server_appliance)
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/server'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
|
|
8
|
+
class Servers < Fog::Collection
|
|
9
|
+
|
|
10
|
+
model Fog::Compute::XenServer::Server
|
|
11
|
+
|
|
12
|
+
def templates
|
|
13
|
+
data = service.get_records 'VM'
|
|
14
|
+
data.delete_if do |vm|
|
|
15
|
+
!vm[:is_a_template]
|
|
16
|
+
end
|
|
17
|
+
load(data)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def custom_templates
|
|
21
|
+
data = service.get_records 'VM'
|
|
22
|
+
data.delete_if do |vm|
|
|
23
|
+
!vm[:is_a_template] or !vm[:other_config]['default_template'].nil?
|
|
24
|
+
end
|
|
25
|
+
load(data)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def builtin_templates
|
|
29
|
+
data = service.get_records 'VM'
|
|
30
|
+
data.delete_if do |vm|
|
|
31
|
+
!vm[:is_a_template] or vm[:other_config]['default_template'].nil?
|
|
32
|
+
end
|
|
33
|
+
load(data)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def all(options = {})
|
|
37
|
+
data = service.get_records 'VM'
|
|
38
|
+
# Exclude templates
|
|
39
|
+
data.delete_if { |vm| vm[:is_control_domain] or vm[:is_a_template] }
|
|
40
|
+
data.delete_if { |vm| vm[:is_a_snapshot] and !options[:include_snapshots] }
|
|
41
|
+
data.delete_if { |vm| options[:name_matches] and (vm[:name_label] !~ /#{Regexp.escape(options[:name_matches])}/i ) }
|
|
42
|
+
data.delete_if { |vm| options[:name_equals] and (vm[:name_label] != options[:name_equals] ) }
|
|
43
|
+
load(data)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get_by_name( name )
|
|
47
|
+
ref = service.get_vm_by_name( name )
|
|
48
|
+
get ref
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def get_by_uuid( uuid )
|
|
52
|
+
ref = service.get_vm_by_uuid( uuid )
|
|
53
|
+
get ref
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def get( vm_ref )
|
|
57
|
+
if vm_ref && vm = service.get_record( vm_ref, 'VM' )
|
|
58
|
+
new(vm)
|
|
59
|
+
end
|
|
60
|
+
rescue Fog::XenServer::NotFound
|
|
61
|
+
nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
class StorageManager < Fog::Model
|
|
7
|
+
# API Reference here:
|
|
8
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=SM
|
|
9
|
+
|
|
10
|
+
identity :reference
|
|
11
|
+
|
|
12
|
+
attribute :capabilities
|
|
13
|
+
attribute :configuration
|
|
14
|
+
attribute :copyright
|
|
15
|
+
attribute :driver_filename
|
|
16
|
+
attribute :features
|
|
17
|
+
attribute :description, :aliases => :name_description
|
|
18
|
+
attribute :name, :aliases => :name_label
|
|
19
|
+
attribute :other_config
|
|
20
|
+
attribute :required_api_version
|
|
21
|
+
attribute :type
|
|
22
|
+
attribute :uuid
|
|
23
|
+
attribute :vendor
|
|
24
|
+
attribute :version
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/storage_manager'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
class StorageManagers < Fog::Collection
|
|
8
|
+
model Fog::Compute::XenServer::StorageManager
|
|
9
|
+
|
|
10
|
+
def all(options={})
|
|
11
|
+
data = service.get_records 'SM'
|
|
12
|
+
load(data)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get( sm_ref )
|
|
16
|
+
if sm_ref && sm = service.get_record( sm_ref, 'SM' )
|
|
17
|
+
new(sm)
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/storage_repository'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
|
|
8
|
+
class StorageRepositories < Fog::Collection
|
|
9
|
+
|
|
10
|
+
model Fog::Compute::XenServer::StorageRepository
|
|
11
|
+
|
|
12
|
+
def all
|
|
13
|
+
data = service.get_records 'SR'
|
|
14
|
+
#data.delete_if {|sr| sr[:shared].eql?(false)}
|
|
15
|
+
#data.delete_if {|sr| sr[:content_type].eql?('iso')}
|
|
16
|
+
load(data)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get( sr_ref )
|
|
20
|
+
if sr_ref && sr = service.get_record( sr_ref, 'SR' )
|
|
21
|
+
new(sr)
|
|
22
|
+
else
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
|
|
7
|
+
class StorageRepository < Fog::Model
|
|
8
|
+
# API Reference here:
|
|
9
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=SR
|
|
10
|
+
|
|
11
|
+
identity :reference
|
|
12
|
+
|
|
13
|
+
attribute :name, :aliases => :name_label
|
|
14
|
+
attribute :description, :aliases => :name_description
|
|
15
|
+
attribute :uuid
|
|
16
|
+
attribute :blobs
|
|
17
|
+
attribute :allowed_operations
|
|
18
|
+
attribute :current_operations
|
|
19
|
+
attribute :introduced_by
|
|
20
|
+
attribute :local_cache_enabled
|
|
21
|
+
attribute :content_type
|
|
22
|
+
attribute :other_config
|
|
23
|
+
attribute :__pbds, :aliases => :PBDs
|
|
24
|
+
attribute :shared
|
|
25
|
+
attribute :type
|
|
26
|
+
attribute :tags
|
|
27
|
+
attribute :__vdis, :aliases => :VDIs
|
|
28
|
+
attribute :physical_size
|
|
29
|
+
attribute :physical_utilisation
|
|
30
|
+
attribute :sm_config
|
|
31
|
+
attribute :virtual_allocation
|
|
32
|
+
|
|
33
|
+
def vdis
|
|
34
|
+
__vdis.collect { |vdi| service.vdis.get vdi }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def pbds
|
|
38
|
+
__pbds.collect { |pbd| service.pbds.get pbd }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def scan
|
|
42
|
+
service.scan_sr reference
|
|
43
|
+
reload
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def destroy
|
|
47
|
+
service.destroy_sr reference
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def save
|
|
51
|
+
requires :name
|
|
52
|
+
requires :type
|
|
53
|
+
|
|
54
|
+
# host is not a model attribute (not in XAPI at least),
|
|
55
|
+
# but we need it here
|
|
56
|
+
host = attributes[:host]
|
|
57
|
+
raise ArgumentError.new('host is required for this operation') unless
|
|
58
|
+
host
|
|
59
|
+
|
|
60
|
+
# Not sure if this is always required, so not raising exception if nil
|
|
61
|
+
device_config = attributes[:device_config]
|
|
62
|
+
|
|
63
|
+
# create_sr request provides sane defaults if some attributes are
|
|
64
|
+
# missing
|
|
65
|
+
attr = service.get_record(
|
|
66
|
+
service.create_sr( host.reference,
|
|
67
|
+
name,
|
|
68
|
+
type,
|
|
69
|
+
description || '',
|
|
70
|
+
device_config || {},
|
|
71
|
+
physical_size || '0',
|
|
72
|
+
content_type || 'user',
|
|
73
|
+
shared || false,
|
|
74
|
+
sm_config || {}),
|
|
75
|
+
'SR'
|
|
76
|
+
)
|
|
77
|
+
merge_attributes attr
|
|
78
|
+
true
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def set_attribute(name, *val)
|
|
82
|
+
data = service.set_attribute( 'SR', reference, name, *val )
|
|
83
|
+
# Do not reload automatically for performance reasons
|
|
84
|
+
# We can set multiple attributes at the same time and
|
|
85
|
+
# then reload manually
|
|
86
|
+
#reload
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
class Tunnel < Fog::Model
|
|
7
|
+
# API Reference here:
|
|
8
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=tunnel
|
|
9
|
+
|
|
10
|
+
identity :reference
|
|
11
|
+
|
|
12
|
+
attribute :access_pif, :aliases => :access_PIF
|
|
13
|
+
attribute :other_config
|
|
14
|
+
attribute :status
|
|
15
|
+
attribute :transport_pif, :aliases => :transport_PIF
|
|
16
|
+
attribute :uuid
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/tunnel'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
class Tunnels < Fog::Collection
|
|
8
|
+
model Fog::Compute::XenServer::Tunnel
|
|
9
|
+
|
|
10
|
+
def all(options={})
|
|
11
|
+
data = service.get_records 'tunnel'
|
|
12
|
+
load(data)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get( tunnel_ref )
|
|
16
|
+
if tunnel_ref && tunnel = service.get_record( tunnel_ref, 'tunnel' )
|
|
17
|
+
new(tunnel)
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
|
|
7
|
+
class VBD < Fog::Model
|
|
8
|
+
# API Reference here:
|
|
9
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VBD
|
|
10
|
+
|
|
11
|
+
identity :reference
|
|
12
|
+
|
|
13
|
+
attribute :uuid
|
|
14
|
+
attribute :currently_attached
|
|
15
|
+
attribute :allowed_operations
|
|
16
|
+
attribute :current_operations
|
|
17
|
+
attribute :__vdi, :aliases => :VDI
|
|
18
|
+
attribute :__vm, :aliases => :VM
|
|
19
|
+
attribute :device
|
|
20
|
+
attribute :status_detail
|
|
21
|
+
attribute :status_code
|
|
22
|
+
attribute :type
|
|
23
|
+
attribute :userdevice
|
|
24
|
+
attribute :empty
|
|
25
|
+
attribute :mode
|
|
26
|
+
attribute :other_config
|
|
27
|
+
attribute :storage_lock
|
|
28
|
+
attribute :runtime_properties
|
|
29
|
+
attribute :unpluggable
|
|
30
|
+
attribute :bootable
|
|
31
|
+
attribute :qos_supported_algorithms
|
|
32
|
+
attribute :qos_algorithm_params
|
|
33
|
+
attribute :qos_algorithm_type
|
|
34
|
+
attribute :qos_supported_algorithms
|
|
35
|
+
attribute :empty
|
|
36
|
+
attribute :__metrics, :aliases => :metrics
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# May return nil
|
|
40
|
+
#
|
|
41
|
+
def vdi
|
|
42
|
+
service.vdis.get __vdi
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# TODO: May it return nil?
|
|
47
|
+
#
|
|
48
|
+
def server
|
|
49
|
+
service.servers.get __vm
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def save
|
|
53
|
+
requires :vdi, :server
|
|
54
|
+
ref = service.create_vbd attributes[:server], attributes[:vdi], attributes
|
|
55
|
+
merge_attributes service.vbds.get(ref).attributes
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def unplug
|
|
59
|
+
service.unplug_vbd reference
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def unplug_force
|
|
63
|
+
service.unplug_force_vbd reference
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def eject
|
|
67
|
+
service.eject_vbd reference
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def insert(vdi)
|
|
71
|
+
service.insert_vbd reference, vdi.reference
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# return nil if the VBD is not attached
|
|
76
|
+
#
|
|
77
|
+
# TODO: Confirm that the VBD_metrics handle is invalid
|
|
78
|
+
# when the VBD is NOT attached. I get a HANDLE_INVALID
|
|
79
|
+
# exception in that case.
|
|
80
|
+
#
|
|
81
|
+
def metrics
|
|
82
|
+
return nil unless currently_attached
|
|
83
|
+
rec = service.get_record( __metrics, 'VBD_metrics' )
|
|
84
|
+
Fog::Compute::XenServer::VbdMetrics.new(rec)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
|
|
7
|
+
class VbdMetrics < Fog::Model
|
|
8
|
+
# API Reference here:
|
|
9
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VBD_metrics
|
|
10
|
+
|
|
11
|
+
identity :reference
|
|
12
|
+
|
|
13
|
+
attribute :uuid
|
|
14
|
+
attribute :last_updated
|
|
15
|
+
attribute :other_config
|
|
16
|
+
attribute :io_read_kbs
|
|
17
|
+
attribute :io_write_kbs
|
|
18
|
+
|
|
19
|
+
def initialize(attributes = {})
|
|
20
|
+
super
|
|
21
|
+
self.last_updated = attributes[:last_updated].to_time
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|