juliusl-azure-sdk-for-ruby 0.7.0

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 (300) hide show
  1. checksums.yaml +7 -0
  2. data/.env_sample +11 -0
  3. data/.gitignore +15 -0
  4. data/.travis.yml +13 -0
  5. data/ChangeLog.txt +56 -0
  6. data/Gemfile +16 -0
  7. data/LICENSE.txt +202 -0
  8. data/README.md +630 -0
  9. data/Rakefile +121 -0
  10. data/azure.gemspec +47 -0
  11. data/bin/pfxer +35 -0
  12. data/lib/azure.rb +60 -0
  13. data/lib/azure/base_management/affinity_group.rb +32 -0
  14. data/lib/azure/base_management/base_management_service.rb +245 -0
  15. data/lib/azure/base_management/location.rb +27 -0
  16. data/lib/azure/base_management/management_http_request.rb +175 -0
  17. data/lib/azure/base_management/serialization.rb +135 -0
  18. data/lib/azure/base_management/sql_management_http_request.rb +45 -0
  19. data/lib/azure/blob/auth/shared_access_signature.rb +141 -0
  20. data/lib/azure/blob/blob.rb +32 -0
  21. data/lib/azure/blob/blob_service.rb +1427 -0
  22. data/lib/azure/blob/block.rb +31 -0
  23. data/lib/azure/blob/container.rb +32 -0
  24. data/lib/azure/blob/serialization.rb +285 -0
  25. data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
  26. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +137 -0
  27. data/lib/azure/cloud_service_management/serialization.rb +118 -0
  28. data/lib/azure/core.rb +41 -0
  29. data/lib/azure/core/auth/authorizer.rb +36 -0
  30. data/lib/azure/core/auth/shared_key.rb +110 -0
  31. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  32. data/lib/azure/core/auth/signer.rb +52 -0
  33. data/lib/azure/core/configuration.rb +218 -0
  34. data/lib/azure/core/error.rb +22 -0
  35. data/lib/azure/core/filtered_service.rb +44 -0
  36. data/lib/azure/core/http/debug_filter.rb +36 -0
  37. data/lib/azure/core/http/http_error.rb +88 -0
  38. data/lib/azure/core/http/http_filter.rb +53 -0
  39. data/lib/azure/core/http/http_request.rb +160 -0
  40. data/lib/azure/core/http/http_response.rb +140 -0
  41. data/lib/azure/core/http/retry_policy.rb +74 -0
  42. data/lib/azure/core/http/signer_filter.rb +34 -0
  43. data/lib/azure/core/service.rb +63 -0
  44. data/lib/azure/core/signed_service.rb +43 -0
  45. data/lib/azure/core/utility.rb +242 -0
  46. data/lib/azure/queue/message.rb +30 -0
  47. data/lib/azure/queue/queue.rb +29 -0
  48. data/lib/azure/queue/queue_service.rb +568 -0
  49. data/lib/azure/queue/serialization.rb +106 -0
  50. data/lib/azure/service/access_policy.rb +26 -0
  51. data/lib/azure/service/cors.rb +11 -0
  52. data/lib/azure/service/cors_rule.rb +15 -0
  53. data/lib/azure/service/enumeration_results.rb +21 -0
  54. data/lib/azure/service/logging.rb +32 -0
  55. data/lib/azure/service/metrics.rb +31 -0
  56. data/lib/azure/service/retention_policy.rb +25 -0
  57. data/lib/azure/service/serialization.rb +299 -0
  58. data/lib/azure/service/signed_identifier.rb +30 -0
  59. data/lib/azure/service/storage_service.rb +83 -0
  60. data/lib/azure/service/storage_service_properties.rb +37 -0
  61. data/lib/azure/service_bus/action.rb +21 -0
  62. data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
  63. data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
  64. data/lib/azure/service_bus/brokered_message.rb +124 -0
  65. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
  66. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  67. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  68. data/lib/azure/service_bus/false_filter.rb +38 -0
  69. data/lib/azure/service_bus/filter.rb +21 -0
  70. data/lib/azure/service_bus/interval.rb +104 -0
  71. data/lib/azure/service_bus/queue.rb +230 -0
  72. data/lib/azure/service_bus/relay.rb +88 -0
  73. data/lib/azure/service_bus/resource.rb +109 -0
  74. data/lib/azure/service_bus/rule.rb +98 -0
  75. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  76. data/lib/azure/service_bus/serialization.rb +161 -0
  77. data/lib/azure/service_bus/service_bus_service.rb +895 -0
  78. data/lib/azure/service_bus/sql_filter.rb +50 -0
  79. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  80. data/lib/azure/service_bus/subscription.rb +184 -0
  81. data/lib/azure/service_bus/topic.rb +187 -0
  82. data/lib/azure/service_bus/true_filter.rb +38 -0
  83. data/lib/azure/sql_database_management/serialization.rb +112 -0
  84. data/lib/azure/sql_database_management/sql_database.rb +31 -0
  85. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
  86. data/lib/azure/storage_management/serialization.rb +204 -0
  87. data/lib/azure/storage_management/storage_account.rb +48 -0
  88. data/lib/azure/storage_management/storage_management_service.rb +208 -0
  89. data/lib/azure/table/auth/shared_key.rb +92 -0
  90. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  91. data/lib/azure/table/batch.rb +330 -0
  92. data/lib/azure/table/batch_response.rb +118 -0
  93. data/lib/azure/table/edmtype.rb +127 -0
  94. data/lib/azure/table/entity.rb +31 -0
  95. data/lib/azure/table/guid.rb +24 -0
  96. data/lib/azure/table/query.rb +112 -0
  97. data/lib/azure/table/serialization.rb +108 -0
  98. data/lib/azure/table/table_service.rb +560 -0
  99. data/lib/azure/version.rb +31 -0
  100. data/lib/azure/virtual_machine_image_management/serialization.rb +70 -0
  101. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
  102. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
  103. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +89 -0
  104. data/lib/azure/virtual_machine_management/serialization.rb +459 -0
  105. data/lib/azure/virtual_machine_management/virtual_machine.rb +44 -0
  106. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +554 -0
  107. data/lib/azure/virtual_network_management/serialization.rb +193 -0
  108. data/lib/azure/virtual_network_management/virtual_network.rb +37 -0
  109. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
  110. data/test/fixtures/32px-fulls-black.jpg +0 -0
  111. data/test/fixtures/affinity_group.xml +33 -0
  112. data/test/fixtures/all_containers.xml +20 -0
  113. data/test/fixtures/all_tables.xml +22 -0
  114. data/test/fixtures/container_acl.xml +11 -0
  115. data/test/fixtures/create_sql_database_server.xml +2 -0
  116. data/test/fixtures/create_storage_desc_error.xml +5 -0
  117. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  118. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  119. data/test/fixtures/create_storage_full_error.xml +6 -0
  120. data/test/fixtures/create_storage_label_error.xml +5 -0
  121. data/test/fixtures/create_storage_location_error.xml +5 -0
  122. data/test/fixtures/create_storage_name_error.xml +6 -0
  123. data/test/fixtures/create_table_response_entry.xml +15 -0
  124. data/test/fixtures/delete_storage_container_error.xml +5 -0
  125. data/test/fixtures/delete_storage_error.xml +5 -0
  126. data/test/fixtures/deployment_error.xml +5 -0
  127. data/test/fixtures/empty_xml_file +0 -0
  128. data/test/fixtures/get_storage_account_error.xml +5 -0
  129. data/test/fixtures/get_storage_account_properties.xml +34 -0
  130. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  131. data/test/fixtures/http_error.xml +5 -0
  132. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  133. data/test/fixtures/list_affinity_groups.xml +22 -0
  134. data/test/fixtures/list_blobs.xml +121 -0
  135. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  136. data/test/fixtures/list_blocks_all.xml +23 -0
  137. data/test/fixtures/list_blocks_committed.xml +13 -0
  138. data/test/fixtures/list_cloud_services.xml +39 -0
  139. data/test/fixtures/list_containers.xml +38 -0
  140. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  141. data/test/fixtures/list_locations.xml +212 -0
  142. data/test/fixtures/list_os_images.xml +110 -0
  143. data/test/fixtures/list_page_ranges.xml +11 -0
  144. data/test/fixtures/list_sql_database.xml +36 -0
  145. data/test/fixtures/list_sql_server_firewall.xml +23 -0
  146. data/test/fixtures/list_storage_account_single.xml +25 -0
  147. data/test/fixtures/list_storage_accounts.xml +48 -0
  148. data/test/fixtures/list_virtual_networks.xml +92 -0
  149. data/test/fixtures/list_vm_images.xml +21 -0
  150. data/test/fixtures/logging.xml +11 -0
  151. data/test/fixtures/messages.xml +12 -0
  152. data/test/fixtures/metrics.xml +10 -0
  153. data/test/fixtures/privatekey.key +28 -0
  154. data/test/fixtures/query_entities_empty_response.xml +7 -0
  155. data/test/fixtures/query_entities_response.xml +45 -0
  156. data/test/fixtures/queue_service_properties.xml +22 -0
  157. data/test/fixtures/queue_service_properties_original.xml +19 -0
  158. data/test/fixtures/queues.xml +16 -0
  159. data/test/fixtures/retention_policy.xml +5 -0
  160. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  161. data/test/fixtures/sb_default_create_relay_response.xml +15 -0
  162. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  163. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  164. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  165. data/test/fixtures/storage_service_keys.xml +8 -0
  166. data/test/fixtures/storage_service_properties.xml +55 -0
  167. data/test/fixtures/update_storage_account.xml +16 -0
  168. data/test/fixtures/update_storage_error.xml +5 -0
  169. data/test/fixtures/updated_storage_accounts.xml +55 -0
  170. data/test/fixtures/virtual_machine.xml +116 -0
  171. data/test/fixtures/windows_virtual_machine.xml +106 -0
  172. data/test/integration/affinity_group/Affinity_test.rb +55 -0
  173. data/test/integration/affinity_group/Create_Affinity_test.rb +64 -0
  174. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
  175. data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
  176. data/test/integration/affinity_group/Update_Affinity_test.rb +83 -0
  177. data/test/integration/blob/blob_gb18030_test.rb +199 -0
  178. data/test/integration/blob/blob_metadata_test.rb +75 -0
  179. data/test/integration/blob/blob_pages_test.rb +119 -0
  180. data/test/integration/blob/blob_properties_test.rb +77 -0
  181. data/test/integration/blob/block_blob_test.rb +254 -0
  182. data/test/integration/blob/container/container_acl_test.rb +69 -0
  183. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  184. data/test/integration/blob/container/create_container_test.rb +60 -0
  185. data/test/integration/blob/container/delete_container_test.rb +39 -0
  186. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  187. data/test/integration/blob/container/list_containers_test.rb +79 -0
  188. data/test/integration/blob/container/root_container_test.rb +54 -0
  189. data/test/integration/blob/copy_blob_test.rb +113 -0
  190. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  191. data/test/integration/blob/create_page_blob_test.rb +83 -0
  192. data/test/integration/blob/delete_blob_test.rb +159 -0
  193. data/test/integration/blob/get_blob_test.rb +65 -0
  194. data/test/integration/blob/informative_errors_test.rb +39 -0
  195. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  196. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  197. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  198. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  199. data/test/integration/blob/list_blobs_test.rb +113 -0
  200. data/test/integration/cloud_service/Cloud_Create_test.rb +45 -0
  201. data/test/integration/cloud_service/Cloud_Delete_test.rb +45 -0
  202. data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
  203. data/test/integration/database/create_sql_server_test.rb +53 -0
  204. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
  205. data/test/integration/database/delete_sql_server_test.rb +58 -0
  206. data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
  207. data/test/integration/database/list_sql_servers_test.rb +44 -0
  208. data/test/integration/database/reset_password_sql_server_test.rb +55 -0
  209. data/test/integration/location/Location_List_test.rb +39 -0
  210. data/test/integration/location/RoleSize_List_test.rb +35 -0
  211. data/test/integration/queue/clear_messages_test.rb +42 -0
  212. data/test/integration/queue/create_message_test.rb +75 -0
  213. data/test/integration/queue/create_queue_test.rb +50 -0
  214. data/test/integration/queue/delete_message_test.rb +67 -0
  215. data/test/integration/queue/delete_queue_test.rb +45 -0
  216. data/test/integration/queue/informative_errors_test.rb +42 -0
  217. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  218. data/test/integration/queue/list_messages_test.rb +79 -0
  219. data/test/integration/queue/list_queues_test.rb +44 -0
  220. data/test/integration/queue/peek_messages_test.rb +59 -0
  221. data/test/integration/queue/queue_gb18030_test.rb +131 -0
  222. data/test/integration/queue/queue_metadata_test.rb +40 -0
  223. data/test/integration/queue/update_message_test.rb +74 -0
  224. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  225. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  226. data/test/integration/service_bus/queues_test.rb +266 -0
  227. data/test/integration/service_bus/relay_test.rb +132 -0
  228. data/test/integration/service_bus/rules_test.rb +145 -0
  229. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
  230. data/test/integration/service_bus/scenario_test.rb +101 -0
  231. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  232. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  233. data/test/integration/service_bus/topics_test.rb +129 -0
  234. data/test/integration/storage_management/storage_management_test.rb +185 -0
  235. data/test/integration/table/create_table_test.rb +36 -0
  236. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  237. data/test/integration/table/delete_entity_test.rb +94 -0
  238. data/test/integration/table/delete_table_test.rb +40 -0
  239. data/test/integration/table/get_table_test.rb +37 -0
  240. data/test/integration/table/informative_errors_test.rb +39 -0
  241. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  242. data/test/integration/table/insert_entity_test.rb +88 -0
  243. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  244. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  245. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  246. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  247. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  248. data/test/integration/table/merge_entity_test.rb +113 -0
  249. data/test/integration/table/query_entities_test.rb +195 -0
  250. data/test/integration/table/query_tables_test.rb +43 -0
  251. data/test/integration/table/query_test.rb +251 -0
  252. data/test/integration/table/table_acl_test.rb +52 -0
  253. data/test/integration/table/table_gb18030_test.rb +355 -0
  254. data/test/integration/table/update_entity_batch_test.rb +149 -0
  255. data/test/integration/table/update_entity_test.rb +131 -0
  256. data/test/integration/test_helper.rb +38 -0
  257. data/test/integration/vm/VM_Create_test.rb +262 -0
  258. data/test/integration/vm/VM_Delete_test.rb +53 -0
  259. data/test/integration/vm/VM_Operations_test.rb +172 -0
  260. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
  261. data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
  262. data/test/integration/vnet/Virtual_Network_Create_test.rb +116 -0
  263. data/test/integration/vnet/Virtual_Network_list_test.rb +48 -0
  264. data/test/support/env.rb +19 -0
  265. data/test/support/fixtures.rb +36 -0
  266. data/test/support/name_generator.rb +168 -0
  267. data/test/support/stubs.rb +42 -0
  268. data/test/support/virtual_machine_name_generator.rb +102 -0
  269. data/test/support/virtual_network_helper.rb +73 -0
  270. data/test/test_helper.rb +44 -0
  271. data/test/unit/affinity_group/affinity_group_test.rb +189 -0
  272. data/test/unit/affinity_group/serialization_test.rb +87 -0
  273. data/test/unit/base_management/location_test.rb +56 -0
  274. data/test/unit/base_management/role_size_test.rb +50 -0
  275. data/test/unit/blob/auth/shared_access_signature_test.rb +71 -0
  276. data/test/unit/blob/blob_service_test.rb +1969 -0
  277. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -0
  278. data/test/unit/cloud_service_management/serialization_test.rb +169 -0
  279. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  280. data/test/unit/core/auth/shared_key_test.rb +58 -0
  281. data/test/unit/core/auth/signer_test.rb +30 -0
  282. data/test/unit/core/http/http_error_test.rb +62 -0
  283. data/test/unit/core/http/http_request_test.rb +113 -0
  284. data/test/unit/core/http/http_response_test.rb +45 -0
  285. data/test/unit/core/http/retry_policy_test.rb +23 -0
  286. data/test/unit/core/utility_test.rb +122 -0
  287. data/test/unit/database/serialization_test.rb +97 -0
  288. data/test/unit/database/sql_database_server_service_test.rb +284 -0
  289. data/test/unit/service/serialization_test.rb +533 -0
  290. data/test/unit/service/storage_service_test.rb +293 -0
  291. data/test/unit/storage_management/serialization_test.rb +244 -0
  292. data/test/unit/storage_management/storage_management_service_test.rb +247 -0
  293. data/test/unit/table/edmtype_test.rb +108 -0
  294. data/test/unit/virtual_machine_image_management/serialization_test.rb +50 -0
  295. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +114 -0
  296. data/test/unit/virtual_machine_management/serialization_test.rb +316 -0
  297. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +478 -0
  298. data/test/unit/vnet/serialization_test.rb +187 -0
  299. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
  300. metadata +512 -0
