azure 0.6.0 → 0.6.1

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 (283) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -11
  3. data/.travis.yml +11 -33
  4. data/ChangeLog.txt +20 -5
  5. data/Gemfile +15 -15
  6. data/README.md +541 -537
  7. data/Rakefile +129 -127
  8. data/azure.gemspec +43 -42
  9. data/lib/azure.rb +52 -51
  10. data/lib/azure/base_management/affinity_group.rb +32 -32
  11. data/lib/azure/base_management/base_management_service.rb +234 -234
  12. data/lib/azure/base_management/location.rb +27 -27
  13. data/lib/azure/base_management/management_http_request.rb +171 -148
  14. data/lib/azure/base_management/serialization.rb +129 -129
  15. data/lib/azure/base_management/sql_management_http_request.rb +45 -0
  16. data/lib/azure/blob/blob.rb +31 -31
  17. data/lib/azure/blob/blob_service.rb +1423 -1423
  18. data/lib/azure/blob/block.rb +30 -30
  19. data/lib/azure/blob/container.rb +31 -31
  20. data/lib/azure/blob/serialization.rb +284 -284
  21. data/lib/azure/cloud_service_management/cloud_service.rb +38 -31
  22. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +134 -125
  23. data/lib/azure/cloud_service_management/serialization.rb +101 -63
  24. data/lib/azure/core.rb +39 -36
  25. data/lib/azure/core/auth/authorizer.rb +36 -36
  26. data/lib/azure/core/auth/shared_key.rb +110 -110
  27. data/lib/azure/core/auth/shared_key_lite.rb +48 -48
  28. data/lib/azure/core/auth/signer.rb +48 -48
  29. data/lib/azure/core/configuration.rb +211 -184
  30. data/lib/azure/core/error.rb +22 -22
  31. data/lib/azure/core/filtered_service.rb +43 -43
  32. data/lib/azure/core/http/debug_filter.rb +35 -35
  33. data/lib/azure/core/http/http_error.rb +88 -88
  34. data/lib/azure/core/http/http_filter.rb +52 -52
  35. data/lib/azure/core/http/http_request.rb +157 -157
  36. data/lib/azure/core/http/http_response.rb +140 -140
  37. data/lib/azure/core/http/retry_policy.rb +73 -73
  38. data/lib/azure/core/http/signer_filter.rb +33 -33
  39. data/lib/azure/core/service.rb +62 -62
  40. data/lib/azure/core/signed_service.rb +42 -42
  41. data/lib/azure/core/utility.rb +190 -190
  42. data/lib/azure/queue/message.rb +29 -29
  43. data/lib/azure/queue/queue.rb +28 -28
  44. data/lib/azure/queue/queue_service.rb +567 -567
  45. data/lib/azure/queue/serialization.rb +106 -106
  46. data/lib/azure/service/access_policy.rb +25 -25
  47. data/lib/azure/service/enumeration_results.rb +20 -20
  48. data/lib/azure/service/logging.rb +31 -31
  49. data/lib/azure/service/metrics.rb +30 -30
  50. data/lib/azure/service/retention_policy.rb +24 -24
  51. data/lib/azure/service/serialization.rb +239 -239
  52. data/lib/azure/service/signed_identifier.rb +29 -29
  53. data/lib/azure/service/storage_service.rb +78 -78
  54. data/lib/azure/service/storage_service_properties.rb +31 -31
  55. data/lib/azure/service_bus/action.rb +21 -21
  56. data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
  57. data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
  58. data/lib/azure/service_bus/brokered_message.rb +123 -123
  59. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
  60. data/lib/azure/service_bus/correlation_filter.rb +45 -45
  61. data/lib/azure/service_bus/empty_rule_action.rb +29 -29
  62. data/lib/azure/service_bus/false_filter.rb +38 -38
  63. data/lib/azure/service_bus/filter.rb +21 -21
  64. data/lib/azure/service_bus/interval.rb +103 -103
  65. data/lib/azure/service_bus/queue.rb +229 -229
  66. data/lib/azure/service_bus/resource.rb +108 -108
  67. data/lib/azure/service_bus/rule.rb +97 -97
  68. data/lib/azure/service_bus/rule_aspect.rb +34 -34
  69. data/lib/azure/service_bus/serialization.rb +160 -160
  70. data/lib/azure/service_bus/service_bus_service.rb +828 -828
  71. data/lib/azure/service_bus/sql_filter.rb +50 -50
  72. data/lib/azure/service_bus/sql_rule_action.rb +50 -50
  73. data/lib/azure/service_bus/subscription.rb +183 -183
  74. data/lib/azure/service_bus/topic.rb +186 -186
  75. data/lib/azure/service_bus/true_filter.rb +38 -38
  76. data/lib/azure/sql_database_management/serialization.rb +111 -90
  77. data/lib/azure/sql_database_management/sql_database.rb +31 -31
  78. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -202
  79. data/lib/azure/storage_management/serialization.rb +190 -50
  80. data/lib/azure/storage_management/storage_account.rb +40 -29
  81. data/lib/azure/storage_management/storage_management_service.rb +166 -99
  82. data/lib/azure/table/auth/shared_key.rb +92 -92
  83. data/lib/azure/table/auth/shared_key_lite.rb +44 -44
  84. data/lib/azure/table/batch.rb +329 -329
  85. data/lib/azure/table/batch_response.rb +118 -118
  86. data/lib/azure/table/edmtype.rb +126 -126
  87. data/lib/azure/table/entity.rb +30 -30
  88. data/lib/azure/table/guid.rb +23 -23
  89. data/lib/azure/table/query.rb +111 -111
  90. data/lib/azure/table/serialization.rb +107 -107
  91. data/lib/azure/table/table_service.rb +559 -559
  92. data/lib/azure/version.rb +30 -30
  93. data/lib/azure/virtual_machine_image_management/serialization.rb +49 -49
  94. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +27 -27
  95. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +27 -27
  96. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -66
  97. data/lib/azure/virtual_machine_management/serialization.rb +257 -247
  98. data/lib/azure/virtual_machine_management/virtual_machine.rb +41 -57
  99. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +317 -304
  100. data/lib/azure/virtual_network_management/serialization.rb +186 -186
  101. data/lib/azure/virtual_network_management/virtual_network.rb +36 -36
  102. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
  103. data/test/fixtures/affinity_group.xml +33 -33
  104. data/test/fixtures/all_containers.xml +20 -20
  105. data/test/fixtures/all_tables.xml +22 -22
  106. data/test/fixtures/certificate.pem +21 -21
  107. data/test/fixtures/container_acl.xml +11 -11
  108. data/test/fixtures/create_sql_database_server.xml +1 -1
  109. data/test/fixtures/create_storage_desc_error.xml +5 -0
  110. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  111. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  112. data/test/fixtures/create_storage_full_error.xml +6 -0
  113. data/test/fixtures/create_storage_label_error.xml +5 -0
  114. data/test/fixtures/create_storage_location_error.xml +5 -0
  115. data/test/fixtures/create_storage_name_error.xml +6 -0
  116. data/test/fixtures/create_table_response_entry.xml +15 -15
  117. data/test/fixtures/delete_storage_container_error.xml +5 -0
  118. data/test/fixtures/delete_storage_error.xml +5 -0
  119. data/test/fixtures/deployment_error.xml +5 -5
  120. data/test/fixtures/get_storage_account_error.xml +5 -0
  121. data/test/fixtures/get_storage_account_properties.xml +32 -0
  122. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  123. data/test/fixtures/http_error.xml +5 -5
  124. data/test/fixtures/insert_entity_response_entry.xml +25 -25
  125. data/test/fixtures/list_affinity_groups.xml +22 -22
  126. data/test/fixtures/list_blobs.xml +120 -120
  127. data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
  128. data/test/fixtures/list_blocks_all.xml +22 -22
  129. data/test/fixtures/list_blocks_committed.xml +12 -12
  130. data/test/fixtures/list_cloud_services.xml +38 -28
  131. data/test/fixtures/list_containers.xml +37 -37
  132. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  133. data/test/fixtures/list_images.xml +110 -110
  134. data/test/fixtures/list_locations.xml +62 -62
  135. data/test/fixtures/list_page_ranges.xml +10 -10
  136. data/test/fixtures/list_sql_database.xml +36 -36
  137. data/test/fixtures/list_sql_server_firewall.xml +23 -23
  138. data/test/fixtures/list_storage_accounts.xml +45 -45
  139. data/test/fixtures/list_virtual_networks.xml +92 -92
  140. data/test/fixtures/logging.xml +11 -11
  141. data/test/fixtures/management_certificate.pem +55 -55
  142. data/test/fixtures/messages.xml +12 -12
  143. data/test/fixtures/metrics.xml +10 -10
  144. data/test/fixtures/privatekey.key +28 -28
  145. data/test/fixtures/query_entities_empty_response.xml +7 -7
  146. data/test/fixtures/query_entities_response.xml +45 -45
  147. data/test/fixtures/queue_service_properties.xml +22 -22
  148. data/test/fixtures/queue_service_properties_original.xml +19 -19
  149. data/test/fixtures/queues.xml +16 -16
  150. data/test/fixtures/retention_policy.xml +5 -5
  151. data/test/fixtures/sb_default_create_queue_response.xml +23 -23
  152. data/test/fixtures/sb_default_create_topic_response.xml +18 -18
  153. data/test/fixtures/sb_get_access_token_response.txt +1 -1
  154. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
  155. data/test/fixtures/storage_service_properties.xml +23 -23
  156. data/test/fixtures/update_storage_account.xml +16 -0
  157. data/test/fixtures/update_storage_error.xml +5 -0
  158. data/test/fixtures/updated_storage_accounts.xml +53 -0
  159. data/test/fixtures/virtual_machine.xml +108 -107
  160. data/test/fixtures/windows_virtual_machine.xml +106 -106
  161. data/test/integration/affinity_group/Affinity_test.rb +55 -55
  162. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
  163. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
  164. data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
  165. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
  166. data/test/integration/blob/blob_gb18030_test.rb +199 -199
  167. data/test/integration/blob/blob_metadata_test.rb +75 -75
  168. data/test/integration/blob/blob_pages_test.rb +119 -119
  169. data/test/integration/blob/blob_properties_test.rb +77 -77
  170. data/test/integration/blob/block_blob_test.rb +254 -254
  171. data/test/integration/blob/container/container_acl_test.rb +69 -69
  172. data/test/integration/blob/container/container_metadata_test.rb +50 -50
  173. data/test/integration/blob/container/create_container_test.rb +60 -60
  174. data/test/integration/blob/container/delete_container_test.rb +39 -39
  175. data/test/integration/blob/container/get_container_properties_test.rb +48 -48
  176. data/test/integration/blob/container/list_containers_test.rb +79 -79
  177. data/test/integration/blob/container/root_container_test.rb +53 -53
  178. data/test/integration/blob/copy_blob_test.rb +113 -113
  179. data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
  180. data/test/integration/blob/create_page_blob_test.rb +83 -83
  181. data/test/integration/blob/delete_blob_test.rb +159 -159
  182. data/test/integration/blob/get_blob_test.rb +65 -65
  183. data/test/integration/blob/informative_errors_test.rb +38 -38
  184. data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
  185. data/test/integration/blob/lease/break_lease_test.rb +40 -40
  186. data/test/integration/blob/lease/release_lease_test.rb +40 -40
  187. data/test/integration/blob/lease/renew_lease_test.rb +42 -42
  188. data/test/integration/blob/list_blobs_test.rb +113 -113
  189. data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
  190. data/test/integration/database/create_sql_server_test.rb +53 -57
  191. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -72
  192. data/test/integration/database/delete_sql_server_test.rb +58 -63
  193. data/test/integration/database/list_sql_server_firewall_test.rb +45 -46
  194. data/test/integration/database/list_sql_servers_test.rb +44 -45
  195. data/test/integration/database/reset_password_sql_server_test.rb +55 -56
  196. data/test/integration/location/Location_List_test.rb +39 -39
  197. data/test/integration/queue/clear_messages_test.rb +42 -42
  198. data/test/integration/queue/create_message_test.rb +75 -75
  199. data/test/integration/queue/create_queue_test.rb +50 -50
  200. data/test/integration/queue/delete_message_test.rb +67 -67
  201. data/test/integration/queue/delete_queue_test.rb +45 -45
  202. data/test/integration/queue/informative_errors_test.rb +41 -41
  203. data/test/integration/queue/list_messages_encoded_test.rb +79 -79
  204. data/test/integration/queue/list_messages_test.rb +79 -79
  205. data/test/integration/queue/list_queues_test.rb +44 -44
  206. data/test/integration/queue/peek_messages_test.rb +59 -59
  207. data/test/integration/queue/queue_gb18030_test.rb +131 -131
  208. data/test/integration/queue/queue_metadata_test.rb +40 -40
  209. data/test/integration/queue/update_message_test.rb +74 -74
  210. data/test/integration/service_bus/informative_errors_test.rb +36 -36
  211. data/test/integration/service_bus/queues_scenario_test.rb +200 -200
  212. data/test/integration/service_bus/queues_test.rb +265 -265
  213. data/test/integration/service_bus/rules_test.rb +144 -144
  214. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
  215. data/test/integration/service_bus/scenario_test.rb +101 -101
  216. data/test/integration/service_bus/subscriptions_test.rb +211 -211
  217. data/test/integration/service_bus/topics_scenario_test.rb +406 -406
  218. data/test/integration/service_bus/topics_test.rb +129 -129
  219. data/test/integration/storage_management/storage_management_test.rb +160 -0
  220. data/test/integration/table/create_table_test.rb +35 -35
  221. data/test/integration/table/delete_entity_batch_test.rb +106 -106
  222. data/test/integration/table/delete_entity_test.rb +93 -93
  223. data/test/integration/table/delete_table_test.rb +39 -39
  224. data/test/integration/table/get_table_test.rb +36 -36
  225. data/test/integration/table/informative_errors_test.rb +38 -38
  226. data/test/integration/table/insert_entity_batch_test.rb +99 -99
  227. data/test/integration/table/insert_entity_test.rb +87 -87
  228. data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
  229. data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
  230. data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
  231. data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
  232. data/test/integration/table/merge_entity_batch_test.rb +127 -127
  233. data/test/integration/table/merge_entity_test.rb +112 -112
  234. data/test/integration/table/query_entities_test.rb +194 -194
  235. data/test/integration/table/query_tables_test.rb +42 -42
  236. data/test/integration/table/query_test.rb +250 -250
  237. data/test/integration/table/table_acl_test.rb +51 -51
  238. data/test/integration/table/table_gb18030_test.rb +355 -355
  239. data/test/integration/table/update_entity_batch_test.rb +148 -148
  240. data/test/integration/table/update_entity_test.rb +130 -130
  241. data/test/integration/test_helper.rb +42 -44
  242. data/test/integration/vm/VM_Create_test.rb +213 -235
  243. data/test/integration/vm/VM_Delete_test.rb +55 -55
  244. data/test/integration/vm/VM_List_test.rb +71 -71
  245. data/test/integration/vm/VM_ShutDown_test.rb +59 -59
  246. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
  247. data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
  248. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
  249. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
  250. data/test/support/env.rb +19 -19
  251. data/test/support/fixtures.rb +36 -36
  252. data/test/support/name_generator.rb +160 -160
  253. data/test/support/stubs.rb +42 -42
  254. data/test/support/virtual_machine_name_generator.rb +117 -127
  255. data/test/support/virtual_network_helper.rb +73 -73
  256. data/test/test_helper.rb +52 -52
  257. data/test/unit/affinity_group/affinity_group_test.rb +192 -192
  258. data/test/unit/affinity_group/serialization_test.rb +88 -88
  259. data/test/unit/base_management/location_test.rb +57 -57
  260. data/test/unit/blob/blob_service_test.rb +1946 -1946
  261. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
  262. data/test/unit/cloud_service_management/serialization_test.rb +169 -76
  263. data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
  264. data/test/unit/core/auth/shared_key_test.rb +58 -58
  265. data/test/unit/core/auth/signer_test.rb +30 -30
  266. data/test/unit/core/http/http_error_test.rb +57 -57
  267. data/test/unit/core/http/http_request_test.rb +66 -66
  268. data/test/unit/core/http/http_response_test.rb +45 -45
  269. data/test/unit/core/http/retry_policy_test.rb +23 -23
  270. data/test/unit/database/serialization_test.rb +97 -95
  271. data/test/unit/database/sql_database_server_service_test.rb +288 -152
  272. data/test/unit/service/serialization_test.rb +501 -501
  273. data/test/unit/service/storage_service_test.rb +290 -290
  274. data/test/unit/storage_management/serialization_test.rb +232 -65
  275. data/test/unit/storage_management/storage_management_service_test.rb +233 -94
  276. data/test/unit/table/edmtype_test.rb +107 -107
  277. data/test/unit/virtual_machine_image_management/serialization_test.rb +34 -34
  278. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +60 -60
  279. data/test/unit/virtual_machine_management/serialization_test.rb +119 -116
  280. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +383 -386
  281. data/test/unit/vnet/serialization_test.rb +187 -187
  282. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
  283. metadata +55 -23
