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,72 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ #
8
+ # Create a storage repository (SR)
9
+ #
10
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=SR
11
+ #
12
+ # @param [String] host_ref host reference
13
+ # @param [String] name_label repository label
14
+ # @param [String] type storage repository type
15
+ # @param [String] name_description storage repository description
16
+ # @param [Hash] device_config used to specify block device path, like
17
+ # { :device => /dev/sdb } for example
18
+ # @param [String] physical_size '0' will use the whole device (FIXME
19
+ # needs confirmation)
20
+ # @param [String] content_type the type of the SR's content.
21
+ # According to Citrix documentation, used only to distinguish ISO
22
+ # libraries from other SRs. Set it to 'iso' for storage repositories
23
+ # that store a library of ISOs, 'user' or '' (empty) otherwise.
24
+ # @see http://docs.vmd.citrix.com/XenServer/6.1.0/1.0/en_gb/reference.html#cli-xe-commands_sr
25
+ # @param [String] shared
26
+ #
27
+ # @return [String] an OpaqueRef to the storage repository
28
+ def create_sr( host_ref,
29
+ name_label,
30
+ type,
31
+ name_description = '',
32
+ device_config = {},
33
+ physical_size = '0',
34
+ content_type = 'user',
35
+ shared = false,
36
+ sm_config = {} )
37
+
38
+ @connection.request(
39
+ {:parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.create'},
40
+ host_ref,
41
+ device_config || {},
42
+ physical_size || '0',
43
+ name_label,
44
+ name_description || '',
45
+ type,
46
+ content_type,
47
+ shared || false,
48
+ sm_config || {}
49
+ )
50
+ end
51
+
52
+ end
53
+
54
+ class Mock
55
+
56
+ def create_sr( host_ref,
57
+ name_label,
58
+ type,
59
+ name_description = nil,
60
+ device_config = {},
61
+ physical_size = '0',
62
+ content_type = nil,
63
+ shared = false,
64
+ sm_config = {} )
65
+ Fog::Mock.not_implemented
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def create_vbd( vm_ref, vdi_ref, config = {} )
8
+ raise ArgumentError.new('Invalid config') if config.nil?
9
+ vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Compute::XenServer::Server
10
+ vdi_ref = vdi_ref.reference if vdi_ref.kind_of? Fog::Compute::XenServer::VDI
11
+ config.reject! { |k,v| (k == :server) or (k == :vdi) }
12
+ default_config = {
13
+ :VM => vm_ref,
14
+ :VDI => vdi_ref,
15
+ :empty => false,
16
+ :other_config => {'owner' => ''},
17
+ :userdevice => "0",
18
+ :bootable => true,
19
+ :mode => 'RW',
20
+ :qos_algorithm_type=> '',
21
+ :qos_algorithm_params=> {},
22
+ :qos_supported_algorithms=> [],
23
+ :type => 'Disk'
24
+ }.merge config
25
+
26
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VBD.create'}, default_config )
27
+ end
28
+ end
29
+
30
+ class Mock
31
+
32
+ def create_vbd( config )
33
+ Fog::Mock.not_implemented
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def create_vdi( config )
8
+ raise ArgumentError.new('Invalid config') if config.nil?
9
+ raise ArgumentError.new('Missing virtual_size attribute') if config[:virtual_size].nil?
10
+ raise ArgumentError.new('Missing read_only attribute') if config[:read_only].nil?
11
+ raise ArgumentError.new('Missing type attribute') if config[:type].nil?
12
+ raise ArgumentError.new('Missing sharable attribute') if config[:sharable].nil?
13
+ raise ArgumentError.new('Missing other_config attribute') if config[:other_config].nil?
14
+ raise ArgumentError.new('Missing storage_repository attribute') if config[:storage_repository].nil?
15
+ config[:SR] = config[:storage_repository].reference
16
+ config[:name_label] = config[:name]
17
+ config[:name_description] = config[:description] if config[:description]
18
+ config.reject! { |k,v| (k == :__sr) or (k == :storage_repository) }
19
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VDI.create'}, config )
20
+ end
21
+ end
22
+
23
+ class Mock
24
+
25
+ def create_vdi( ref )
26
+ Fog::Mock.not_implemented
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,57 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def create_vif( vm_ref, network_ref, device = -1)
8
+ raise ArgumentError.new('Invalid vm_ref') if vm_ref.nil?
9
+ raise ArgumentError.new('Invalid network_ref') if network_ref.nil?
10
+ vm_ref = vm_ref.reference if vm_ref.kind_of? Fog::Model
11
+ network_ref = network_ref.reference if network_ref.kind_of? Fog::Model
12
+ vif_config = default_vif_config(vm_ref, network_ref, device.to_s)
13
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.create'}, vif_config )
14
+ end
15
+
16
+ def create_vif_custom( conf )
17
+ raise ArgumentError.new('VIF config is not a Hash') if not conf.kind_of?(Hash)
18
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.create'}, conf )
19
+ end
20
+
21
+ def default_vif_config( vm_ref, network_ref, device_number = '-1' )
22
+ conf = {
23
+ 'MAC_autogenerated' => 'True',
24
+ 'VM' => vm_ref,
25
+ 'network' => network_ref,
26
+ 'MAC' => '',
27
+ 'MTU' => '0',
28
+ 'other_config' => {},
29
+ 'qos_algorithm_type' => 'ratelimit',
30
+ 'qos_algorithm_params' => {}
31
+ }
32
+ if device_number.to_i >= 0
33
+ conf['device'] = device_number
34
+ else
35
+ highest_dev = 0
36
+ server = servers.get vm_ref
37
+ server.vifs.each do |vif|
38
+ dev = vif.device.to_i
39
+ highest_dev = dev if dev > highest_dev
40
+ end
41
+ conf['device'] = (highest_dev + 1).to_s
42
+ end
43
+ conf
44
+ end
45
+ end
46
+
47
+ class Mock
48
+
49
+ def create_vif( vm_ref, network_ref )
50
+ Fog::Mock.not_implemented
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ #
8
+ # Create a VLAN
9
+ #
10
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VLAN
11
+ #
12
+ def create_vlan( pif_ref, vlan_id, network_ref )
13
+ @connection.request(
14
+ {
15
+ :parser => Fog::Parsers::XenServer::Base.new,
16
+ :method => 'VLAN.create'
17
+ },
18
+ pif_ref,
19
+ vlan_id.to_s,
20
+ network_ref
21
+ )
22
+ end
23
+ end
24
+
25
+ class Mock
26
+
27
+ def create_vlan( pif_ref, vlan_id, network_ref )
28
+ Fog::Mock.not_implemented
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ #
8
+ # Destroy a Network
9
+ #
10
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=network
11
+ #
12
+ def destroy_network( ref )
13
+ @connection.request(
14
+ {
15
+ :parser => Fog::Parsers::XenServer::Base.new,
16
+ :method => 'network.destroy'
17
+ },
18
+ ref
19
+ )
20
+ end
21
+
22
+ end
23
+
24
+ class Mock
25
+
26
+ def destroy_network( ref )
27
+ Fog::Mock.not_implemented
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def destroy_server( vm_ref , extra_args = {})
8
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.destroy'}, vm_ref)
9
+ end
10
+
11
+ end
12
+
13
+ class Mock
14
+
15
+ def destroy_server()
16
+ Fog::Mock.not_implemented
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ #
8
+ # Destroy a Storage Repository
9
+ #
10
+ # http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=SR
11
+ #
12
+ def destroy_sr( sr_ref )
13
+ @connection.request(
14
+ {:parser => Fog::Parsers::XenServer::Base.new, :method => 'SR.destroy'},
15
+ sr_ref
16
+ )
17
+ end
18
+
19
+ end
20
+
21
+ class Mock
22
+
23
+ def destroy_sr( sr_ref )
24
+ Fog::Mock.not_implemented
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def destroy_vdi( vdi_ref, extra_args = {})
8
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VDI.destroy'}, vdi_ref)
9
+ end
10
+
11
+ end
12
+
13
+ class Mock
14
+
15
+ def destroy_vdi()
16
+ Fog::Mock.not_implemented
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ def destroy_vif( ref, extra_args = {})
8
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VIF.destroy'}, ref)
9
+ end
10
+
11
+ end
12
+
13
+ class Mock
14
+
15
+ def destroy_vif()
16
+ Fog::Mock.not_implemented
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ # Destroy a VLAN
8
+ #
9
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VLAN
10
+ #
11
+ def destroy_vlan( ref )
12
+ @connection.request(
13
+ {
14
+ :parser => Fog::Parsers::XenServer::Base.new,
15
+ :method => 'VLAN.destroy'
16
+ },
17
+ ref
18
+ )
19
+ end
20
+
21
+ end
22
+
23
+ class Mock
24
+
25
+ def destroy_vlan( ref )
26
+ Fog::Mock.not_implemented
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module Compute
3
+ class XenServer
4
+
5
+ class Real
6
+
7
+ #
8
+ # Puts the host into a state in which no new VMs can be started.
9
+ # Currently active VMs on the host continue to execute.
10
+ #
11
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=host
12
+ #
13
+ def disable_host( ref )
14
+ @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => "host.disable"}, ref)
15
+ end
16
+
17
+ end
18
+
19
+ class Mock
20
+
21
+ def disable_host( ref )
22
+ Fog::Mock.not_implemented
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end