deltacloud-client-vm 1.1.4.2 → 1.1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +176 -0
  3. data/NOTICE +8 -0
  4. data/README.md +73 -0
  5. data/Rakefile +122 -0
  6. data/deltacloud-client-vm.gemspec +24 -0
  7. data/lib/deltacloud_vm/client.rb +79 -0
  8. data/lib/deltacloud_vm/client/base_error.rb +80 -0
  9. data/lib/deltacloud_vm/client/connection.rb +139 -0
  10. data/lib/deltacloud_vm/client/helpers/model_helper.rb +69 -0
  11. data/lib/deltacloud_vm/client/helpers/property_helper.rb +103 -0
  12. data/lib/deltacloud_vm/client/helpers/xml_helper.rb +33 -0
  13. data/lib/deltacloud_vm/client/methods.rb +33 -0
  14. data/lib/deltacloud_vm/client/methods/address.rb +67 -0
  15. data/lib/deltacloud_vm/client/methods/api.rb +96 -0
  16. data/lib/deltacloud_vm/client/methods/backward_compatiblity.rb +72 -0
  17. data/lib/deltacloud_vm/client/methods/blob.rb +91 -0
  18. data/lib/deltacloud_vm/client/methods/bucket.rb +55 -0
  19. data/lib/deltacloud_vm/client/methods/common.rb +46 -0
  20. data/lib/deltacloud_vm/client/methods/driver.rb +53 -0
  21. data/lib/deltacloud_vm/client/methods/firewall.rb +67 -0
  22. data/lib/deltacloud_vm/client/methods/hardware_profile.rb +41 -0
  23. data/lib/deltacloud_vm/client/methods/image.rb +61 -0
  24. data/lib/deltacloud_vm/client/methods/instance.rb +141 -0
  25. data/lib/deltacloud_vm/client/methods/instance_state.rb +41 -0
  26. data/lib/deltacloud_vm/client/methods/key.rb +58 -0
  27. data/lib/deltacloud_vm/client/methods/load_balancer.rb +96 -0
  28. data/lib/deltacloud_vm/client/methods/metric.rb +54 -0
  29. data/lib/deltacloud_vm/client/methods/realm.rb +42 -0
  30. data/lib/deltacloud_vm/client/methods/storage_snapshot.rb +61 -0
  31. data/lib/deltacloud_vm/client/methods/storage_volume.rb +94 -0
  32. data/lib/deltacloud_vm/client/models.rb +32 -0
  33. data/lib/deltacloud_vm/client/models/address.rb +57 -0
  34. data/lib/deltacloud_vm/client/models/base.rb +153 -0
  35. data/lib/deltacloud_vm/client/models/blob.rb +56 -0
  36. data/lib/deltacloud_vm/client/models/bucket.rb +65 -0
  37. data/lib/deltacloud_vm/client/models/driver.rb +87 -0
  38. data/lib/deltacloud_vm/client/models/firewall.rb +64 -0
  39. data/lib/deltacloud_vm/client/models/hardware_profile.rb +68 -0
  40. data/lib/deltacloud_vm/client/models/image.rb +60 -0
  41. data/lib/deltacloud_vm/client/models/instance.rb +142 -0
  42. data/lib/deltacloud_vm/client/models/instance_address.rb +40 -0
  43. data/lib/deltacloud_vm/client/models/instance_state.rb +52 -0
  44. data/lib/deltacloud_vm/client/models/key.rb +52 -0
  45. data/lib/deltacloud_vm/client/models/load_balancer.rb +55 -0
  46. data/lib/deltacloud_vm/client/models/metric.rb +72 -0
  47. data/lib/deltacloud_vm/client/models/realm.rb +29 -0
  48. data/lib/deltacloud_vm/client/models/storage_snapshot.rb +54 -0
  49. data/lib/deltacloud_vm/client/models/storage_volume.rb +96 -0
  50. data/lib/deltacloud_vm/core_ext.rb +19 -0
  51. data/lib/deltacloud_vm/core_ext/element.rb +32 -0
  52. data/lib/deltacloud_vm/core_ext/fixnum.rb +30 -0
  53. data/lib/deltacloud_vm/core_ext/nil.rb +22 -0
  54. data/lib/deltacloud_vm/core_ext/string.rb +49 -0
  55. data/lib/deltacloud_vm/error_response.rb +93 -0
  56. data/tests/client/client_test.rb +51 -0
  57. data/tests/client/connection_test.rb +77 -0
  58. data/tests/core_ext/element_test.rb +40 -0
  59. data/tests/core_ext/fixnum_test.rb +35 -0
  60. data/tests/core_ext/nil.rb +27 -0
  61. data/tests/core_ext/string_test.rb +47 -0
  62. data/tests/fixtures/instances_cleanup.yml +681 -0
  63. data/tests/fixtures/test_0001_connects_to_Deltacloud_API.yml +60 -0
  64. data/tests/fixtures/test_0001_support_cpu.yml +444 -0
  65. data/tests/fixtures/test_0001_support_original_body.yml +116 -0
  66. data/tests/fixtures/test_0001_supports_addresses.yml +178 -0
  67. data/tests/fixtures/test_0001_supports_api_host.yml +60 -0
  68. data/tests/fixtures/test_0001_supports_attached_.yml +282 -0
  69. data/tests/fixtures/test_0001_supports_blobs.yml +475 -0
  70. data/tests/fixtures/test_0001_supports_bucket.yml +200 -0
  71. data/tests/fixtures/test_0001_supports_buckets.yml +160 -0
  72. data/tests/fixtures/test_0001_supports_drivers.yml +202 -0
  73. data/tests/fixtures/test_0001_supports_firewalls.yml +399 -0
  74. data/tests/fixtures/test_0001_supports_hardware_profiles.yml +262 -0
  75. data/tests/fixtures/test_0001_supports_images.yml +224 -0
  76. data/tests/fixtures/test_0001_supports_instance_states.yml +156 -0
  77. data/tests/fixtures/test_0001_supports_instances.yml +486 -0
  78. data/tests/fixtures/test_0001_supports_keys.yml +198 -0
  79. data/tests/fixtures/test_0001_supports_path.yml +60 -0
  80. data/tests/fixtures/test_0001_supports_realms.yml +152 -0
  81. data/tests/fixtures/test_0001_supports_storage_snapshots.yml +164 -0
  82. data/tests/fixtures/test_0001_supports_storage_volumes.yml +176 -0
  83. data/tests/fixtures/test_0001_supports_to_get_providers.yml +410 -0
  84. data/tests/fixtures/test_0002_support_blob.yml +148 -0
  85. data/tests/fixtures/test_0002_support_instance_state.yml +204 -0
  86. data/tests/fixtures/test_0002_support_memory.yml +444 -0
  87. data/tests/fixtures/test_0002_support_on_Provider.yml +130 -0
  88. data/tests/fixtures/test_0002_supports_api_port.yml +60 -0
  89. data/tests/fixtures/test_0002_supports_api_uri.yml +60 -0
  90. data/tests/fixtures/test_0002_supports_driver.yml +219 -0
  91. data/tests/fixtures/test_0002_supports_extract_xml_body_using_faraday_connection.yml +117 -0
  92. data/tests/fixtures/test_0002_supports_filtering_addresses_by_id_param.yml +156 -0
  93. data/tests/fixtures/test_0002_supports_filtering_buckets_by_id_param.yml +156 -0
  94. data/tests/fixtures/test_0002_supports_filtering_firewalls_by_id_param.yml +207 -0
  95. data/tests/fixtures/test_0002_supports_filtering_hardware_profiles_by_id_param.yml +158 -0
  96. data/tests/fixtures/test_0002_supports_filtering_images_by_id_param.yml +165 -0
  97. data/tests/fixtures/test_0002_supports_filtering_instances_by_id_param.yml +164 -0
  98. data/tests/fixtures/test_0002_supports_filtering_keys_by_id_param.yml +178 -0
  99. data/tests/fixtures/test_0002_supports_filtering_realms_by_id.yml +104 -0
  100. data/tests/fixtures/test_0002_supports_filtering_storage_snapshots_by_id_param.yml +155 -0
  101. data/tests/fixtures/test_0002_supports_filtering_storage_volumes_by_id_param.yml +157 -0
  102. data/tests/fixtures/test_0002_supports_hardware_profiles.yml +262 -0
  103. data/tests/fixtures/test_0002_supports_is_compatible_.yml +116 -0
  104. data/tests/fixtures/test_0002_supports_snapshot_.yml +202 -0
  105. data/tests/fixtures/test_0002_supports_version.yml +60 -0
  106. data/tests/fixtures/test_0003_caches_the_API_entrypoint.yml +60 -0
  107. data/tests/fixtures/test_0003_support_address.yml +197 -0
  108. data/tests/fixtures/test_0003_support_bucket.yml +198 -0
  109. data/tests/fixtures/test_0003_support_create_blob.yml +105 -0
  110. data/tests/fixtures/test_0003_support_create_blob_and_destroy_blob.yml +138 -0
  111. data/tests/fixtures/test_0003_support_firewall.yml +768 -0
  112. data/tests/fixtures/test_0003_support_hardware_profile.yml +199 -0
  113. data/tests/fixtures/test_0003_support_image.yml +207 -0
  114. data/tests/fixtures/test_0003_support_instance.yml +206 -0
  115. data/tests/fixtures/test_0003_support_key.yml +220 -0
  116. data/tests/fixtures/test_0003_support_realm.yml +195 -0
  117. data/tests/fixtures/test_0003_support_storage.yml +444 -0
  118. data/tests/fixtures/test_0003_support_storage_snapshot.yml +196 -0
  119. data/tests/fixtures/test_0003_support_storage_volume.yml +197 -0
  120. data/tests/fixtures/test_0003_support_to_change_driver_with_Client.yml +72 -0
  121. data/tests/fixtures/test_0003_supports_connect.yml +60 -0
  122. data/tests/fixtures/test_0003_supports_extract_xml_body_using_nokogiri_document.yml +117 -0
  123. data/tests/fixtures/test_0003_supports_instance.yml +396 -0
  124. data/tests/fixtures/test_0003_supports_is_compatible_.yml +116 -0
  125. data/tests/fixtures/test_0003_supports_lunch_image.yml +367 -0
  126. data/tests/fixtures/test_0003_supports_providers.yml +102 -0
  127. data/tests/fixtures/test_0003_supports_version.yml +60 -0
  128. data/tests/fixtures/test_0004_support_architecture.yml +444 -0
  129. data/tests/fixtures/test_0004_support_create_address.yml +197 -0
  130. data/tests/fixtures/test_0004_support_create_blob_and_destroy_blob_with_meta_params.yml +139 -0
  131. data/tests/fixtures/test_0004_support_create_bucket.yml +180 -0
  132. data/tests/fixtures/test_0004_support_create_bucket_and_destroy_bucket.yml +180 -0
  133. data/tests/fixtures/test_0004_support_create_firewall_and_destroy_firewall.yml +496 -0
  134. data/tests/fixtures/test_0004_support_create_image_and_destroy_image.yml +1527 -0
  135. data/tests/fixtures/test_0004_support_create_instance.yml +115 -0
  136. data/tests/fixtures/test_0004_support_create_key_and_destroy_key.yml +206 -0
  137. data/tests/fixtures/test_0004_support_create_volume.yml +105 -0
  138. data/tests/fixtures/test_0004_support_create_volume_and_destroy_volume.yml +181 -0
  139. data/tests/fixtures/test_0004_support_to_test_of_valid_DC_connection.yml +60 -0
  140. data/tests/fixtures/test_0004_supports_current_driver.yml +60 -0
  141. data/tests/fixtures/test_0004_supports_extract_xml_body_using_nokogiri_element.yml +117 -0
  142. data/tests/fixtures/test_0004_supports_lunch_image.yml +312 -0
  143. data/tests/fixtures/test_0004_supports_valid_credentials_.yml +215 -0
  144. data/tests/fixtures/test_0004_supports_with_config.yml +129 -0
  145. data/tests/fixtures/test_0005_support_attach_storage_volume.yml +102 -0
  146. data/tests/fixtures/test_0005_support_attach_storage_volume_and_detach_storage_volume.yml +142 -0
  147. data/tests/fixtures/test_0005_support_create_instance_with_hwp_id.yml +115 -0
  148. data/tests/fixtures/test_0005_support_opaque_.yml +152 -0
  149. data/tests/fixtures/test_0005_supports_current_provider.yml +134 -0
  150. data/tests/fixtures/test_0005_supports_id.yml +116 -0
  151. data/tests/fixtures/test_0005_supports_switching_drivers_per_instance.yml +129 -0
  152. data/tests/fixtures/test_0005_supports_use_driver.yml +60 -0
  153. data/tests/fixtures/test_0006_support_create_instance_with_realm_id.yml +115 -0
  154. data/tests/fixtures/test_0006_supports_discovered_.yml +60 -0
  155. data/tests/fixtures/test_0006_supports_supported_collections.yml +60 -0
  156. data/tests/fixtures/test_0006_supports_switching_providers_per_instance.yml +208 -0
  157. data/tests/fixtures/test_0007_support_create_instance_with_name.yml +115 -0
  158. data/tests/fixtures/test_0007_support_switching_provider_without_credentials.yml +208 -0
  159. data/tests/fixtures/test_0007_supports_support_.yml +60 -0
  160. data/tests/fixtures/test_0007_supports_valid_credentials_on_class.yml +370 -0
  161. data/tests/fixtures/test_0008_support_stop_instance.yml +166 -0
  162. data/tests/fixtures/test_0008_supports_must_support_.yml +60 -0
  163. data/tests/fixtures/test_0009_support_start_instance.yml +217 -0
  164. data/tests/fixtures/test_0009_supports_features.yml +60 -0
  165. data/tests/fixtures/test_0010_support_reboot_instance.yml +166 -0
  166. data/tests/fixtures/test_0010_supports_feature_.yml +60 -0
  167. data/tests/helpers/model_test.rb +33 -0
  168. data/tests/helpers/xml_test.rb +56 -0
  169. data/tests/methods/address_test.rb +64 -0
  170. data/tests/methods/api_test.rb +97 -0
  171. data/tests/methods/backward_compatibility_test.rb +87 -0
  172. data/tests/methods/blob_test.rb +64 -0
  173. data/tests/methods/bucket_test.rb +62 -0
  174. data/tests/methods/driver_test.rb +48 -0
  175. data/tests/methods/firewall_test.rb +84 -0
  176. data/tests/methods/hardware_profile_test.rb +53 -0
  177. data/tests/methods/image_test.rb +64 -0
  178. data/tests/methods/instance_state_test.rb +43 -0
  179. data/tests/methods/instance_test.rb +126 -0
  180. data/tests/methods/key_test.rb +63 -0
  181. data/tests/methods/realm_test.rb +50 -0
  182. data/tests/methods/storage_snapshot_test.rb +53 -0
  183. data/tests/methods/storage_volume_test.rb +81 -0
  184. data/tests/models/blob_test.rb +40 -0
  185. data/tests/models/bucket_test.rb +37 -0
  186. data/tests/models/driver_test.rb +42 -0
  187. data/tests/models/hardware_profile_test.rb +80 -0
  188. data/tests/models/image_test.rb +65 -0
  189. data/tests/models/storage_volume_test.rb +52 -0
  190. data/tests/test_helper.rb +64 -0
  191. metadata +191 -2
