azure-plus 0.6.5

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 (298) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +11 -0
  4. data/ChangeLog.txt +40 -0
  5. data/Gemfile +16 -0
  6. data/README.md +590 -0
  7. data/Rakefile +129 -0
  8. data/azure.gemspec +47 -0
  9. data/lib/azure.rb +52 -0
  10. data/lib/azure/base_management/affinity_group.rb +32 -0
  11. data/lib/azure/base_management/base_management_service.rb +238 -0
  12. data/lib/azure/base_management/location.rb +27 -0
  13. data/lib/azure/base_management/management_http_request.rb +244 -0
  14. data/lib/azure/base_management/serialization.rb +129 -0
  15. data/lib/azure/base_management/sql_management_http_request.rb +45 -0
  16. data/lib/azure/blob/blob.rb +32 -0
  17. data/lib/azure/blob/blob_service.rb +1424 -0
  18. data/lib/azure/blob/block.rb +31 -0
  19. data/lib/azure/blob/container.rb +32 -0
  20. data/lib/azure/blob/serialization.rb +285 -0
  21. data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
  22. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +361 -0
  23. data/lib/azure/cloud_service_management/configuration_set.rb +28 -0
  24. data/lib/azure/cloud_service_management/deployment.rb +64 -0
  25. data/lib/azure/cloud_service_management/input_endpoint.rb +29 -0
  26. data/lib/azure/cloud_service_management/instance_endpoint.rb +31 -0
  27. data/lib/azure/cloud_service_management/persistent_vm_downtime.rb +29 -0
  28. data/lib/azure/cloud_service_management/role.rb +30 -0
  29. data/lib/azure/cloud_service_management/role_instance.rb +40 -0
  30. data/lib/azure/cloud_service_management/serialization.rb +329 -0
  31. data/lib/azure/cloud_service_management/virtual_ip.rb +29 -0
  32. data/lib/azure/core.rb +39 -0
  33. data/lib/azure/core/auth/authorizer.rb +36 -0
  34. data/lib/azure/core/auth/shared_key.rb +110 -0
  35. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  36. data/lib/azure/core/auth/signer.rb +48 -0
  37. data/lib/azure/core/configuration.rb +211 -0
  38. data/lib/azure/core/error.rb +22 -0
  39. data/lib/azure/core/filtered_service.rb +44 -0
  40. data/lib/azure/core/http/debug_filter.rb +36 -0
  41. data/lib/azure/core/http/http_error.rb +88 -0
  42. data/lib/azure/core/http/http_filter.rb +53 -0
  43. data/lib/azure/core/http/http_request.rb +159 -0
  44. data/lib/azure/core/http/http_response.rb +140 -0
  45. data/lib/azure/core/http/retry_policy.rb +74 -0
  46. data/lib/azure/core/http/signer_filter.rb +34 -0
  47. data/lib/azure/core/service.rb +63 -0
  48. data/lib/azure/core/signed_service.rb +43 -0
  49. data/lib/azure/core/utility.rb +190 -0
  50. data/lib/azure/queue/message.rb +30 -0
  51. data/lib/azure/queue/queue.rb +29 -0
  52. data/lib/azure/queue/queue_service.rb +568 -0
  53. data/lib/azure/queue/serialization.rb +106 -0
  54. data/lib/azure/service/access_policy.rb +26 -0
  55. data/lib/azure/service/enumeration_results.rb +21 -0
  56. data/lib/azure/service/logging.rb +32 -0
  57. data/lib/azure/service/metrics.rb +31 -0
  58. data/lib/azure/service/retention_policy.rb +25 -0
  59. data/lib/azure/service/serialization.rb +240 -0
  60. data/lib/azure/service/signed_identifier.rb +30 -0
  61. data/lib/azure/service/storage_service.rb +79 -0
  62. data/lib/azure/service/storage_service_properties.rb +32 -0
  63. data/lib/azure/service_bus/action.rb +21 -0
  64. data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
  65. data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
  66. data/lib/azure/service_bus/brokered_message.rb +124 -0
  67. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
  68. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  69. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  70. data/lib/azure/service_bus/false_filter.rb +38 -0
  71. data/lib/azure/service_bus/filter.rb +21 -0
  72. data/lib/azure/service_bus/interval.rb +104 -0
  73. data/lib/azure/service_bus/queue.rb +230 -0
  74. data/lib/azure/service_bus/resource.rb +109 -0
  75. data/lib/azure/service_bus/rule.rb +98 -0
  76. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  77. data/lib/azure/service_bus/serialization.rb +160 -0
  78. data/lib/azure/service_bus/service_bus_service.rb +829 -0
  79. data/lib/azure/service_bus/sql_filter.rb +50 -0
  80. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  81. data/lib/azure/service_bus/subscription.rb +184 -0
  82. data/lib/azure/service_bus/topic.rb +187 -0
  83. data/lib/azure/service_bus/true_filter.rb +38 -0
  84. data/lib/azure/sql_database_management/serialization.rb +111 -0
  85. data/lib/azure/sql_database_management/sql_database.rb +31 -0
  86. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
  87. data/lib/azure/storage_management/serialization.rb +184 -0
  88. data/lib/azure/storage_management/storage_account.rb +40 -0
  89. data/lib/azure/storage_management/storage_management_service.rb +166 -0
  90. data/lib/azure/table/auth/shared_key.rb +92 -0
  91. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  92. data/lib/azure/table/batch.rb +330 -0
  93. data/lib/azure/table/batch_response.rb +118 -0
  94. data/lib/azure/table/edmtype.rb +127 -0
  95. data/lib/azure/table/entity.rb +31 -0
  96. data/lib/azure/table/guid.rb +24 -0
  97. data/lib/azure/table/query.rb +112 -0
  98. data/lib/azure/table/serialization.rb +108 -0
  99. data/lib/azure/table/table_service.rb +560 -0
  100. data/lib/azure/version.rb +31 -0
  101. data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
  102. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
  103. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
  104. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
  105. data/lib/azure/virtual_machine_management/serialization.rb +436 -0
  106. data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
  107. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
  108. data/lib/azure/virtual_network_management/serialization.rb +186 -0
  109. data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
  110. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
  111. data/test/fixtures/32px-fulls-black.jpg +0 -0
  112. data/test/fixtures/affinity_group.xml +33 -0
  113. data/test/fixtures/all_containers.xml +20 -0
  114. data/test/fixtures/all_tables.xml +22 -0
  115. data/test/fixtures/certificate.pem +21 -0
  116. data/test/fixtures/container_acl.xml +11 -0
  117. data/test/fixtures/create_sql_database_server.xml +2 -0
  118. data/test/fixtures/create_storage_desc_error.xml +5 -0
  119. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  120. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  121. data/test/fixtures/create_storage_full_error.xml +6 -0
  122. data/test/fixtures/create_storage_label_error.xml +5 -0
  123. data/test/fixtures/create_storage_location_error.xml +5 -0
  124. data/test/fixtures/create_storage_name_error.xml +6 -0
  125. data/test/fixtures/create_table_response_entry.xml +15 -0
  126. data/test/fixtures/delete_storage_container_error.xml +5 -0
  127. data/test/fixtures/delete_storage_error.xml +5 -0
  128. data/test/fixtures/deployment_error.xml +5 -0
  129. data/test/fixtures/empty_xml_file +0 -0
  130. data/test/fixtures/get_deployment.xml +94 -0
  131. data/test/fixtures/get_deployment_existing.xml +94 -0
  132. data/test/fixtures/get_deployment_missing.xml +5 -0
  133. data/test/fixtures/get_storage_account_error.xml +5 -0
  134. data/test/fixtures/get_storage_account_properties.xml +32 -0
  135. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  136. data/test/fixtures/http_error.xml +5 -0
  137. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  138. data/test/fixtures/list_affinity_groups.xml +22 -0
  139. data/test/fixtures/list_blobs.xml +121 -0
  140. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  141. data/test/fixtures/list_blocks_all.xml +23 -0
  142. data/test/fixtures/list_blocks_committed.xml +13 -0
  143. data/test/fixtures/list_cloud_services.xml +39 -0
  144. data/test/fixtures/list_containers.xml +38 -0
  145. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  146. data/test/fixtures/list_images.xml +110 -0
  147. data/test/fixtures/list_locations.xml +62 -0
  148. data/test/fixtures/list_page_ranges.xml +11 -0
  149. data/test/fixtures/list_sql_database.xml +36 -0
  150. data/test/fixtures/list_sql_server_firewall.xml +23 -0
  151. data/test/fixtures/list_storage_account_single.xml +25 -0
  152. data/test/fixtures/list_storage_accounts.xml +46 -0
  153. data/test/fixtures/list_virtual_networks.xml +92 -0
  154. data/test/fixtures/logging.xml +11 -0
  155. data/test/fixtures/management_certificate.pem +55 -0
  156. data/test/fixtures/messages.xml +12 -0
  157. data/test/fixtures/metrics.xml +10 -0
  158. data/test/fixtures/privatekey.key +28 -0
  159. data/test/fixtures/query_entities_empty_response.xml +7 -0
  160. data/test/fixtures/query_entities_response.xml +45 -0
  161. data/test/fixtures/queue_service_properties.xml +22 -0
  162. data/test/fixtures/queue_service_properties_original.xml +19 -0
  163. data/test/fixtures/queues.xml +16 -0
  164. data/test/fixtures/retention_policy.xml +5 -0
  165. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  166. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  167. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  168. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  169. data/test/fixtures/storage_service_properties.xml +23 -0
  170. data/test/fixtures/update_storage_account.xml +16 -0
  171. data/test/fixtures/update_storage_error.xml +5 -0
  172. data/test/fixtures/updated_storage_accounts.xml +53 -0
  173. data/test/fixtures/virtual_machine.xml +113 -0
  174. data/test/fixtures/windows_virtual_machine.xml +106 -0
  175. data/test/integration/affinity_group/Affinity_test.rb +55 -0
  176. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
  177. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
  178. data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
  179. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
  180. data/test/integration/blob/blob_gb18030_test.rb +199 -0
  181. data/test/integration/blob/blob_metadata_test.rb +75 -0
  182. data/test/integration/blob/blob_pages_test.rb +119 -0
  183. data/test/integration/blob/blob_properties_test.rb +77 -0
  184. data/test/integration/blob/block_blob_test.rb +254 -0
  185. data/test/integration/blob/container/container_acl_test.rb +69 -0
  186. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  187. data/test/integration/blob/container/create_container_test.rb +60 -0
  188. data/test/integration/blob/container/delete_container_test.rb +39 -0
  189. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  190. data/test/integration/blob/container/list_containers_test.rb +79 -0
  191. data/test/integration/blob/container/root_container_test.rb +54 -0
  192. data/test/integration/blob/copy_blob_test.rb +113 -0
  193. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  194. data/test/integration/blob/create_page_blob_test.rb +83 -0
  195. data/test/integration/blob/delete_blob_test.rb +159 -0
  196. data/test/integration/blob/get_blob_test.rb +65 -0
  197. data/test/integration/blob/informative_errors_test.rb +39 -0
  198. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  199. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  200. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  201. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  202. data/test/integration/blob/list_blobs_test.rb +113 -0
  203. data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
  204. data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
  205. data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
  206. data/test/integration/database/create_sql_server_test.rb +53 -0
  207. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
  208. data/test/integration/database/delete_sql_server_test.rb +58 -0
  209. data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
  210. data/test/integration/database/list_sql_servers_test.rb +44 -0
  211. data/test/integration/database/reset_password_sql_server_test.rb +55 -0
  212. data/test/integration/location/Location_List_test.rb +39 -0
  213. data/test/integration/queue/clear_messages_test.rb +42 -0
  214. data/test/integration/queue/create_message_test.rb +75 -0
  215. data/test/integration/queue/create_queue_test.rb +50 -0
  216. data/test/integration/queue/delete_message_test.rb +67 -0
  217. data/test/integration/queue/delete_queue_test.rb +45 -0
  218. data/test/integration/queue/informative_errors_test.rb +42 -0
  219. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  220. data/test/integration/queue/list_messages_test.rb +79 -0
  221. data/test/integration/queue/list_queues_test.rb +44 -0
  222. data/test/integration/queue/peek_messages_test.rb +59 -0
  223. data/test/integration/queue/queue_gb18030_test.rb +131 -0
  224. data/test/integration/queue/queue_metadata_test.rb +40 -0
  225. data/test/integration/queue/update_message_test.rb +74 -0
  226. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  227. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  228. data/test/integration/service_bus/queues_test.rb +266 -0
  229. data/test/integration/service_bus/rules_test.rb +145 -0
  230. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
  231. data/test/integration/service_bus/scenario_test.rb +101 -0
  232. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  233. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  234. data/test/integration/service_bus/topics_test.rb +129 -0
  235. data/test/integration/storage_management/storage_management_test.rb +160 -0
  236. data/test/integration/table/create_table_test.rb +36 -0
  237. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  238. data/test/integration/table/delete_entity_test.rb +94 -0
  239. data/test/integration/table/delete_table_test.rb +40 -0
  240. data/test/integration/table/get_table_test.rb +37 -0
  241. data/test/integration/table/informative_errors_test.rb +39 -0
  242. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  243. data/test/integration/table/insert_entity_test.rb +88 -0
  244. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  245. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  246. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  247. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  248. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  249. data/test/integration/table/merge_entity_test.rb +113 -0
  250. data/test/integration/table/query_entities_test.rb +195 -0
  251. data/test/integration/table/query_tables_test.rb +43 -0
  252. data/test/integration/table/query_test.rb +251 -0
  253. data/test/integration/table/table_acl_test.rb +52 -0
  254. data/test/integration/table/table_gb18030_test.rb +355 -0
  255. data/test/integration/table/update_entity_batch_test.rb +149 -0
  256. data/test/integration/table/update_entity_test.rb +131 -0
  257. data/test/integration/test_helper.rb +42 -0
  258. data/test/integration/vm/VM_Create_test.rb +260 -0
  259. data/test/integration/vm/VM_Delete_test.rb +55 -0
  260. data/test/integration/vm/VM_Operations_test.rb +173 -0
  261. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
  262. data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
  263. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
  264. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
  265. data/test/support/env.rb +19 -0
  266. data/test/support/fixtures.rb +36 -0
  267. data/test/support/name_generator.rb +160 -0
  268. data/test/support/stubs.rb +42 -0
  269. data/test/support/virtual_machine_name_generator.rb +102 -0
  270. data/test/support/virtual_network_helper.rb +73 -0
  271. data/test/test_helper.rb +53 -0
  272. data/test/unit/affinity_group/affinity_group_test.rb +192 -0
  273. data/test/unit/affinity_group/serialization_test.rb +88 -0
  274. data/test/unit/base_management/location_test.rb +57 -0
  275. data/test/unit/blob/blob_service_test.rb +1947 -0
  276. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +276 -0
  277. data/test/unit/cloud_service_management/serialization_test.rb +169 -0
  278. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  279. data/test/unit/core/auth/shared_key_test.rb +58 -0
  280. data/test/unit/core/auth/signer_test.rb +30 -0
  281. data/test/unit/core/http/http_error_test.rb +57 -0
  282. data/test/unit/core/http/http_request_test.rb +66 -0
  283. data/test/unit/core/http/http_response_test.rb +45 -0
  284. data/test/unit/core/http/retry_policy_test.rb +23 -0
  285. data/test/unit/database/serialization_test.rb +97 -0
  286. data/test/unit/database/sql_database_server_service_test.rb +288 -0
  287. data/test/unit/service/serialization_test.rb +502 -0
  288. data/test/unit/service/storage_service_test.rb +291 -0
  289. data/test/unit/storage_management/serialization_test.rb +232 -0
  290. data/test/unit/storage_management/storage_management_service_test.rb +261 -0
  291. data/test/unit/table/edmtype_test.rb +108 -0
  292. data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
  293. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
  294. data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
  295. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
  296. data/test/unit/vnet/serialization_test.rb +187 -0
  297. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
  298. metadata +470 -0
