fog-xenserver 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
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