@@ -0,0 +1,118 @@
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/cloud_service_management/cloud_service'
17
+ require 'azure/virtual_machine_management/serialization'
18
+
19
+ module Azure
20
+ module CloudServiceManagement
21
+ module Serialization
22
+ extend Azure::Core::Utility
23
+ def self.cloud_services_to_xml(name, options = {})
24
+ options[:label] = options[:label] || name
25
+
26
+ builder = Nokogiri::XML::Builder.new do |xml|
27
+ xml.CreateHostedService(
28
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
29
+ ) do
30
+ xml.ServiceName(name)
31
+ xml.Label(Base64.encode64(options[:label]))
32
+ xml.Description(options[:description]) unless\
33
+ options[:description].nil? || options[:description].empty?
34
+
35
+ unless options[:affinity_group_name].nil?
36
+ xml.AffinityGroup(options[:affinity_group_name])
37
+ else
38
+ xml.Location(options[:location])
39
+ end
40
+
41
+ xml.ExtendedProperties do
42
+ options[:extended_properties].each do |prop_name, prop_value|
43
+ xml.ExtendedProperty do
44
+ xml.Name(prop_name)
45
+ xml.Value(prop_value)
46
+ end unless (prop_name.nil? || prop_name.empty?)\
47
+ || (prop_value.nil? || prop_value.empty?)
48
+ end
49
+ end unless options[:extended_properties].nil?\
50
+ || options[:extended_properties].empty?
51
+ end
52
+ end
53
+ builder.doc.to_xml
54
+ end
55
+
56
+ def self.cloud_services_from_xml(cloud_xml)
57
+ clouds = []
58
+ cloud_services_xml = cloud_xml.css('HostedServices HostedService')
59
+ cloud_services_xml = cloud_xml.css('HostedService') if \
60
+ cloud_services_xml.length == 0
61
+ cloud_services_xml.each do |cloud_service_xml|
62
+ cloud = CloudService.new
63
+ cloud.url = xml_content(cloud_service_xml, 'Url')
64
+ cloud.name = xml_content(cloud_service_xml, 'ServiceName')
65
+
66
+ props_xml = cloud_service_xml.css('HostedServiceProperties')
67
+
68
+ cloud.label = Base64.decode64(xml_content(props_xml, 'Label'))
69
+ cloud.description = xml_content(props_xml, 'Description')
70
+ location = xml_content(props_xml, 'Location')
71
+ cloud.location = location unless location.empty?
72
+ affinity_group = xml_content(props_xml, 'AffinityGroup')
73
+ cloud.affinity_group = affinity_group unless affinity_group
74
+ cloud.status = xml_content(props_xml, 'Status')
75
+ cloud.date_created = xml_content(props_xml, 'DateCreated')
76
+ cloud.date_modified = xml_content(props_xml, 'DateLastModified')
77
+
78
+ cloud.extended_properties = {}
79
+ props_xml.css('ExtendedProperties ExtendedProperty').map do |prop|
80
+ p_name = xml_content(prop, 'Name')
81
+ p_value = xml_content(prop, 'Value')
82
+ cloud.extended_properties[p_name] = p_value
83
+ end
84
+
85
+ cloud.default_winrm_certificate_thumbprint = xml_content(
86
+ cloud_service_xml, 'DefaultWinRMCertificateThumbprint'
87
+ )
88
+ deployment_xml = cloud_services_xml.css('Deployments Deployment')
89
+ cloud.deployment_name = xml_content(deployment_xml, 'Name')
90
+ vms_in_deployment = {}
91
+
92
+ cloud_service_xml.css('Deployments').each do |deployxml|
93
+ deployment_name = xml_content(deployxml, 'Deployment Name')
94
+ vms = Azure::VirtualMachineManagement::Serialization.virtual_machines_from_xml(
95
+ deployxml, cloud.name
96
+ )
97
+ vms_in_deployment[deployment_name.to_sym] = vms if vms
98
+ end
99
+
100
+ cloud.virtual_machines = vms_in_deployment
101
+ clouds << cloud
102
+ end
103
+ clouds.compact
104
+ end
105
+
106
+ def self.add_certificate_to_xml(data)
107
+ builder = Nokogiri::XML::Builder.new do |xml|
108
+ xml.CertificateFile('xmlns' => 'http://schemas.microsoft.com/windowsazure') do
109
+ xml.Data data
110
+ xml.CertificateFormat 'pfx'
111
+ xml.Password nil
112
+ end
113
+ end
114
+ builder.doc.to_xml
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,41 @@
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::Core; end
17
+
18
+ require 'azure/core/error'
19
+ require 'azure/core/configuration'
20
+
21
+ # load default configuration from environment variables
22
+ # (user can always override this later)
23
+ Azure.configure do |config|
24
+ config.storage_access_key = ENV['AZURE_STORAGE_ACCESS_KEY']
25
+ config.storage_account_name = ENV['AZURE_STORAGE_ACCOUNT']
26
+ config.storage_table_host = ENV['AZURE_STORAGE_TABLE_HOST']
27
+ config.storage_blob_host = ENV['AZURE_STORAGE_BLOB_HOST']
28
+ config.storage_queue_host = ENV['AZURE_STORAGE_QUEUE_HOST']
29
+
30
+ config.sb_namespace = ENV['AZURE_SERVICEBUS_NAMESPACE']
31
+ config.sb_access_key = ENV['AZURE_SERVICEBUS_ACCESS_KEY']
32
+ config.sb_issuer = ENV['AZURE_SERVICEBUS_ISSUER']
33
+
34
+ config.management_certificate = ENV['AZURE_MANAGEMENT_CERTIFICATE']
35
+ config.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']
36
+ config.management_endpoint = ENV['AZURE_MANAGEMENT_ENDPOINT']
37
+ config.sql_database_management_endpoint = ENV['AZURE_SQL_DATABASE_MANAGEMENT_ENDPOINT']
38
+ config.sql_database_authentication_mode = ENV['AZURE_SQL_DATABASE_AUTHENTICATION_MODE']
39
+
40
+ config.ca_file = ENV['SSL_CERT_FILE']
41
+ end
@@ -0,0 +1,36 @@
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
+ require "azure/core/configuration"
16
+
17
+ module Azure
18
+ module Core
19
+ module Auth
20
+ class Authorizer
21
+ # Public: Signs an HTTP request before it's made, by adding the
22
+ # Authorization header
23
+ #
24
+ # request - An Azure::Core::HttpRequest that hasn't been signed
25
+ # signer - A signing strategy, such as Azure::Table::Auth::SharedKey
26
+ #
27
+ # Returns the modified request
28
+ def sign(request, signer)
29
+ signature = signer.sign(request.method, request.uri, request.headers)
30
+ request.headers["Authorization"] = "#{signer.name} #{signature}"
31
+ request
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,110 @@
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
+ require "cgi"
16
+ require "azure/core/configuration"
17
+ require "azure/core/auth/signer"
18
+
19
+ module Azure
20
+ module Core
21
+ module Auth
22
+ class SharedKey < Signer
23
+ # The Azure account's name.
24
+ attr :account_name
25
+
26
+ # Public: Initialize the Signer.
27
+ #
28
+ # account_name - The account name. Defaults to the one in the
29
+ # global configuration.
30
+ # access_key - The access_key encoded in Base64. Defaults to the
31
+ # one in the global configuration.
32
+ def initialize(account_name=Azure.config.storage_account_name, access_key=Azure.config.storage_access_key)
33
+ @account_name = account_name
34
+ super(access_key)
35
+ end
36
+
37
+ # Public: The name of the strategy.
38
+ #
39
+ # Returns a String.
40
+ def name
41
+ "SharedKey"
42
+ end
43
+
44
+ # Public: Generate a request signature.
45
+ #
46
+ # verb - The HTTP request method.
47
+ # uri - The URI of the request we're signing.
48
+ # headers - A Hash of HTTP request headers.
49
+ #
50
+ # Returns a Base64 String signed with HMAC.
51
+ def sign(method, uri, headers)
52
+ signature = super(signable_string(method, uri, headers))
53
+ return "#{account_name}:#{signature}"
54
+ end
55
+
56
+ # Generate the string to sign.
57
+ #
58
+ # verb - The HTTP request method.
59
+ # uri - The URI of the request we're signing.
60
+ # headers - A Hash of HTTP request headers.
61
+ #
62
+ # Returns a plain text string.
63
+ def signable_string(method, uri, headers)
64
+ [
65
+ method.to_s.upcase,
66
+ headers.fetch("Content-Encoding", ""),
67
+ headers.fetch("Content-Language", ""),
68
+ headers.fetch("Content-Length", ""),
69
+ headers.fetch("Content-MD5", ""),
70
+ headers.fetch("Content-Type", ""),
71
+ headers.fetch("Date", ""),
72
+ headers.fetch("If-Modified-Since", ""),
73
+ headers.fetch("If-Match", ""),
74
+ headers.fetch("If-None-Match", ""),
75
+ headers.fetch("If-Unmodified-Since", ""),
76
+ headers.fetch("Range", ""),
77
+ canonicalized_headers(headers),
78
+ canonicalized_resource(uri)
79
+ ].join("\n")
80
+ end
81
+
82
+ # Calculate the Canonicalized Headers string for a request.
83
+ #
84
+ # headers - A Hash of HTTP request headers.
85
+ #
86
+ # Returns a string with the canonicalized headers.
87
+ def canonicalized_headers(headers)
88
+ headers = headers.map { |k,v| [k.to_s.downcase, v] }
89
+ headers.select! { |k,v| k =~ /^x-ms-/ }
90
+ headers.sort_by! { |(k,v)| k }
91
+ headers.map! { |k,v| "%s:%s" % [k, v] }
92
+ headers.map! { |h| h.gsub(/\s+/, " ") }.join("\n")
93
+ end
94
+
95
+ # Calculate the Canonicalized Resource string for a request.
96
+ #
97
+ # uri - The request's URI.
98
+ #
99
+ # Returns a string with the canonicalized resource.
100
+ def canonicalized_resource(uri)
101
+ resource = "/" + account_name + (uri.path.empty? ? "/" : uri.path)
102
+ params = CGI.parse(uri.query.to_s).map { |k,v| [k.downcase, v] }
103
+ params.sort_by! { |k,v| k }
104
+ params.map! { |k,v| "%s:%s" % [k, v.map(&:strip).sort.join(",")] }
105
+ [resource, *params].join("\n")
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,48 @@
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
+ require "azure/core/auth/shared_key"
16
+
17
+ module Azure
18
+ module Core
19
+ module Auth
20
+ class SharedKeyLite < SharedKey
21
+ # Public: The name of the strategy.
22
+ #
23
+ # Returns a String.
24
+ def name
25
+ "SharedKeyLite"
26
+ end
27
+
28
+ # Generate the string to sign.
29
+ #
30
+ # verb - The HTTP request method.
31
+ # uri - The URI of the request we're signing.
32
+ # headers - A Hash of HTTP request headers.
33
+ #
34
+ # Returns a plain text string.
35
+ def signable_string(method, uri, headers)
36
+ [
37
+ method.to_s.upcase,
38
+ headers.fetch("Content-MD5", ""),
39
+ headers.fetch("Content-Type", ""),
40
+ headers.fetch("Date") { raise IndexError, "Headers must include Date" },
41
+ canonicalized_headers(headers),
42
+ canonicalized_resource(uri)
43
+ ].join("\n")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,52 @@
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
+ require "openssl"
16
+ require "base64"
17
+ require "azure/core/configuration"
18
+
19
+ module Azure
20
+ module Core
21
+ module Auth
22
+ # Public: Utility class to sign strings with HMAC-256 and then encode the
23
+ # signed string using Base64.
24
+ class Signer
25
+ # The access key for the account
26
+ attr :access_key
27
+
28
+ # Public: Initialize the Signer.
29
+ #
30
+ # access_key - The access_key encoded in Base64. Defaults to the one
31
+ # in the global configuration.
32
+ def initialize(access_key=Azure.config.storage_access_key)
33
+ if access_key.nil?
34
+ raise ArgumentError, "storage access key must be provided"
35
+ end
36
+
37
+ @access_key = Base64.strict_decode64(access_key)
38
+ end
39
+
40
+ # Public: Generate an HMAC signature.
41
+ #
42
+ # body - The string to sign.
43
+ #
44
+ # Returns a Base64 String signed with HMAC.
45
+ def sign(body)
46
+ signed = OpenSSL::HMAC.digest("sha256", access_key, body)
47
+ Base64.strict_encode64(signed)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,218 @@
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
+ require "singleton"
16
+
17
+ module Azure
18
+
19
+ # Proxy config method.
20
+ def self.config
21
+ Core.config
22
+ end
23
+
24
+ # Proxy configure method.
25
+ def self.configure
26
+ yield Core.config
27
+ end
28
+
29
+ module Core
30
+
31
+ # Public: Sugar to configure the services in a neatly wrapped DSL.
32
+ #
33
+ # Yields the Azure::Configuration instance.
34
+ #
35
+ # Example:
36
+ #
37
+ # Azure.configure do |config|
38
+ # config.storage_account_name = ENV["AZURE_STORAGE_ACCOUNT"]
39
+ # end
40
+ #
41
+ # Returns nothing.
42
+ def self.configure
43
+ yield config
44
+ end
45
+
46
+ # Public: Access the service configuration.
47
+ #
48
+ # Returns the Azure::Configuration instance.
49
+ def self.config
50
+ Configuration.instance
51
+ end
52
+
53
+ # Singleton that keeps the configuration of the system.
54
+ class Configuration
55
+ include Singleton
56
+
57
+ # Public: Get/Set the Access Key for this service.
58
+ attr_accessor :storage_access_key
59
+
60
+ # Public: Get/Set the Account Name for this service.
61
+ attr_accessor :storage_account_name
62
+
63
+ # Public: Get/Set the Service Bus Access Key (Issuer Secret) for this service.
64
+ attr_accessor :sb_access_key
65
+
66
+ # Public: Set the Service Bus Issuer for this service.
67
+ attr_writer :sb_issuer
68
+
69
+ # Public: Get/Set path of a CA certification directory containing certifications in
70
+ # PEM format.
71
+ #
72
+ # For example:
73
+ # config.ca_file = 'ca_cert.pem'
74
+ attr_accessor :ca_file
75
+
76
+ # Public: Get the issuer for the service bus. If you set something using #sb_issuer=,
77
+ # then we use that. Otherwise, we default to the default issuer: "owner"
78
+ def sb_issuer
79
+ @sb_issuer || "owner"
80
+ end
81
+
82
+ # Public: Get/Set the Service Bus Namespace for this service.
83
+ attr_accessor :sb_namespace
84
+
85
+ # Public: Set the host for the Table service. Only set this if you want
86
+ # something custom (like, for example, to point this to a LocalStorage
87
+ # emulator). This should be the complete host, including http:// at the
88
+ # start. When using the emulator, make sure to include your account name at
89
+ # the end.
90
+ #
91
+ # Example:
92
+ #
93
+ # config.storage_table_host = "http://127.0.0.1:10002/devstoreaccount1"
94
+ attr_writer :storage_table_host
95
+
96
+ # Public: Get the host for this service. If you set something using #storage_table_host=,
97
+ # then we use that. Else we default to Azure's default hosts, based
98
+ # on your account name.
99
+ def storage_table_host
100
+ @storage_table_host || default_host(:table)
101
+ end
102
+
103
+ # Public: Set the host for the Blob service. Only set this if you want
104
+ # something custom (like, for example, to point this to a LocalStorage
105
+ # emulator). This should be the complete host, including http:// at the
106
+ # start. When using the emulator, make sure to include your account name at
107
+ # the end.
108
+ #
109
+ # Example:
110
+ #
111
+ # config.storage_blob_host = "http://127.0.0.1:10000/devstoreaccount1"
112
+ attr_writer :storage_blob_host
113
+
114
+ # Public: Get the host for this service. If you set something using #storage_blob_host=,
115
+ # then we use that. Else we default to Azure's default hosts, based
116
+ # on your account name.
117
+ def storage_blob_host
118
+ @storage_blob_host || default_host(:blob)
119
+ end
120
+
121
+ # Public: Set the host for the Queue service. Only set this if you want
122
+ # something custom (like, for example, to point this to a LocalStorage
123
+ # emulator). This should be the complete host, including http:// at the
124
+ # start. When using the emulator, make sure to include your account name at
125
+ # the end.
126
+ #
127
+ # Example:
128
+ #
129
+ # config.storage_queue_host = "http://127.0.0.1:10001/devstoreaccount1"
130
+ attr_writer :storage_queue_host
131
+
132
+ # Public: Get the host for this service. If you set something using #storage_queue_host=,
133
+ # then we use that. Else we default to Azure's default hosts, based
134
+ # on your account name.
135
+ def storage_queue_host
136
+ @storage_queue_host || default_host(:queue)
137
+ end
138
+
139
+ # Public: Get the host for the ACS service.
140
+ def acs_host
141
+ "https://#{sb_namespace}-sb.accesscontrol.windows.net"
142
+ end
143
+
144
+ # Public: Get the host for the Service Bus service.
145
+ def service_bus_host
146
+ "https://#{sb_namespace}.servicebus.windows.net"
147
+ end
148
+
149
+ # Calculate the default host for a given service in the cloud.
150
+ #
151
+ # service - One of :table, :blob, :queue, etc.
152
+ #
153
+ # Returns a String with the hostname, including your account name.
154
+ def default_host(service)
155
+ "http://#{storage_account_name}.#{service}.core.windows.net"
156
+ end
157
+
158
+ #===================================================================
159
+ #*******************Management API configuration********************
160
+ #===================================================================
161
+
162
+ # Public: Get the Subscription Id and certificate key for the management API.
163
+ attr_accessor :management_certificate
164
+
165
+ # Public: Get/Set the Subscription Id for the management API.
166
+ attr_accessor :subscription_id
167
+
168
+ # Public: Set the host for the management API.
169
+ attr_writer :management_endpoint
170
+
171
+ #Public: Set the private key for SSL/HTTPS request with PEM certificate
172
+ attr_accessor :http_private_key
173
+
174
+ #Public: Set the certificate key for SSL/HTTPS request with PEM certificate
175
+ attr_accessor :http_certificate_key
176
+
177
+ # Public: Set the host for SQL Management API (SQL Server authentication Endpoint)
178
+ attr_accessor :sql_database_management_endpoint
179
+
180
+ def management_endpoint
181
+ if @management_endpoint.nil? or @management_endpoint.empty?
182
+ "https://management.core.windows.net/"
183
+ elsif !@management_endpoint.end_with?('/')
184
+ @management_endpoint += '/'
185
+ elsif URI(@management_endpoint).scheme.nil?
186
+ "https://#{@management_endpoint}"
187
+ else
188
+ @management_endpoint
189
+ end
190
+ end
191
+
192
+ def sql_database_management_endpoint
193
+ if @sql_database_management_endpoint.nil? or @sql_database_management_endpoint.empty?
194
+ "https://management.database.windows.net:8443/"
195
+ elsif !@sql_database_management_endpoint.end_with?('/')
196
+ @sql_database_management_endpoint += '/'
197
+ elsif URI(@sql_database_management_endpoint).scheme.nil?
198
+ "https://#{@sql_database_management_endpoint}"
199
+ else
200
+ @management_endpoint
201
+ end
202
+ end
203
+
204
+ # Public: Set this to enable Management certificate authentication or SQL Server authentication
205
+ attr_accessor :sql_database_authentication_mode
206
+
207
+ def sql_database_authentication_mode
208
+ sdam = @sql_database_authentication_mode || :sql_server
209
+ if [:sql_server, :management_certificate].include? sdam.to_sym
210
+ sdam.to_sym
211
+ else
212
+ :sql_server
213
+ end
214
+ end
215
+
216
+ end
217
+ end
218
+ end