@@ -0,0 +1,27 @@
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/base_management/serialization"
16
+
17
+ module Azure
18
+ module BaseManagement
19
+ class Location
20
+ attr_accessor :name, :available_services
21
+
22
+ def initialize
23
+ yield self if block_given?
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,244 @@
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/core/http/http_response'
16
+ require 'azure/core/http/http_request'
17
+ include Azure::Core::Http
18
+
19
+ # Represents an HTTP request that can perform synchronous queries to
20
+ # an HTTP server, returning a HttpResponse
21
+ module Azure
22
+ module BaseManagement
23
+ class ManagementHttpRequest < HttpRequest
24
+ attr_accessor :uri, :warn, :key, :cert
25
+
26
+ # Public: Creates the ManagementHttpRequest
27
+ #
28
+ # method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
29
+ # path - URI. The URI of the HTTP endpoint to query
30
+ # body - IO or String. The request body (optional)
31
+ # key - String. The request key
32
+ # cert - String. The request certificate
33
+ def initialize(method, path, body = nil)
34
+ super
35
+ @warn = false
36
+ content_length = body ? body.bytesize.to_s : '0'
37
+ @headers = {
38
+ 'x-ms-version' => '2014-04-01',
39
+ 'Content-Type' => 'application/xml',
40
+ 'Content-Length' => content_length
41
+ }
42
+ @uri = URI.parse(Azure.config.management_endpoint + Azure.config.subscription_id + path)
43
+ @key = Azure.config.http_private_key
44
+ @cert = Azure.config.http_certificate_key
45
+ end
46
+
47
+ # Public: Sends a request to HTTP server and returns a HttpResponse
48
+ #
49
+ # * +options+ - Hash. Optional parameters.
50
+ #
51
+ # ==== Options
52
+ #
53
+ # Accepted key/value pairs in options parameter are:
54
+ #
55
+ # * +:fire_and_forget+ - Boolean(optional). Default is false. If true, the client
56
+ # does not wait until the request is completed
57
+ # * +:no_exit_on_failure+ - Boolean(optional). Default is false.
58
+ #
59
+ # Returns a Nokogiri::XML instance of HttpResponse body
60
+ def call(options={})
61
+ fire_and_forget = options[:fire_and_forget].nil? ? false : options[:fire_and_forget]
62
+ request = http_request_class.new(uri.request_uri, headers)
63
+ request.body = body if body
64
+ http = http_setup
65
+ # http.set_debug_output($stdout)
66
+ if fire_and_forget
67
+ response = validate_response(HttpResponse.new(http.request(request)), options)
68
+ Nokogiri::XML response.body unless response.nil?
69
+ else
70
+ response = wait_for_completion(HttpResponse.new(http.request(request)), options)
71
+ Nokogiri::XML response.body unless response.nil?
72
+ end
73
+ end
74
+
75
+ # Public: Wait for HTTP request completion.
76
+ #
77
+ # ==== Attributes
78
+ #
79
+ # * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
80
+ # * +options+ - Hash. Optional parameters.
81
+ #
82
+ # ==== Options
83
+ #
84
+ # Accepted key/value pairs in options parameter are:
85
+ #
86
+ # * +:no_exit_on_failure+ - Boolean(optional). Default is false.
87
+ #
88
+ # Print Error or Success of HttpRequest
89
+ def wait_for_completion(response, options={})
90
+ no_exit_on_failure = options[:no_exit_on_failure].nil? ? false : options[:no_exit_on_failure]
91
+ ret_val = Nokogiri::XML response.body
92
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
93
+ error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
94
+ return log_warn_or_exit(response, error_msg, no_exit_on_failure)
95
+ end
96
+ if response.status_code.to_i == 200 || response.status_code.to_i == 201
97
+ return response
98
+ elsif redirected? response
99
+ rebuild_request response
100
+ elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
101
+ check_completion(response.headers['x-ms-request-id'])
102
+ elsif warn && !response.success?
103
+ # Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
104
+ elsif response.body
105
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
106
+ error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
107
+ return log_warn_or_exit(response, error_msg, no_exit_on_failure)
108
+ else
109
+ Loggerx.exception_message "http error: #{response.status_code}"
110
+ end
111
+ else
112
+ Loggerx.exception_message "http error: #{response.status_code}"
113
+ end
114
+ end
115
+
116
+ # Public: Validate the Http response
117
+ #
118
+ # ==== Attributes
119
+ #
120
+ # * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
121
+ # * +options+ - Hash. Optional parameters.
122
+ #
123
+ # ==== Options
124
+ #
125
+ # Accepted key/value pairs in options parameter are:
126
+ #
127
+ # * +:no_exit_on_failure+ - Boolean(optional). Default is false.
128
+ #
129
+ # Print Error or Success of HttpRequest
130
+ def validate_response(response, options={})
131
+ no_exit_on_failure = options[:no_exit_on_failure].nil? ? false : options[:no_exit_on_failure]
132
+ ret_val = Nokogiri::XML response.body
133
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
134
+ error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
135
+ return log_warn_or_exit(response, error_msg, no_exit_on_failure)
136
+ end
137
+ status_code = response.status_code.to_i
138
+ if [200, 201, 202].include? status_code
139
+ return response
140
+ elsif response.body
141
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
142
+ error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
143
+ return log_warn_or_exit(response, error_msg, no_exit_on_failure)
144
+ else
145
+ Loggerx.exception_message "http error: #{response.status_code}"
146
+ end
147
+ else
148
+ Loggerx.exception_message "http error: #{response.status_code}"
149
+ end
150
+ end
151
+
152
+ # Public: Gets the status of the specified operation and determines whether
153
+ # the operation has succeeded, failed, or is still in progress.
154
+ #
155
+ # ==== Attributes
156
+ #
157
+ # * +request_id+ - String. x-ms-request-id response header of request
158
+ #
159
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
160
+ #
161
+ # Print Error or Success of Operation.
162
+ def check_completion(request_id)
163
+ request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}"
164
+ http = http_setup
165
+ headers['Content-Length'] = '0'
166
+ @method = :get
167
+ done = false
168
+ while not done
169
+ print '# '
170
+ request = http_request_class.new(request_path, headers)
171
+ response = HttpResponse.new(http.request(request))
172
+ ret_val = Nokogiri::XML response.body
173
+ status = xml_content(ret_val, 'Operation Status')
174
+ status_code = response.status_code.to_i
175
+ if status != 'InProgress'
176
+ done = true
177
+ end
178
+ if redirected? response
179
+ host_uri = URI.parse(response.headers['location'])
180
+ http = http_setup(host_uri)
181
+ done = false
182
+ end
183
+ if done
184
+ if status.downcase != 'succeeded'
185
+ error_code = xml_content(ret_val, 'Operation Error Code')
186
+ error_msg = xml_content(ret_val, 'Operation Error Message')
187
+ Loggerx.exception_message "#{error_code}: #{error_msg}"
188
+ else
189
+ Loggerx.success "#{status.downcase} (#{status_code})"
190
+ end
191
+ return
192
+ else
193
+ sleep(5)
194
+ end
195
+ end
196
+ end
197
+
198
+ def rebuild_request(response)
199
+ host_uri = URI.parse(response.headers['location'])
200
+ request = http_request_class.new(host_uri.request_uri, headers)
201
+ request.body = body if body
202
+ http = http_setup(host_uri)
203
+ wait_for_completion(HttpResponse.new(http.request(request)))
204
+ end
205
+
206
+ def redirected?(response)
207
+ (response.status_code.to_i == 307)
208
+ end
209
+
210
+ def http_setup(host_uri = nil)
211
+ @uri = host_uri if host_uri
212
+ http = nil
213
+ if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
214
+ if ENV['HTTP_PROXY']
215
+ proxy_uri = URI.parse(ENV['HTTP_PROXY'])
216
+ else
217
+ proxy_uri = URI.parse(ENV['HTTPS_PROXY'])
218
+ end
219
+ http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
220
+ else
221
+ http = Net::HTTP.new(uri.host, uri.port)
222
+ end
223
+
224
+ if uri.scheme.downcase == 'https'
225
+ http.use_ssl = true
226
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
227
+ http.cert = cert
228
+ http.key = key
229
+ end
230
+ http
231
+ end
232
+
233
+ private
234
+ def log_warn_or_exit(response, error_msg, no_exit_on_failure)
235
+ if no_exit_on_failure
236
+ Loggerx.warn "Warning: #{error_msg}"
237
+ return response
238
+ else
239
+ Loggerx.error_with_exit error_msg
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,129 @@
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
+
16
+ module Azure
17
+ module BaseManagement
18
+ module Serialization
19
+ def self.locations_from_xml(locationXML)
20
+ location_objs = []
21
+ xml = locationXML.css('Locations Location')
22
+ xml.each do |meta_node|
23
+ loc = Location.new
24
+ loc.name = xml_content(meta_node, 'Name')
25
+ available_services = meta_node.css('AvailableServices').children
26
+ loc.available_services = available_services.to_ary.join(', ')
27
+ location_objs << loc
28
+ end
29
+ location_objs
30
+ end
31
+
32
+ def self.affinity_group_to_xml(name, location, label, options = {})
33
+ builder = Nokogiri::XML::Builder.new do |xml|
34
+ xml.CreateAffinityGroup(
35
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
36
+ ) do
37
+ xml.Name name
38
+ xml.Label Base64.encode64(label).strip
39
+ xml.Description options[:description]
40
+ xml.Location location
41
+ end
42
+ end
43
+ builder.doc.to_xml
44
+ end
45
+
46
+ def self.affinity_groups_from_xml(affinity_xml)
47
+ affinity_groups = []
48
+ affinity_group_services_xml = affinity_xml.css(
49
+ 'AffinityGroups AffinityGroup'
50
+ )
51
+
52
+ affinity_group_services_xml.each do |ag_xml|
53
+ affinity_group = AffinityGroup.new
54
+ affinity_group.name = xml_content(ag_xml, 'Name')
55
+ affinity_group.label = Base64.decode64(xml_content(ag_xml, 'Label'))
56
+ affinity_group.description = xml_content(ag_xml, 'Description')
57
+ affinity_group.location = xml_content(ag_xml, 'Location')
58
+
59
+ capabilities = ag_xml.css('Capabilities Capability')
60
+ affinity_group.capability = capabilities.map { |x| x.content }
61
+ affinity_groups << affinity_group
62
+ end
63
+ affinity_groups.compact
64
+ end
65
+
66
+ def self.affinity_group_from_xml(affinity_xml)
67
+ hosted_services_xml = affinity_xml.css(
68
+ 'AffinityGroup HostedServices HostedService'
69
+ )
70
+
71
+ storage_services_xml = affinity_xml.css(
72
+ 'AffinityGroup StorageServices StorageService'
73
+ )
74
+
75
+ capability_xml = affinity_xml.css(
76
+ 'AffinityGroup Capabilities Capability'
77
+ )
78
+
79
+ AffinityGroup.new do |affinity_group|
80
+ affinity_group.name = xml_content(
81
+ affinity_xml,
82
+ 'AffinityGroup Name'
83
+ )
84
+ affinity_group.label = Base64.decode64(
85
+ xml_content(
86
+ affinity_xml,
87
+ 'AffinityGroup Label'
88
+ )
89
+ )
90
+ affinity_group.description = xml_content(
91
+ affinity_xml,
92
+ 'AffinityGroup Description'
93
+ )
94
+ affinity_group.location = xml_content(
95
+ affinity_xml,
96
+ 'AffinityGroup Location'
97
+ )
98
+ affinity_group.hosted_services = []
99
+ hosted_services_xml.each do |hosted_service_xml|
100
+ affinity_group.hosted_services << {
101
+ url: xml_content(hosted_service_xml, 'Url'),
102
+ service_name: xml_content(hosted_service_xml, 'ServiceName')
103
+ }
104
+ end
105
+ affinity_group.storage_services = []
106
+ storage_services_xml.each do |storage_service_xml|
107
+ affinity_group.storage_services << {
108
+ url: xml_content(storage_service_xml, 'Url'),
109
+ service_name: xml_content(storage_service_xml, 'ServiceName')
110
+ }
111
+ end
112
+ affinity_group.capability = capability_xml.map { |x| x.content }
113
+ end
114
+ end
115
+
116
+ def self.resource_to_xml(label, options = {})
117
+ builder = Nokogiri::XML::Builder.new do |xml|
118
+ xml.UpdateAffinityGroup(
119
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
120
+ ) do
121
+ xml.Label Base64.encode64(label).strip
122
+ xml.Description options[:description] if options[:description]
123
+ end
124
+ end
125
+ builder.doc.to_xml
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,45 @@
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
+ # Represents an HTTP request that can perform synchronous queries to
16
+ # an HTTP server, returning a HttpResponse
17
+ module Azure
18
+ module BaseManagement
19
+ # This class is used for communicating with the Management certificate authentication API endpoint
20
+ class SqlManagementHttpRequest < ManagementHttpRequest
21
+ attr_accessor :uri
22
+ # Public: Creates the ManagementHttpRequest
23
+ #
24
+ # method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
25
+ # path - URI. The URI of the HTTP endpoint to query
26
+ # body - IO or String. The request body (optional)
27
+ def initialize(method, path, body = nil)
28
+ if sql_endpoint?
29
+ super(method, path, body)
30
+ @headers['x-ms-version'] = '1.0'
31
+ @uri = URI.parse(Azure.config.sql_database_management_endpoint + Azure.config.subscription_id + path)
32
+ else
33
+ path = "/services/sqlservers#{path}"
34
+ super(method, path, body)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def sql_endpoint?
41
+ Azure.config.sql_database_authentication_mode == :sql_server
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,32 @@
1
+ #-------------------------------------------------------------------------
2
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
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
+
16
+ module Azure
17
+ module Blob
18
+ class Blob
19
+
20
+ def initialize
21
+ @properties = {}
22
+ @metadata = {}
23
+ yield self if block_given?
24
+ end
25
+
26
+ attr_accessor :name
27
+ attr_accessor :snapshot
28
+ attr_accessor :properties
29
+ attr_accessor :metadata
30
+ end
31
+ end
32
+ end