@@ -0,0 +1,40 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class InstanceAddress
18
+
19
+ attr_reader :type, :value
20
+
21
+ def initialize(type, value)
22
+ @type = type
23
+ @value = value
24
+ end
25
+
26
+ def [](attr)
27
+ instance_variable_get("@#{attr}")
28
+ end
29
+
30
+ def to_s
31
+ @value
32
+ end
33
+
34
+ def self.convert(address_xml_block)
35
+ address_xml_block.map do |addr|
36
+ new(:ip_address, addr.text)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,52 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+
18
+ class InstanceState
19
+
20
+ def self.new_state(name)
21
+ State.new(name)
22
+ end
23
+
24
+ def self.new_transition(to, action)
25
+ Transition.new(to, action)
26
+ end
27
+
28
+ class State
29
+ attr_reader :name
30
+ attr_reader :transitions
31
+
32
+ def initialize(name)
33
+ @name, @transitions = name, []
34
+ end
35
+ end
36
+
37
+ class Transition
38
+ attr_reader :to
39
+ attr_reader :action
40
+
41
+ def initialize(to, action)
42
+ @to = to
43
+ @action = action
44
+ end
45
+
46
+ def auto?
47
+ @action.nil?
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class Key < Base
18
+
19
+ # Inherited attributes: :_id, :name, :description
20
+
21
+ # Custom attributes:
22
+ #
23
+ attr_reader :state
24
+ attr_reader :username
25
+ attr_reader :password
26
+ attr_reader :public_key
27
+ attr_reader :fingerprint
28
+
29
+ # Key model methods
30
+ def pem
31
+ @public_key
32
+ end
33
+
34
+ def destroy!
35
+ destroy_key(_id)
36
+ end
37
+
38
+ # Parse the Key entity from XML body
39
+ #
40
+ # - xml_body -> DeltacloudVM API XML representation of the key
41
+ #
42
+ def self.parse(xml_body)
43
+ {
44
+ :state => xml_body.text_at(:state),
45
+ :username => xml_body.text_at(:username),
46
+ :password => xml_body.text_at(:password),
47
+ :fingerprint => xml_body.text_at(:fingerprint),
48
+ :public_key => xml_body.text_at(:pem)
49
+ }
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,55 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class LoadBalancer < Base
18
+
19
+ include DeltacloudVM::Client::Methods::LoadBalancer
20
+
21
+ attr_reader :created_at
22
+ attr_reader :realm_id
23
+ attr_reader :public_addresses
24
+ attr_reader :actions
25
+ attr_reader :listeners
26
+ attr_reader :instances
27
+
28
+ # LoadBalancer model methods
29
+ #
30
+ # def reboot!
31
+ # load_balancer_reboot(_id)
32
+ # end
33
+
34
+ # Parse the LoadBalancer entity from XML body
35
+ #
36
+ # - xml_body -> DeltacloudVM API XML representation of the load_balancer
37
+ #
38
+ def self.parse(xml_body)
39
+ {
40
+ :created_at => xml_body.text_at(:created_at),
41
+ :realm_id => xml_body.attr_at('realm', :id),
42
+ :actions => xml_body.xpath('actions/link').map { |a| a['rel'].to_sym },
43
+ :public_addresses => xml_body.xpath('public_addresses/address').map { |a| a.text.strip },
44
+ :listeners => xml_body.xpath('listeners/listener').map { |l|
45
+ {
46
+ :protocol => l[:protocol],
47
+ :load_balancer_port => l.text_at(:load_balancer_port),
48
+ :instance_port => l.text_at(:instance_port)
49
+ }
50
+ },
51
+ :instances => xml_body.xpath('instances/instance').map { |i| i[:id] }
52
+ }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,72 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class Metric < Base
18
+
19
+ include DeltacloudVM::Client::Methods::Metric
20
+
21
+ # Inherited attributes: :_id, :name, :description
22
+
23
+ attr_reader :entity
24
+ attr_reader :properties
25
+
26
+ class Property
27
+
28
+ attr_reader :name, :samples
29
+
30
+ def initialize(name, samples=[])
31
+ @name = name
32
+ samples.each { |s| self << s }
33
+ end
34
+
35
+ def <<(values)
36
+ @samples ||= []
37
+ @samples << Sample.new(values)
38
+ end
39
+
40
+ class Sample
41
+ attr_reader :values
42
+
43
+ def initialize(values)
44
+ @values = values || []
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ # Metric model methods
52
+ #
53
+ # def reboot!
54
+ # metric_reboot(_id)
55
+ # end
56
+
57
+ # Parse the Metric entity from XML body
58
+ #
59
+ # - xml_body -> DeltacloudVM API XML representation of the metric
60
+ #
61
+ def self.parse(xml_body)
62
+ {
63
+ :entity => xml_body.text_at(:entity),
64
+ :properties => xml_body.xpath('properties/*').map { |p|
65
+ Property.new(p.name, p.xpath('sample').map { |s|
66
+ s.xpath('property').map { |v| [v['name'], v['value']] }
67
+ })
68
+ }
69
+ }
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,29 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class Realm < Base
18
+
19
+ attr_reader :limit
20
+ attr_reader :state
21
+
22
+ def self.parse(xml_body)
23
+ {
24
+ :state => xml_body.text_at('state'),
25
+ :limit => xml_body.text_at('limit')
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class StorageSnapshot < Base
18
+
19
+ include DeltacloudVM::Client::Methods::StorageSnapshot
20
+ include DeltacloudVM::Client::Methods::StorageVolume
21
+
22
+ # Inherited attributes: :_id, :name, :description
23
+
24
+ # Custom attributes:
25
+ #
26
+ attr_reader :created
27
+ attr_reader :storage_volume_id
28
+
29
+ # StorageSnapshot model methods
30
+ #
31
+ def storage_volume
32
+ super(storage_volume_id)
33
+ end
34
+
35
+ # Syntax sugar for destroying the current instance
36
+ # of StorageSnapshot
37
+ #
38
+ def destroy!
39
+ destroy_storage_snapshot(_id)
40
+ end
41
+
42
+
43
+ # Parse the StorageSnapshot entity from XML body
44
+ #
45
+ # - xml_body -> DeltacloudVM API XML representation of the storage_snapshot
46
+ #
47
+ def self.parse(xml_body)
48
+ {
49
+ :created => xml_body.text_at(:created),
50
+ :storage_volume_id => xml_body.attr_at('storage_volume', :id)
51
+ }
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,96 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ module DeltacloudVM::Client
17
+ class StorageVolume < Base
18
+
19
+ include DeltacloudVM::Client::Methods::Common
20
+ include DeltacloudVM::Client::Methods::Instance
21
+ include DeltacloudVM::Client::Methods::StorageVolume
22
+ include DeltacloudVM::Client::Methods::StorageSnapshot
23
+
24
+ attr_accessor :created
25
+ attr_accessor :state
26
+ attr_accessor :capacity
27
+ attr_accessor :capacity_unit
28
+ attr_accessor :device
29
+ attr_accessor :realm_id
30
+ attr_accessor :kind
31
+ attr_accessor :mount
32
+
33
+ # Check if the current volume is attached to an Instance
34
+ #
35
+ def attached?
36
+ !mount[:instance].nil?
37
+ end
38
+
39
+ # Attach this volume to the instance
40
+ #
41
+ def attach(instance_id, device=nil)
42
+ attach_storage_volume(_id, instance_id, device) && reload!
43
+ end
44
+
45
+ # Detach this volume from the currently attached instance
46
+ #
47
+ def detach!
48
+ detach_storage_volume(_id) && reload!
49
+ end
50
+
51
+ # Destroy the storage volume
52
+ #
53
+ def destroy!
54
+ destroy_storage_volume(_id)
55
+ end
56
+
57
+ # Syntax sugar for creating a snapshot from volume
58
+ # See: +create_storage_snapshot+
59
+ #
60
+ def snapshot!(snapshot_opts={})
61
+ snap = create_storage_snapshot(_id, snapshot_opts)
62
+ reload! && snap
63
+ end
64
+
65
+ def instance
66
+ super(mount[:instance])
67
+ end
68
+
69
+ def self.parse(xml_body)
70
+ {
71
+ :created => xml_body.text_at('created'),
72
+ :state => xml_body.text_at('state'),
73
+ :device => xml_body.text_at('device'),
74
+ :capacity => xml_body.text_at('capacity'),
75
+ :capacity_unit => xml_body.attr_at('capacity', :unit),
76
+ :state => xml_body.text_at('state'),
77
+ :realm_id => xml_body.attr_at('realm', :id),
78
+ :kind => xml_body.text_at('kind'),
79
+ :mount => {
80
+ :instance => xml_body.attr_at('mount/instance', :id),
81
+ :device => xml_body.attr_at('mount/device', :name)
82
+ }
83
+ }
84
+ end
85
+
86
+ private
87
+
88
+ def reload!
89
+ new_volume = storage_volume(_id)
90
+ update_instance_variables!(
91
+ :state => new_volume.state,
92
+ :mount => new_volume.mount
93
+ )
94
+ end
95
+ end
96
+ end