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,33 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/vbd'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+
8
+ class Vbds < Fog::Collection
9
+
10
+ model Fog::Compute::XenServer::VBD
11
+
12
+ def initialize(attributes)
13
+ super
14
+ end
15
+
16
+ def all(options = {})
17
+ data = service.get_records 'VBD'
18
+ load(data)
19
+ end
20
+
21
+ def get( vbd_ref )
22
+ if vbd_ref && vbd = service.get_record( vbd_ref, 'VBD' )
23
+ new(vbd)
24
+ end
25
+ rescue Fog::XenServer::NotFound
26
+ nil
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,105 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+
7
+ class VDI < Fog::Model
8
+ # API Reference here:
9
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VDI
10
+
11
+ identity :reference
12
+
13
+ attribute :uuid
14
+ attribute :is_a_snapshot
15
+ attribute :name, :aliases => :name_label
16
+ attribute :description, :aliases => :name_description
17
+ attribute :__parent, :aliases => :parent
18
+ attribute :virtual_size
19
+ attribute :__vbds, :aliases => :VBDs
20
+ attribute :__sr, :aliases => :SR
21
+ attribute :sharable
22
+ attribute :read_only
23
+ attribute :current_operations
24
+ attribute :allowed_operations
25
+ attribute :__crash_dumps, :aliases => :crash_dumps
26
+ attribute :type
27
+ attribute :other_config
28
+ attribute :tags
29
+ attribute :storage_lock
30
+ attribute :physical_utilisation
31
+ attribute :missing
32
+ attribute :location
33
+ attribute :managed
34
+ attribute :metadata_latest
35
+ attribute :metadata_of_pool
36
+ attribute :allow_caching
37
+ attribute :on_boot
38
+ attribute :sm_config
39
+ attribute :snapshot_time
40
+ attribute :__snapshots, :aliases => :snapshots
41
+ attribute :__snapshot_of, :aliases => :snapshot_of
42
+ attribute :xenstore_data
43
+
44
+ #
45
+ # Default VDI type is system
46
+ # Default size 8GB
47
+ # Sharable is false by default
48
+ # read_only is false by default
49
+ #
50
+ def initialize(attributes = {})
51
+ self.virtual_size ||= '8589934592' unless attributes[:virtual_size]
52
+ self.type ||= 'system' unless attributes[:type]
53
+ self.read_only ||= false unless attributes[:read_only]
54
+ self.sharable ||= false unless attributes[:sharable]
55
+ self.other_config ||= {} unless attributes[:other_config]
56
+ super
57
+ end
58
+
59
+ def set_attribute(name, *val)
60
+ data = service.set_attribute( 'VDI', reference, name, *val )
61
+ end
62
+
63
+ def snapshot_of
64
+ service.vdis.get __sr
65
+ end
66
+
67
+ def parent
68
+ service.vdis.get __parent
69
+ end
70
+
71
+ def snapshots
72
+ __snapshots.collect do |ref|
73
+ service.vdis.get ref
74
+ end
75
+ end
76
+
77
+ def vbds
78
+ __vbds.collect do |ref|
79
+ service.vbds.get ref
80
+ end
81
+ end
82
+
83
+ def save
84
+ requires :name, :storage_repository
85
+ ref = service.create_vdi attributes
86
+ merge_attributes service.vdis.get(ref).attributes
87
+ end
88
+
89
+ def destroy
90
+ service.destroy_vdi reference
91
+ end
92
+
93
+ def storage_repository
94
+ service.storage_repositories.get __sr
95
+ end
96
+
97
+ def sr
98
+ storage_repository
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/vdi'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+
8
+ class Vdis < Fog::Collection
9
+
10
+ model Fog::Compute::XenServer::VDI
11
+
12
+ def all(options = {})
13
+ data = service.get_records 'VDI'
14
+ load(data)
15
+ end
16
+
17
+ def get( vdi_ref )
18
+ if vdi_ref && vdi = service.get_record( vdi_ref, 'VDI' )
19
+ new(vdi)
20
+ end
21
+ rescue Fog::XenServer::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,60 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+
7
+ class VIF < Fog::Model
8
+ # API Reference here:
9
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VIF
10
+
11
+ identity :reference
12
+
13
+ attribute :mac, :aliases => :MAC
14
+ attribute :uuid
15
+ attribute :allowed_operations
16
+ attribute :current_operations
17
+ attribute :currently_attached
18
+ attribute :device
19
+ attribute :ipv4_allowed
20
+ attribute :ipv6_allowed
21
+ attribute :locking_mode
22
+ attribute :mac_autogenerated, :aliases => :MAC_autogenerated
23
+ attribute :__metrics, :aliases => :metrics
24
+ attribute :other_config
25
+ attribute :qos_algorithm_params
26
+ attribute :qos_algorithm_type
27
+ attribute :qos_supported_algorithms
28
+ attribute :runtime_properties
29
+ attribute :mtu, :aliases => :MTU
30
+ attribute :__network, :aliases => :network
31
+ attribute :status_code
32
+ attribute :status_detail
33
+ attribute :__vm, :aliases => :VM
34
+
35
+
36
+ def destroy
37
+ service.destroy_vif reference
38
+ end
39
+
40
+ def network
41
+ service.networks.get __network
42
+ end
43
+
44
+ def server
45
+ service.servers.get __vm
46
+ end
47
+
48
+ def save
49
+ requires :server
50
+ raise ArgumentError.new('network is required for this operation') \
51
+ unless attributes[:__network]
52
+ ref = service.create_vif attributes[:server], attributes[:__network]
53
+ merge_attributes service.vifs.get(ref).attributes
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/vif'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+
8
+ class Vifs < Fog::Collection
9
+
10
+ model Fog::Compute::XenServer::VIF
11
+
12
+ def all(options = {})
13
+ data = service.get_records 'VIF'
14
+ load(data)
15
+ end
16
+
17
+ def get( ref )
18
+ if ref && obj = service.get_record( ref, 'VIF' )
19
+ new(obj)
20
+ end
21
+ rescue Fog::XenServer::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,81 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+
7
+ class VLAN < Fog::Model
8
+ # API Reference here:
9
+ # @see http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VLAN
10
+
11
+ identity :reference
12
+
13
+ attribute :uuid
14
+ attribute :tag, :type => :integer
15
+ attribute :other_config
16
+ attribute :__untagged_pif, :aliases => :untagged_PIF
17
+ attribute :__tagged_pif, :aliases => :tagged_PIF
18
+
19
+ # @return [Fog::Compute::XenServer::PIF] interface on which traffic is tagged
20
+ #
21
+ # @see http://docs.vmd.citrix.com/XenServer/6.1.0/1.0/en_gb/api/?c=VLAN
22
+ #
23
+ def untagged_pif
24
+ service.pifs.get __untagged_pif
25
+ end
26
+
27
+ # @return [Fog::Compute::XenServer::PIF] interface on which traffic is untagged
28
+ #
29
+ # @see http://docs.vmd.citrix.com/XenServer/6.1.0/1.0/en_gb/api/?c=VLAN
30
+ #
31
+ def tagged_pif
32
+ service.pifs.get __tagged_pif
33
+ end
34
+
35
+ # Creates a new VLAN.
36
+ #
37
+ # service = Fog::Compute[:xenserver]
38
+ #
39
+ # # create a network 'foo-net'
40
+ # net = service.networks.create :name => 'foo-net'
41
+ #
42
+ # # get the eth0 physical interface where the
43
+ # # VLAN subinterface will be added
44
+ # pif = service.pifs.find { |p| p.device == 'eth0' and p.physical }
45
+ #
46
+ # Fog::Compute[:xenserver].vlans.create :tag => 123,
47
+ # :network => net,
48
+ # :pif => pif
49
+ def save
50
+ requires :tag
51
+ pif = attributes[:pif]
52
+ net = attributes[:network]
53
+ unless pif and net
54
+ raise Fog::Error.new 'save requires :pif and :network attributes'
55
+ end
56
+ ref = service.create_vlan attributes[:pif].reference,
57
+ tag,
58
+ attributes[:network].reference
59
+ data = service.get_record ref, 'VLAN'
60
+ merge_attributes data
61
+ true
62
+ end
63
+
64
+ # Destroys a VLAN.
65
+ #
66
+ # service = Fog::Compute[:xenserver]
67
+ #
68
+ # # Find VLAN 123 and destroy it
69
+ # (service.vlans.find { |v| v.tag == 123 }).destroy
70
+ #
71
+ def destroy
72
+ requires :reference
73
+ service.destroy_vlan reference
74
+ true
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,39 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/vlan'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+
8
+ class Vlans < Fog::Collection
9
+
10
+ model Fog::Compute::XenServer::VLAN
11
+
12
+ # Return the list of VLANs available
13
+ #
14
+ # @return [Array] a list of Fog::Compute::XenServer::VLAN
15
+ #
16
+ def all(options = {})
17
+ data = service.get_records 'VLAN'
18
+ load(data)
19
+ end
20
+
21
+ # Retrieve a VLAN object by by reference.
22
+ #
23
+ # @return [Fog::Compute::XenServer::VLAN]
24
+ #
25
+ # Returns nil if not found
26
+ #
27
+ def get( ref )
28
+ if ref && obj = service.get_record( ref, 'VLAN' )
29
+ new(obj)
30
+ end
31
+ rescue Fog::XenServer::NotFound
32
+ nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class XenServer
6
+ class Vmpp < Fog::Model
7
+ # API Reference here:
8
+ # http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VMPP
9
+
10
+ identity :reference
11
+
12
+ attribute :alarm_config
13
+ attribute :archive_frequency
14
+ attribute :archive_last_run_time
15
+ attribute :archive_schedule
16
+ attribute :archive_target_config
17
+ attribute :archive_target_type
18
+ attribute :backup_frequency
19
+ attribute :backup_last_run_time
20
+ attribute :backup_retention_value
21
+ attribute :backup_schedule
22
+ attribute :backup_type
23
+ attribute :is_alarm_enabled
24
+ attribute :is_archive_running
25
+ attribute :is_backup_running
26
+ attribute :is_policy_enabled
27
+ attribute :description, :aliases => :name_description
28
+ attribute :name, :aliases => :name_label
29
+ attribute :recent_alerts
30
+ attribute :uuid
31
+ attribute :__vms, :aliases => :VMs
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/xenserver/models/compute/vmpp'
3
+
4
+ module Fog
5
+ module Compute
6
+ class XenServer
7
+ class Vmpps < Fog::Collection
8
+ model Fog::Compute::XenServer::Vmpp
9
+
10
+ def all(options={})
11
+ data = service.get_records 'VMPP'
12
+ load(data)
13
+ end
14
+
15
+ def get( vmpp_ref )
16
+ if vmpp_ref && vmpp = service.get_record( vmpp_ref, 'VMPP' )
17
+ new(vmpp)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end