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