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,27 +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
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
@@ -1,149 +1,172 @@
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
-
25
- attr_accessor :uri,:warn,:key,:cert
26
-
27
- # Public: Creates the ManagementHttpRequest
28
- #
29
- # method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
30
- # path - URI. The URI of the HTTP endpoint to query
31
- # body - IO or String. The request body (optional)
32
- # key - String. The request key
33
- # cert - String. The request certificate
34
- def initialize(method, path, body=nil)
35
- super
36
- @warn = false
37
- content_length = body ? body.bytesize.to_s : "0"
38
- @headers = {
39
- "x-ms-version" => "2013-06-01",
40
- "Content-Type"=> 'application/xml',
41
- "Content-Length" => content_length
42
- }
43
- @uri = URI.parse(Azure.config.management_endpoint + Azure.config.subscription_id + path)
44
- @key = Azure.config.http_private_key
45
- @cert = Azure.config.http_certificate_key
46
- end
47
-
48
- # Public: Sends a request to HTTP server and returns a HttpResponse
49
- #
50
- # Returns a Nokogiri::XML instance of HttpResponse body
51
- def call
52
- request = http_request_class.new(uri.request_uri, headers)
53
- request.body = body if body
54
-
55
- http = nil
56
- if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
57
- if ENV['HTTP_PROXY']
58
- proxy_uri = URI::parse(ENV['HTTP_PROXY'])
59
- else
60
- proxy_uri = URI::parse(ENV['HTTPS_PROXY'])
61
- end
62
-
63
- http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
64
- else
65
- http = Net::HTTP.new(uri.host, uri.port)
66
- end
67
-
68
- if uri.scheme.downcase == 'https'
69
- http.use_ssl = true
70
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
71
- http.cert = cert
72
- http.key = key
73
- end
74
- #http.set_debug_output($stdout)
75
- response = HttpResponse.new(http.request(request))
76
- response.uri = uri
77
-
78
- wait_for_completion(response)
79
- Nokogiri::XML response.body
80
- end
81
-
82
- # Public: Wait for HTTP request completion.
83
- #
84
- # ==== Attributes
85
- #
86
- # * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
87
- #
88
- # Print Error or Success of HttpRequest
89
- def wait_for_completion(response)
90
- ret_val = Nokogiri::XML response.body
91
- if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
92
- Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
93
- end
94
- if (response.status_code.to_i == 200 or response.status_code.to_i == 201)
95
- ret_val
96
- elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
97
- ret_val = check_completion(response.headers['x-ms-request-id'])
98
- elsif warn && !response.success?
99
- #Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
100
- elsif response.body
101
- if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
102
- Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
103
- else
104
- Loggerx.exception_message "http error: #{response.status_code}"
105
- end
106
- else
107
- Loggerx.exception_message "http error: #{response.status_code}"
108
- end
109
- ret_val
110
- end
111
-
112
- # Public: Gets the status of the specified operation and determines whether
113
- # the operation has succeeded, failed, or is still in progress.
114
- #
115
- # ==== Attributes
116
- #
117
- # * +request_id+ - String. x-ms-request-id response header of request
118
- #
119
- # See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
120
- #
121
- # Print Error or Success of Operation.
122
- def check_completion(request_id)
123
- request_path= "/operations/#{request_id}"
124
- done = false
125
- while not done
126
- print '# '
127
- request= ManagementHttpRequest.new(:get, request_path)
128
- response = request.call
129
- status = xml_content(response, 'Operation Status')
130
- status_code = xml_content(response, 'Operation HttpStatusCode')
131
- done = status != 'InProgress'
132
- if done
133
- if status.downcase != "succeeded"
134
- error_code = xml_content(response, 'Operation Error Code')
135
- error_msg = xml_content(response, 'Operation Error Message')
136
- Loggerx.exception_message "#{error_code}: #{error_msg}"
137
- else
138
- Loggerx.success " #{status.downcase} (#{status_code})"
139
- end
140
- puts ''
141
- else
142
- sleep(1)
143
- end
144
- end
145
- response
146
- end
147
- end
148
- 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/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' => '2013-06-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
+ # Returns a Nokogiri::XML instance of HttpResponse body
50
+ def call
51
+ request = http_request_class.new(uri.request_uri, headers)
52
+ request.body = body if body
53
+ http = http_setup
54
+ # http.set_debug_output($stdout)
55
+ response = wait_for_completion(HttpResponse.new(http.request(request)))
56
+ Nokogiri::XML response.body unless response.nil?
57
+ end
58
+
59
+ # Public: Wait for HTTP request completion.
60
+ #
61
+ # ==== Attributes
62
+ #
63
+ # * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
64
+ #
65
+ # Print Error or Success of HttpRequest
66
+ def wait_for_completion(response)
67
+ ret_val = Nokogiri::XML response.body
68
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
69
+ Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
70
+ end
71
+ if response.status_code.to_i == 200 || response.status_code.to_i == 201
72
+ return response
73
+ elsif redirected? response
74
+ rebuild_request response
75
+ elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
76
+ check_completion(response.headers['x-ms-request-id'])
77
+ elsif warn && !response.success?
78
+ # Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
79
+ elsif response.body
80
+ if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
81
+ Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
82
+ else
83
+ Loggerx.exception_message "http error: #{response.status_code}"
84
+ end
85
+ else
86
+ Loggerx.exception_message "http error: #{response.status_code}"
87
+ end
88
+ end
89
+
90
+ # Public: Gets the status of the specified operation and determines whether
91
+ # the operation has succeeded, failed, or is still in progress.
92
+ #
93
+ # ==== Attributes
94
+ #
95
+ # * +request_id+ - String. x-ms-request-id response header of request
96
+ #
97
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
98
+ #
99
+ # Print Error or Success of Operation.
100
+ def check_completion(request_id)
101
+ request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}"
102
+ http = http_setup
103
+ headers['Content-Length'] = '0'
104
+ @method = :get
105
+ done = false
106
+ while not done
107
+ print '# '
108
+ request = http_request_class.new(request_path, headers)
109
+ response = HttpResponse.new(http.request(request))
110
+ ret_val = Nokogiri::XML response.body
111
+ status = xml_content(ret_val, 'Operation Status')
112
+ status_code = response.status_code.to_i
113
+ if status != 'InProgress'
114
+ done = true
115
+ end
116
+ if redirected? response
117
+ host_uri = URI.parse(response.headers['location'])
118
+ http = http_setup(host_uri)
119
+ done = false
120
+ end
121
+ if done
122
+ if status.downcase != 'succeeded'
123
+ error_code = xml_content(ret_val, 'Operation Error Code')
124
+ error_msg = xml_content(ret_val, 'Operation Error Message')
125
+ Loggerx.exception_message "#{error_code}: #{error_msg}"
126
+ else
127
+ Loggerx.success "#{status.downcase} (#{status_code})"
128
+ end
129
+ return
130
+ else
131
+ sleep(5)
132
+ end
133
+ end
134
+ end
135
+
136
+ def rebuild_request(response)
137
+ host_uri = URI.parse(response.headers['location'])
138
+ request = http_request_class.new(host_uri.request_uri, headers)
139
+ request.body = body if body
140
+ http = http_setup(host_uri)
141
+ wait_for_completion(HttpResponse.new(http.request(request)))
142
+ end
143
+
144
+ def redirected?(response)
145
+ (response.status_code.to_i == 307)
146
+ end
147
+
148
+ def http_setup(host_uri = nil)
149
+ @uri = host_uri if host_uri
150
+ http = nil
151
+ if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
152
+ if ENV['HTTP_PROXY']
153
+ proxy_uri = URI.parse(ENV['HTTP_PROXY'])
154
+ else
155
+ proxy_uri = URI.parse(ENV['HTTPS_PROXY'])
156
+ end
157
+ http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
158
+ else
159
+ http = Net::HTTP.new(uri.host, uri.port)
160
+ end
161
+
162
+ if uri.scheme.downcase == 'https'
163
+ http.use_ssl = true
164
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
165
+ http.cert = cert
166
+ http.key = key
167
+ end
168
+ http
169
+ end
170
+ end
171
+ end
149
172
  end
@@ -1,129 +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
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