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.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/CONTRIBUTING.md +18 -0
  6. data/CONTRIBUTORS.md +1 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.md +20 -0
  9. data/README.md +29 -0
  10. data/Rakefile +2 -0
  11. data/fog-xenserver.gemspec +26 -0
  12. data/lib/fog.rb +3 -0
  13. data/lib/fog/compute.rb +7 -0
  14. data/lib/fog/xenserver.rb +1 -0
  15. data/lib/fog/xenserver/compute.rb +176 -0
  16. data/lib/fog/xenserver/core.rb +84 -0
  17. data/lib/fog/xenserver/examples/README.md +11 -0
  18. data/lib/fog/xenserver/examples/chage_default_storage_repository.md +99 -0
  19. data/lib/fog/xenserver/examples/creating_servers.md +168 -0
  20. data/lib/fog/xenserver/examples/getting_started.md +163 -0
  21. data/lib/fog/xenserver/examples/networks-and-vlans.rb +45 -0
  22. data/lib/fog/xenserver/examples/storage_repositories.md +94 -0
  23. data/lib/fog/xenserver/models/compute/blob.rb +22 -0
  24. data/lib/fog/xenserver/models/compute/blobs.rb +25 -0
  25. data/lib/fog/xenserver/models/compute/bond.rb +23 -0
  26. data/lib/fog/xenserver/models/compute/bonds.rb +25 -0
  27. data/lib/fog/xenserver/models/compute/console.rb +29 -0
  28. data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
  29. data/lib/fog/xenserver/models/compute/crash_dump.rb +19 -0
  30. data/lib/fog/xenserver/models/compute/crash_dumps.rb +25 -0
  31. data/lib/fog/xenserver/models/compute/dr_task.rb +17 -0
  32. data/lib/fog/xenserver/models/compute/dr_tasks.rb +25 -0
  33. data/lib/fog/xenserver/models/compute/gpu_group.rb +22 -0
  34. data/lib/fog/xenserver/models/compute/gpu_groups.rb +25 -0
  35. data/lib/fog/xenserver/models/compute/guest_metrics.rb +29 -0
  36. data/lib/fog/xenserver/models/compute/host.rb +159 -0
  37. data/lib/fog/xenserver/models/compute/host_cpu.rb +38 -0
  38. data/lib/fog/xenserver/models/compute/host_crash_dump.rb +20 -0
  39. data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +25 -0
  40. data/lib/fog/xenserver/models/compute/host_metrics.rb +29 -0
  41. data/lib/fog/xenserver/models/compute/host_patch.rb +25 -0
  42. data/lib/fog/xenserver/models/compute/host_patchs.rb +25 -0
  43. data/lib/fog/xenserver/models/compute/hosts.rb +29 -0
  44. data/lib/fog/xenserver/models/compute/network.rb +92 -0
  45. data/lib/fog/xenserver/models/compute/networks.rb +33 -0
  46. data/lib/fog/xenserver/models/compute/pbd.rb +40 -0
  47. data/lib/fog/xenserver/models/compute/pbds.rb +33 -0
  48. data/lib/fog/xenserver/models/compute/pci.rb +22 -0
  49. data/lib/fog/xenserver/models/compute/pcis.rb +25 -0
  50. data/lib/fog/xenserver/models/compute/pgpu.rb +20 -0
  51. data/lib/fog/xenserver/models/compute/pgpus.rb +25 -0
  52. data/lib/fog/xenserver/models/compute/pif.rb +57 -0
  53. data/lib/fog/xenserver/models/compute/pif_metrics.rb +28 -0
  54. data/lib/fog/xenserver/models/compute/pifs.rb +33 -0
  55. data/lib/fog/xenserver/models/compute/pifs_metrics.rb +25 -0
  56. data/lib/fog/xenserver/models/compute/pool.rb +79 -0
  57. data/lib/fog/xenserver/models/compute/pool_patch.rb +24 -0
  58. data/lib/fog/xenserver/models/compute/pool_patchs.rb +25 -0
  59. data/lib/fog/xenserver/models/compute/pools.rb +33 -0
  60. data/lib/fog/xenserver/models/compute/role.rb +19 -0
  61. data/lib/fog/xenserver/models/compute/roles.rb +25 -0
  62. data/lib/fog/xenserver/models/compute/server.rb +250 -0
  63. data/lib/fog/xenserver/models/compute/server_appliance.rb +21 -0
  64. data/lib/fog/xenserver/models/compute/server_appliances.rb +25 -0
  65. data/lib/fog/xenserver/models/compute/servers.rb +68 -0
  66. data/lib/fog/xenserver/models/compute/storage_manager.rb +28 -0
  67. data/lib/fog/xenserver/models/compute/storage_managers.rb +25 -0
  68. data/lib/fog/xenserver/models/compute/storage_repositories.rb +31 -0
  69. data/lib/fog/xenserver/models/compute/storage_repository.rb +93 -0
  70. data/lib/fog/xenserver/models/compute/tunnel.rb +20 -0
  71. data/lib/fog/xenserver/models/compute/tunnels.rb +25 -0
  72. data/lib/fog/xenserver/models/compute/vbd.rb +91 -0
  73. data/lib/fog/xenserver/models/compute/vbd_metrics.rb +27 -0
  74. data/lib/fog/xenserver/models/compute/vbds.rb +33 -0
  75. data/lib/fog/xenserver/models/compute/vdi.rb +105 -0
  76. data/lib/fog/xenserver/models/compute/vdis.rb +29 -0
  77. data/lib/fog/xenserver/models/compute/vif.rb +60 -0
  78. data/lib/fog/xenserver/models/compute/vifs.rb +29 -0
  79. data/lib/fog/xenserver/models/compute/vlan.rb +81 -0
  80. data/lib/fog/xenserver/models/compute/vlans.rb +39 -0
  81. data/lib/fog/xenserver/models/compute/vmpp.rb +35 -0
  82. data/lib/fog/xenserver/models/compute/vmpps.rb +25 -0
  83. data/lib/fog/xenserver/models/compute/vtpm.rb +18 -0
  84. data/lib/fog/xenserver/models/compute/vtpms.rb +25 -0
  85. data/lib/fog/xenserver/parser.rb +36 -0
  86. data/lib/fog/xenserver/parsers/get_hosts.rb +19 -0
  87. data/lib/fog/xenserver/parsers/get_networks.rb +19 -0
  88. data/lib/fog/xenserver/parsers/get_pools.rb +19 -0
  89. data/lib/fog/xenserver/parsers/get_records.rb +19 -0
  90. data/lib/fog/xenserver/parsers/get_storage_repositories.rb +19 -0
  91. data/lib/fog/xenserver/parsers/get_vbds.rb +19 -0
  92. data/lib/fog/xenserver/parsers/get_vifs.rb +19 -0
  93. data/lib/fog/xenserver/parsers/get_vms.rb +20 -0
  94. data/lib/fog/xenserver/requests/compute/clone_server.rb +31 -0
  95. data/lib/fog/xenserver/requests/compute/create_network.rb +42 -0
  96. data/lib/fog/xenserver/requests/compute/create_server.rb +130 -0
  97. data/lib/fog/xenserver/requests/compute/create_sr.rb +72 -0
  98. data/lib/fog/xenserver/requests/compute/create_vbd.rb +40 -0
  99. data/lib/fog/xenserver/requests/compute/create_vdi.rb +33 -0
  100. data/lib/fog/xenserver/requests/compute/create_vif.rb +57 -0
  101. data/lib/fog/xenserver/requests/compute/create_vlan.rb +35 -0
  102. data/lib/fog/xenserver/requests/compute/destroy_network.rb +33 -0
  103. data/lib/fog/xenserver/requests/compute/destroy_server.rb +22 -0
  104. data/lib/fog/xenserver/requests/compute/destroy_sr.rb +30 -0
  105. data/lib/fog/xenserver/requests/compute/destroy_vdi.rb +22 -0
  106. data/lib/fog/xenserver/requests/compute/destroy_vif.rb +22 -0
  107. data/lib/fog/xenserver/requests/compute/destroy_vlan.rb +32 -0
  108. data/lib/fog/xenserver/requests/compute/disable_host.rb +29 -0
  109. data/lib/fog/xenserver/requests/compute/eject_vbd.rb +22 -0
  110. data/lib/fog/xenserver/requests/compute/enable_host.rb +28 -0
  111. data/lib/fog/xenserver/requests/compute/get_record.rb +29 -0
  112. data/lib/fog/xenserver/requests/compute/get_records.rb +30 -0
  113. data/lib/fog/xenserver/requests/compute/insert_vbd.rb +22 -0
  114. data/lib/fog/xenserver/requests/compute/provision_server.rb +21 -0
  115. data/lib/fog/xenserver/requests/compute/reboot_host.rb +23 -0
  116. data/lib/fog/xenserver/requests/compute/reboot_server.rb +23 -0
  117. data/lib/fog/xenserver/requests/compute/scan_sr.rb +22 -0
  118. data/lib/fog/xenserver/requests/compute/set_affinity.rb +25 -0
  119. data/lib/fog/xenserver/requests/compute/set_attribute.rb +25 -0
  120. data/lib/fog/xenserver/requests/compute/shutdown_host.rb +23 -0
  121. data/lib/fog/xenserver/requests/compute/shutdown_server.rb +23 -0
  122. data/lib/fog/xenserver/requests/compute/snapshot_revert.rb +22 -0
  123. data/lib/fog/xenserver/requests/compute/snapshot_server.rb +22 -0
  124. data/lib/fog/xenserver/requests/compute/start_server.rb +23 -0
  125. data/lib/fog/xenserver/requests/compute/start_vm.rb +25 -0
  126. data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +25 -0
  127. data/lib/fog/xenserver/requests/compute/unplug_vbd.rb +30 -0
  128. data/lib/fog/xenserver/utilities.rb +8 -0
  129. data/lib/fog/xenserver/version.rb +5 -0
  130. 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