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,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