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,94 @@
1
+ # Storage Repositories
2
+
3
+ Official storage repository Citrix API documentation:
4
+
5
+ http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=SR
6
+
7
+ Create the XenServer connection first, as usual:
8
+
9
+ ```ruby
10
+ require 'fog'
11
+ require 'net/scp'
12
+ require 'pp'
13
+
14
+ xenserver = Fog::Compute.new({
15
+ :provider => 'XenServer',
16
+ :xenserver_url => 'xenserver-test',
17
+ :xenserver_username => 'root',
18
+ :xenserver_password => 'secret',
19
+ })
20
+ ```
21
+
22
+ Listing the available storage repositories:
23
+
24
+ ```ruby
25
+ xenserver.storage_repositories
26
+ ```
27
+
28
+
29
+ Filter storage repositories by content type:
30
+
31
+ ```ruby
32
+ xenserver.storage_repositories.select { |sr| sr.content_type == 'iso' }
33
+ ```
34
+
35
+ Filter storage repositories by allowed operations:
36
+
37
+ ```ruby
38
+ rw_srs = xenserver.storage_repositories.select do |sr|
39
+ # Are we allowed to create a VDI here?
40
+ sr.allowed_operations.include? 'vdi_create'
41
+ end
42
+ ```
43
+
44
+ Print some attributes of the first SR found:
45
+
46
+ ```ruby
47
+ sr = rw_srs.first
48
+ puts sr.name
49
+ puts sr.description
50
+ puts sr.type
51
+ puts sr.tags
52
+ # in bytes
53
+ puts sr.physical_size
54
+ puts sr.physical_utilisation
55
+ # sum of virtual_sizes of all VDIs in this storage repository (in bytes)
56
+ puts sr.virtual_allocation
57
+ ```
58
+
59
+ List virtual disk images available and print some VDI's attributes:
60
+
61
+ ```ruby
62
+ sr.vdis.each do |vdi|
63
+ # http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VDI
64
+ puts vdi.uuid
65
+ puts vdi.is_a_snapshot
66
+ puts vdi.name
67
+ # in bytes
68
+ puts vdi.physical_utilisation
69
+ puts vdi.virtual_size
70
+ puts vdi.read_only
71
+ # ["update", "resize", "destroy", "clone", "copy", "snapshot"],
72
+ puts vdi.allowed_operations
73
+ end
74
+ ```
75
+
76
+ Create a new VDI in this storage repository:
77
+
78
+ ```ruby
79
+ vdi = xenserver.vdis.create :name => 'super-vdi',
80
+ :storage_repository => sr,
81
+ :description => 'my super-vdi',
82
+ :virtual_size => '1073741824' # 1 GB
83
+ ```
84
+
85
+ I have an ext3 storage repository and this creates a 1GB VHD file there:
86
+
87
+ [root@xenserver ~]# vhd-util query -v -n /var/run/sr-mount/6edd263a-2da1-7533-840c-768417b5be25/4050057d-a3a8-4c00-8f2e-cf5531232921.vhd
88
+ 1024
89
+
90
+ Destroy the VDI:
91
+
92
+ ```ruby
93
+ vdi.destroy
94
+ ```
@@ -0,0 +1,22 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class Blob < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=blob
9
+
10
+ identity :reference
11
+
12
+ attribute :last_updated
13
+ attribute :mime_type
14
+ attribute :description, :aliases => :name_description
15
+ attribute :name, :aliases => :name_label
16
+ attribute :public
17
+ attribute :size
18
+ attribute :uuid
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/blob'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class Blobs < Fog::Collection
8
+ model Fog::Compute::XenServer::Blob
9
+
10
+ def all(options={})
11
+ data = service.get_records 'blob'
12
+ load(data)
13
+ end
14
+
15
+ def get( blob_ref )
16
+ if blob_ref && blob = service.get_record( blob_ref, 'blob' )
17
+ new(blob)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class Bond < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=Bond
9
+
10
+ identity :reference
11
+
12
+ attribute :links_up
13
+ attribute :__master, :aliases => :master
14
+ attribute :mode
15
+ attribute :other_config
16
+ attribute :__primary_slave, :aliases => :primary_slave
17
+ attribute :properties
18
+ attribute :__slaves, :aliases => :slaves
19
+ attribute :uuid
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/bond'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class Bonds < Fog::Collection
8
+ model Fog::Compute::XenServer::Bond
9
+
10
+ def all(options={})
11
+ data = service.get_records 'Bond'
12
+ load(data)
13
+ end
14
+
15
+ def get( bond_ref )
16
+ if bond_ref && bond = service.get_record( bond_ref, 'Bond' )
17
+ new(bond)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class Console < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=console
9
+
10
+ identity :reference
11
+
12
+ attribute :location
13
+ attribute :other_config
14
+ attribute :protocol
15
+ attribute :uuid
16
+ attribute :__vm, aliases: :VM
17
+
18
+ def vm
19
+ begin
20
+ vm = service.servers.get __vm
21
+ rescue Fog::XenServer::RequestFailed => e
22
+ vm = nil
23
+ end
24
+ vm
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/console'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class Consoles < Fog::Collection
8
+ model Fog::Compute::XenServer::Console
9
+
10
+ def all(options={})
11
+ data = service.get_records 'console'
12
+ load(data)
13
+ end
14
+
15
+ def get( console_ref )
16
+ if console_ref && console = service.get_record( console_ref, 'console' )
17
+ new(console)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class CrashDump < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=crashdump
9
+
10
+ identity :reference
11
+
12
+ attribute :other_config
13
+ attribute :__vdi, :aliases => :VDI
14
+ attribute :__vm, :aliases => :VM
15
+ attribute :uuid
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/crash_dump'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class Bonds < Fog::Collection
8
+ model Fog::Compute::XenServer::CrashDump
9
+
10
+ def all(options={})
11
+ data = service.get_records 'crashdump'
12
+ load(data)
13
+ end
14
+
15
+ def get( crashdump_ref )
16
+ if crashdump_ref && crashdump = service.get_record( crashdump_ref, 'crashdump' )
17
+ new(crashdump)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class DrTask < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=DR_task
9
+
10
+ identity :reference
11
+
12
+ attribute :__introduced_srs, :aliases => :introduced_SRs
13
+ attribute :uuid
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/dr_task'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class DrTasks < Fog::Collection
8
+ model Fog::Compute::XenServer::DrTask
9
+
10
+ def all(options={})
11
+ data = service.get_records 'DR_task'
12
+ load(data)
13
+ end
14
+
15
+ def get( dr_task_ref )
16
+ if dr_task_ref && dr_task = service.get_record( dr_task_ref, 'DR_task' )
17
+ new(dr_task)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class GpuGroup < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=GPU_group
9
+
10
+ identity :reference
11
+
12
+ attribute :gpu_types, :aliases => :GPU_types
13
+ attribute :description, :aliases => :name_description
14
+ attribute :name, :aliases => :name_label
15
+ attribute :other_config
16
+ attribute :__pgpus, :aliases => :PGPUs
17
+ attribute :__vgpus, :aliases => :VGPUs
18
+ attribute :uuid
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/gpu_group'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class GpuGroups < Fog::Collection
8
+ model Fog::Compute::XenServer::GpuGroup
9
+
10
+ def all(options={})
11
+ data = service.get_records 'GPU_group'
12
+ load(data)
13
+ end
14
+
15
+ def get( gpu_group_ref )
16
+ if gpu_group_ref && gpu_group = service.get_record( gpu_group_ref, 'GPU_group' )
17
+ new(gpu_group)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+
7
+ class GuestMetrics < Fog::Model
8
+ # API Reference here:
9
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VM_guest_metrics
10
+
11
+ identity :reference
12
+
13
+ attribute :uuid
14
+ attribute :disk
15
+ attribute :last_updated
16
+ attribute :live
17
+ attribute :memory
18
+ attribute :networks
19
+ attribute :os_version
20
+ attribute :other
21
+ attribute :other_config
22
+ attribute :pv_drivers_up_to_date, :aliases => :PV_drivers_up_to_date
23
+ attribute :pv_drivers_version, :aliases => :PV_drivers_version
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,159 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+
7
+ class Host < Fog::Model
8
+ # API Reference here:
9
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=host
10
+
11
+ identity :reference
12
+
13
+ attribute :name, :aliases => :name_label
14
+ attribute :uuid
15
+ attribute :address
16
+ attribute :allowed_operations
17
+ attribute :api_version_major, :aliases => :API_version_major
18
+ attribute :api_version_minor, :aliases => :API_version_minor
19
+ attribute :api_version_vendor, :aliases => :API_version_vendor
20
+ attribute :api_version_vendor_implementation, :aliases => :API_version_vendor_implementation
21
+ attribute :bios_strings
22
+ attribute :blobs
23
+ attribute :capabilities
24
+ attribute :chipset_info
25
+ attribute :cpu_configuration
26
+ attribute :cpu_info
27
+ attribute :__crash_dump_sr, :aliases => :crash_dump_sr
28
+ attribute :__crashdumps, :aliases => :crashdumps
29
+ attribute :current_operations
30
+ attribute :enabled
31
+ attribute :external_auth_configuration
32
+ attribute :external_auth_service_name
33
+ attribute :external_auth_type
34
+ attribute :guest_vcpus_params, :aliases => :guest_VCPUs_params
35
+ attribute :ha_network_peers
36
+ attribute :ha_statefiles
37
+ attribute :hostname
38
+ attribute :license_params
39
+ attribute :license_server
40
+ attribute :__local_cache_sr, :aliases => :local_cache_sr
41
+ attribute :logging
42
+ attribute :memory_overhead
43
+ attribute :__metrics, :aliases => :metrics
44
+ attribute :description, :aliases => :name_description
45
+ attribute :other_config
46
+ attribute :patches
47
+ attribute :__pbds, :aliases => :PBDs
48
+ attribute :__pcis, :aliases => :PCIs
49
+ attribute :__pgpus, :aliases => :PGPUs
50
+ attribute :__pifs, :aliases => :PIFs
51
+ attribute :power_on_config
52
+ attribute :power_on_mode
53
+ attribute :__resident_vms, :aliases => :resident_VMs
54
+ attribute :sched_policy
55
+ attribute :supported_bootloaders
56
+ attribute :suspend_image_sr
57
+ attribute :tags
58
+ attribute :__host_cpus, :aliases => :host_CPUs
59
+ attribute :edition
60
+ attribute :software_version
61
+
62
+ def pifs
63
+ __pifs.collect { |pif| service.pifs.get pif }
64
+ end
65
+
66
+ def pbds
67
+ __pbds.collect { |pbd| service.pbds.get pbd }
68
+ end
69
+
70
+ def resident_servers
71
+ __resident_vms.collect { |ref| service.servers.get ref }
72
+ end
73
+
74
+ def resident_vms
75
+ resident_servers
76
+ end
77
+
78
+ def host_cpus
79
+ cpus = []
80
+ (__host_cpus || []).each do |ref|
81
+ cpu_ref = service.get_record(ref, 'host_cpu' )
82
+ cpu_ref[:service] = service
83
+ cpus << Fog::Compute::XenServer::HostCpu.new(cpu_ref)
84
+ end
85
+ cpus
86
+ end
87
+
88
+ def metrics
89
+ return nil unless __metrics
90
+ rec = service.get_record(__metrics, 'host_metrics' )
91
+ Fog::Compute::XenServer::HostMetrics.new(rec)
92
+ end
93
+
94
+ #
95
+ # Reboot the host disabling it first unless auto_disable is
96
+ # set to false
97
+ #
98
+ # This function can only be called if there are no currently running
99
+ # VMs on the host and it is disabled. If there are running VMs, it will
100
+ # raise an exception.
101
+ #
102
+ # @param [Boolean] auto_disable disable the host first
103
+ #
104
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=host
105
+ #
106
+ def reboot(auto_disable = true)
107
+ disable if auto_disable
108
+ service.reboot_host(reference)
109
+ end
110
+
111
+ #
112
+ # Puts the host into a state in which no new VMs can be started.
113
+ # Currently active VMs on the host continue to execute.
114
+ #
115
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=host
116
+ #
117
+ def disable
118
+ service.disable_host(reference)
119
+ end
120
+
121
+ #
122
+ # Puts the host into a state in which new VMs can be started.
123
+ #
124
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=host
125
+ #
126
+ def enable
127
+ service.enable_host(reference)
128
+ end
129
+
130
+ #
131
+ # Shutdown the host disabling it first unless auto_disable is
132
+ # set to false.
133
+ #
134
+ # This function can only be called if there are no currently running
135
+ # VMs on the host and it is disabled. If there are running VMs, it will
136
+ # raise an exception.
137
+ #
138
+ # @param [Boolean] auto_disable disable the host first
139
+ #
140
+ # @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=host
141
+ #
142
+ def shutdown(auto_disable = true)
143
+ disable if auto_disable
144
+ service.shutdown_host(reference)
145
+ end
146
+
147
+ def set_attribute(name, *val)
148
+ data = service.set_attribute( 'host', reference, name, *val )
149
+ # Do not reload automatically for performance reasons
150
+ # We can set multiple attributes at the same time and
151
+ # then reload manually
152
+ #reload
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+ end
159
+ end