@@ -1,50 +1,190 @@
1
- #-------------------------------------------------------------------------
2
- # Copyright 2013 Microsoft Open Technologies, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- #--------------------------------------------------------------------------
15
- require 'base64'
16
- require 'azure/storage_management/storage_account'
17
-
18
- module Azure
19
- module StorageManagement
20
- module Serialization
21
- def self.storage_services_to_xml(name, options={})
22
- builder = Nokogiri::XML::Builder.new do |xml|
23
- xml.CreateStorageServiceInput('xmlns'=>'http://schemas.microsoft.com/windowsazure') {
24
- xml.ServiceName name
25
- xml.Label Base64.encode64(name)
26
- xml.Description options[:description] || 'Explicitly created storage service'
27
- if !options[:affinity_group_name].nil?
28
- xml.AffinityGroup options[:affinity_group_name]
29
- else
30
- xml.Location options[:location]
31
- end
32
- }
33
- end
34
- builder.doc.to_xml
35
- end
36
-
37
- def self.storage_services_from_xml(storageXML)
38
- storage_accounts = []
39
- storage_servicesXML = storageXML.css('StorageServices StorageService')
40
- storage_servicesXML.each do |storage_service_xml|
41
- storage_account = StorageAccount.new
42
- storage_account.name = xml_content(storage_service_xml, 'ServiceName')
43
- storage_accounts << storage_account
44
- end
45
- storage_accounts.compact
46
- end
47
-
48
- end
49
- end
50
- end
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #--------------------------------------------------------------------------
15
+ require 'base64'
16
+ require 'azure/storage_management/storage_account'
17
+
18
+ module Azure
19
+ module StorageManagement
20
+ # Storage management serialization module is responsible for converting
21
+ # the objects to XML and vice versa.
22
+ module Serialization
23
+ def self.storage_services_to_xml(name, options = {})
24
+ builder = Nokogiri::XML::Builder.new do |xml|
25
+ xml.CreateStorageServiceInput(
26
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
27
+ ) do
28
+ xml.ServiceName(name)
29
+ label = options[:label] || name
30
+ xml.Label(Base64.encode64(label))
31
+ xml.Description options[:description]\
32
+ || 'Explicitly created storage service'
33
+ unless options[:affinity_group_name].nil?
34
+ xml.AffinityGroup options[:affinity_group_name]
35
+ else
36
+ xml.Location options[:location]
37
+ end
38
+ add_options_to_xml(xml, options)
39
+ end
40
+ end
41
+ builder.doc.to_xml
42
+ end
43
+
44
+ def self.storage_services_from_xml(storage_xml)
45
+ storage_accounts = []
46
+ storage_services_xml = storage_xml.css('StorageService')
47
+ storage_services_xml.each do |storage_service_xml|
48
+ storage_account = StorageAccount.new
49
+
50
+ storage_account.url = xml_content(storage_service_xml, 'Url')
51
+ storage_account.name = xml_content(
52
+ storage_service_xml, 'ServiceName'
53
+ )
54
+
55
+ storage_service_properties = storage_service_xml.css(
56
+ 'StorageServiceProperties'
57
+ )
58
+
59
+ storage_account.description = xml_content(
60
+ storage_service_properties, 'Description'
61
+ )
62
+ storage_account.affinity_group = xml_content(
63
+ storage_service_properties, 'AffinityGroup'
64
+ )
65
+ storage_account.location = xml_content(
66
+ storage_service_properties, 'Location'
67
+ )
68
+ storage_account.label = Base64.decode64(
69
+ xml_content(storage_service_properties, 'Label')
70
+ )
71
+ storage_account.status = xml_content(
72
+ storage_service_properties, 'Status'
73
+ )
74
+ storage_account.endpoints = storage_service_properties.css(
75
+ 'Endpoints Endpoint'
76
+ ).map { |endpoint| endpoint.content }
77
+ storage_account.geo_replication_enabled = xml_content(
78
+ storage_service_properties, 'GeoReplicationEnabled'
79
+ )
80
+ storage_account.geo_primary_region = xml_content(
81
+ storage_service_properties, 'GeoPrimaryRegion'
82
+ )
83
+ storage_account.status_of_primary = xml_content(
84
+ storage_service_properties, 'StatusOfPrimary'
85
+ )
86
+ storage_account.last_geo_failover_time = xml_content(
87
+ storage_service_properties, 'LastGeoFailoverTime'
88
+ )
89
+ storage_account.geo_secondary_region = xml_content(
90
+ storage_service_properties, 'GeoSecondaryRegion'
91
+ )
92
+ storage_account.status_of_secondary = xml_content(
93
+ storage_service_properties, 'StatusOfSecondary'
94
+ )
95
+ storage_account.creation_time = xml_content(
96
+ storage_service_properties, 'CreationTime'
97
+ )
98
+ storage_account.extended_properties = storage_service_xml.css(
99
+ 'ExtendedProperties ExtendedProperty'
100
+ ).map do |prop|
101
+ {
102
+ name: xml_content(prop, 'Name'),
103
+ value: xml_content(prop, 'Value')
104
+ }
105
+ end
106
+
107
+ storage_accounts << storage_account
108
+ end
109
+
110
+ # returns the first storage account if only one found
111
+ # This will be the case when calling the get_storage_account_properties
112
+ # API or if only one storage account exists for the subscription
113
+ return storage_accounts.first if storage_accounts.size == 1
114
+
115
+ # returns all the storage accounts, if more than 1 found
116
+ storage_accounts.compact
117
+ end
118
+
119
+ def self.storage_update_to_xml(options)
120
+ # Cannot update if options is nil or empty
121
+ fail 'No options specified' if options.nil? || options.empty?
122
+
123
+ # Either one of Label, or Description is required.
124
+ if (options[:label].nil? || options[:label].empty?) &&
125
+ (options[:description].nil? || options[:description].empty?)
126
+ fail 'Either one of Label or Description'\
127
+ ' has to be provided. Both cannot be empty'
128
+ end
129
+
130
+ # The input param may not be nil or empty, but the values inside may
131
+ # be. Check if atleast one value exists before proceeding.
132
+ is_empty = true
133
+ options.each do |option, value|
134
+ case option
135
+ when :description, :label
136
+ is_empty = value.nil? || value.empty?
137
+ when :geo_replication_enabled
138
+ is_empty = !(value.kind_of?(TrueClass)\
139
+ || value.kind_of?(FalseClass))
140
+ when :extended_properties
141
+ value.each do |p, v|
142
+ is_empty = ((p.nil? || p.empty?) || (v.nil? || v.empty?))
143
+ break unless is_empty
144
+ end
145
+ end
146
+
147
+ break unless is_empty
148
+ end
149
+
150
+ # Raise a RuntimeError if no options were provided
151
+ fail 'No Options Specified' if is_empty
152
+
153
+ builder = Nokogiri::XML::Builder.new do |xml|
154
+ xml.UpdateStorageServiceInput(
155
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
156
+ ) do
157
+ # Check if label is nil. Use description only if label is nil
158
+ if options[:label].nil? || options[:label].empty?
159
+ desc = options[:description]
160
+ xml.Description(desc) unless desc.nil? || desc.empty?
161
+ else
162
+ label = Base64.encode64(options[:label])
163
+ xml.Label(label) unless label.nil? || label.empty?
164
+ end
165
+ add_options_to_xml(xml, options)
166
+ end
167
+ end
168
+ builder.to_xml
169
+ end
170
+
171
+ def self.add_options_to_xml(xml, options = {})
172
+ gre = options[:geo_replication_enabled]
173
+ xml.GeoReplicationEnabled(
174
+ gre
175
+ ) unless gre.nil?\
176
+ || !(gre.kind_of?(TrueClass) || gre.kind_of?(FalseClass))
177
+ xml.ExtendedProperties do
178
+ options[:extended_properties].each do |name, value|
179
+ xml.ExtendedProperty do
180
+ xml.Name name
181
+ xml.Value value
182
+ end unless (name.nil? || name.empty?)\
183
+ || (value.nil? || value.empty?)
184
+ end
185
+ end unless options[:extended_properties].nil?\
186
+ || options[:extended_properties].empty?
187
+ end
188
+ end
189
+ end
190
+ end
@@ -1,29 +1,40 @@
1
- #-------------------------------------------------------------------------
2
- # Copyright 2013 Microsoft Open Technologies, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- #--------------------------------------------------------------------------
15
- module Azure
16
- module StorageManagement
17
- class StorageAccount
18
-
19
- def initialize
20
- yield self if block_given?
21
- end
22
-
23
- attr_accessor :name
24
- attr_accessor :description
25
- attr_accessor :location
26
-
27
- end
28
- end
29
- end
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #--------------------------------------------------------------------------
15
+ module Azure
16
+ module StorageManagement
17
+ # Represents a Windows Azure storage account
18
+ class StorageAccount
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+ attr_accessor :url
23
+ attr_accessor :name
24
+ attr_accessor :description
25
+ attr_accessor :location
26
+ attr_accessor :affinity_group
27
+ attr_accessor :label
28
+ attr_accessor :status
29
+ attr_accessor :endpoints
30
+ attr_accessor :geo_replication_enabled
31
+ attr_accessor :geo_primary_region
32
+ attr_accessor :status_of_primary
33
+ attr_accessor :last_geo_failover_time
34
+ attr_accessor :geo_secondary_region
35
+ attr_accessor :status_of_secondary
36
+ attr_accessor :creation_time
37
+ attr_accessor :extended_properties
38
+ end
39
+ end
40
+ end
@@ -1,99 +1,166 @@
1
- #-------------------------------------------------------------------------
2
- # Copyright 2013 Microsoft Open Technologies, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- #--------------------------------------------------------------------------
15
- require 'azure/storage_management/serialization'
16
-
17
- module Azure
18
- module StorageManagement
19
- class StorageManagementService < BaseManagementService
20
-
21
- def initialize
22
- super()
23
- end
24
-
25
- # Public: Gets a list of storage accounts available under the current subscription.
26
- #
27
- # Returns an array of Azure::StorageManagement::StorageAccount objects
28
- def list_storage_accounts
29
- request_path = "/services/storageservices"
30
- request = ManagementHttpRequest.new(:get, request_path, nil)
31
- response = request.call
32
- Serialization.storage_services_from_xml(response)
33
- end
34
-
35
- # Public: Checks to see if the specified storage account is available
36
- #
37
- # ==== Attributes
38
- #
39
- # * +name+ - String. Storage account name.
40
- #
41
- # Returns: A boolean value indicating whether the storage account exists.
42
- # If true, the storage account exists. If false, the storage account does not exist.
43
- def get_storage_account(name)
44
- return false if name.nil?
45
- flag = false
46
- storage_accounts = Azure::StorageManagementService.new.list_storage_accounts
47
- storage_accounts.each do |storage|
48
- if storage.name == name
49
- flag = true
50
- break
51
- end
52
- end
53
- flag
54
- end
55
-
56
- # Public: Create a new storage account in Windows Azure.
57
- #
58
- # ==== Attributes
59
- #
60
- # * +name+ - String. The name of the storage service.
61
- # * +options+ - Hash. Optional parameters.
62
- #
63
- # ==== Options
64
- #
65
- # Accepted key/value pairs in options parameter are:
66
- # * +:location+ - String. The location where the storage service will be created.(optional)
67
- # * +:description+ - String. A description for the storage service. (optional)
68
- #
69
- # Returns None
70
- def create_storage_account(name, options={})
71
- if get_storage_account(name)
72
- Loggerx.warn "Storage Account #{name} already exists. Skipped..."
73
- else
74
- Loggerx.info "Creating Storage Account #{name}."
75
- body = Serialization.storage_services_to_xml(name, options)
76
- request_path = "/services/storageservices"
77
- request = ManagementHttpRequest.new(:post, request_path, body)
78
- request.call
79
- end
80
- end
81
-
82
- # Public: Deletes the specified storage account of given subscription id from Windows Azure.
83
- #
84
- # ==== Attributes
85
- #
86
- # * +name+ - String. Storage account name.
87
- #
88
- # Returns: None
89
- def delete_storage_account(name)
90
- Loggerx.info "Deleting Storage Account #{name}."
91
- request_path = "/services/storageservices/#{name}"
92
- request = ManagementHttpRequest.new(:delete, request_path)
93
- request.call
94
- rescue Exception => e
95
- e.message
96
- end
97
- end
98
- end
99
- end
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #--------------------------------------------------------------------------
15
+ require 'azure/storage_management/serialization'
16
+
17
+ module Azure
18
+ module StorageManagement
19
+ # Provides Storage Management API
20
+ class StorageManagementService < BaseManagementService
21
+ def initialize
22
+ super()
23
+ end
24
+ # Public: Gets a list of storage accounts available under the
25
+ # current subscription.
26
+ #
27
+ # Returns an array of Azure::StorageManagement::StorageAccount objects
28
+ def list_storage_accounts
29
+ request_path = '/services/storageservices'
30
+ request = ManagementHttpRequest.new(:get, request_path, nil)
31
+ response = request.call
32
+ Serialization.storage_services_from_xml(response)
33
+ end
34
+
35
+ # Public: Checks to see if the specified storage account is available
36
+ #
37
+ # ==== Attributes
38
+ #
39
+ # * +name+ - String. Storage account name.
40
+ #
41
+ # Returns: A boolean value indicating whether the storage account exists.
42
+ # If true, the storage account exists. If false, the storage account
43
+ # does not exist.
44
+ def get_storage_account(name)
45
+ return false if name.nil?
46
+ flag = false
47
+ storage_accounts = list_storage_accounts
48
+ storage_accounts.each do |storage|
49
+ if storage.name == name
50
+ flag = true
51
+ break
52
+ end
53
+ end
54
+ flag
55
+ end
56
+
57
+ # Public: Gets the properties of the storage account specified.
58
+ #
59
+ # ==== Attributes
60
+ #
61
+ # * +name+ - String. The name of the storage account. Required.
62
+ #
63
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/ee460802.aspx
64
+ #
65
+ # Returns the storage account
66
+ def get_storage_account_properties(name)
67
+ request_path = "/services/storageservices/#{name}"
68
+ request = ManagementHttpRequest.new(:get, request_path, nil)
69
+ response = request.call
70
+ Serialization.storage_services_from_xml(response)
71
+ end
72
+
73
+ # Public: Create a new storage account in Windows Azure.
74
+ #
75
+ # ==== Attributes
76
+ #
77
+ # * +name+ - String. The name of the storage service.
78
+ # * +options+ - Hash. Optional parameters.
79
+ #
80
+ # ==== Options
81
+ #
82
+ # Accepted key/value pairs in options parameter are:
83
+ # * +:label+ - String. The label for this storage account. The name will
84
+ # be used as label if none specified. (optional)
85
+ # * +:location+ - String. The location where the storage
86
+ # service will be created. Reqruied if no affinity_group_name specified.
87
+ # * +:description+ - String. A description for the storage
88
+ # service. (optional)
89
+ # * +:affinity_group_name+ - String. The name of an existing affinity group
90
+ # in the specified subscription. Required if no location specified.
91
+ # * +:geo_replication_enabled+ - String. A flag indicating wheter to
92
+ # turn Geo replication on or off. Values other than 'true'/'false'
93
+ # will result in an error from the REST API. (optional)
94
+ # * +:extended_properties+ - Hash. Key/Value pairs of extended
95
+ # properties to add to the storage account. The key is used as the
96
+ # property name and the value as its value. (optional)
97
+ #
98
+ # Returns None
99
+ def create_storage_account(name, options = {})
100
+ raise 'Name not specified' if !name || name.class != String || name.empty?
101
+ if get_storage_account(name)
102
+ Loggerx.warn "Storage Account #{name} already exists. Skipped..."
103
+ else
104
+ Loggerx.info "Creating Storage Account #{name}."
105
+ body = Serialization.storage_services_to_xml(name, options)
106
+ request_path = '/services/storageservices'
107
+ request = ManagementHttpRequest.new(:post, request_path, body)
108
+ request.call
109
+ end
110
+ end
111
+
112
+ # Public: Updates an existing storage account in Windows Azure
113
+ #
114
+ # ==== Attributes
115
+ #
116
+ # * +name+ - String. The name of the storage service.
117
+ # * +options+ - Hash. Optional parameters.
118
+ #
119
+ # ==== Options
120
+ #
121
+ # Accepted key/value pairs in options parameter are:
122
+ # * +:label+ - String. A label for the storage service. Required if no
123
+ # description is provided. If both label and description are
124
+ # provided, only the label will get updated.
125
+ # * +:description+ - String. A description for the storage service.
126
+ # Required if no label is provided. If both label and description are
127
+ # provided, only the label will get updated.
128
+ # * +:geo_replication_enabled+ - Boolean (TrueClass/FalseClass). Boolean
129
+ # flag indicating wheter to turn Geo replication on or off. (optional)
130
+ # * +:extended_properties+ - Hash. Key/Value pairs of extended
131
+ # properties to add to the storage account. The key is used as the
132
+ # property name and the value as its value. (optional)
133
+ #
134
+ # Returns None
135
+ # Fails with RuntimeError if invalid options specified
136
+ def update_storage_account(name, options = {})
137
+ if get_storage_account name
138
+ Loggerx.info "Account '#{name}' exists, updating..."
139
+ body = Serialization.storage_update_to_xml options
140
+ request_path = "/services/storageservices/#{name}"
141
+ request = ManagementHttpRequest.new(:put, request_path, body)
142
+ request.call
143
+ else
144
+ Loggerx.warn "Storage Account '#{name}' does not exist. Skipped..."
145
+ end
146
+ end
147
+
148
+ # Public: Deletes the specified storage account of given subscription id
149
+ # from Windows Azure.
150
+ #
151
+ # ==== Attributes
152
+ #
153
+ # * +name+ - String. Storage account name.
154
+ #
155
+ # Returns: None
156
+ def delete_storage_account(name)
157
+ Loggerx.info "Deleting Storage Account #{name}."
158
+ request_path = "/services/storageservices/#{name}"
159
+ request = ManagementHttpRequest.new(:delete, request_path)
160
+ request.call
161
+ rescue Exception => e
162
+ e.message
163
+ end
164
+ end
165
+ end
166
+ end