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