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,28 @@
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 CloudServiceManagement
18
+ class ConfigurationSet
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :configuration_set_type
24
+ attr_accessor :input_endpoints
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,64 @@
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 CloudServiceManagement
18
+ class Deployment
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :name
24
+ attr_accessor :deployment_slot
25
+ attr_accessor :private_id
26
+ attr_accessor :status
27
+ attr_accessor :label
28
+ attr_accessor :url
29
+ attr_accessor :configuration
30
+ attr_accessor :role_instances
31
+ attr_accessor :upgrade_domain_count
32
+ attr_accessor :roles
33
+ attr_accessor :sdk_version
34
+ attr_accessor :locked
35
+ attr_accessor :rollback_allowed
36
+ attr_accessor :created_time
37
+ attr_accessor :last_modified_time
38
+ attr_accessor :extended_properties
39
+ attr_accessor :persistent_vm_downtime
40
+ attr_accessor :virtual_ips
41
+
42
+ def all_vms_running?
43
+ if role_instances.nil? || role_instances.empty?
44
+ return false
45
+ else
46
+ return role_instances.all? { |vm| vm.is_running }
47
+ end
48
+ end
49
+
50
+ def is_transitioning?
51
+ return status.casecmp("runningtransitioning") == 0
52
+ end
53
+
54
+ def exists?
55
+ return !deployment_slot.nil? && !name.nil? && !deployment_slot.empty? && !name.empty?
56
+ end
57
+
58
+ private
59
+ def validate_vms
60
+ raise IndexError, "Deployment #{private_id} does not have any VM associated with it" if (role_instances.nil? || role_instances.empty?)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,29 @@
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 CloudServiceManagement
18
+ class InputEndpoint
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :port
24
+ attr_accessor :protocol
25
+ attr_accessor :vip
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
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 CloudServiceManagement
18
+ class InstanceEndpoint
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :name
24
+ attr_accessor :vip
25
+ attr_accessor :public_port
26
+ attr_accessor :local_port
27
+ attr_accessor :protocol
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
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 CloudServiceManagement
18
+ class PersistentVmDowntime
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :start_time
24
+ attr_accessor :end_time
25
+ attr_accessor :status
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,30 @@
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 CloudServiceManagement
18
+ class Role
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :role_name
24
+ attr_accessor :os_version
25
+
26
+ attr_accessor :configuration_sets
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #--------------------------------------------------------------------------
15
+
16
+ module Azure
17
+ module CloudServiceManagement
18
+ class RoleInstance
19
+ def initialize
20
+ yield self if block_given?
21
+ end
22
+
23
+ attr_accessor :role_name
24
+ attr_accessor :instance_name
25
+ attr_accessor :instance_status
26
+ attr_accessor :instance_upgrade_domain
27
+ attr_accessor :instance_fault_domain
28
+ attr_accessor :instance_size
29
+ attr_accessor :instance_state_details
30
+ attr_accessor :ip_address
31
+ attr_accessor :instance_endpoints
32
+ attr_accessor :power_state
33
+
34
+ def is_running
35
+ return !instance_status.nil? && instance_status.casecmp("readyrole") == 0
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,329 @@
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/cloud_service_management/deployment'
18
+ require 'azure/cloud_service_management/role_instance'
19
+ require 'azure/cloud_service_management/instance_endpoint'
20
+ require 'azure/cloud_service_management/input_endpoint'
21
+ require 'azure/cloud_service_management/virtual_ip'
22
+ require 'azure/cloud_service_management/role'
23
+ require 'azure/cloud_service_management/configuration_set'
24
+ require 'azure/cloud_service_management/persistent_vm_downtime'
25
+ require 'azure/virtual_machine_management/serialization'
26
+
27
+ module Azure
28
+ module CloudServiceManagement
29
+ module Serialization
30
+ def self.cloud_services_to_xml(name, options = {})
31
+ options[:label] = options[:label] || name
32
+
33
+ builder = Nokogiri::XML::Builder.new do |xml|
34
+ xml.CreateHostedService(
35
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
36
+ ) do
37
+ xml.ServiceName(name)
38
+ xml.Label(Base64.encode64(options[:label]))
39
+ xml.Description(options[:description]) unless\
40
+ options[:description].nil? || options[:description].empty?
41
+
42
+ unless options[:affinity_group_name].nil?
43
+ xml.AffinityGroup(options[:affinity_group_name])
44
+ else
45
+ xml.Location(options[:location])
46
+ end
47
+
48
+ xml.ExtendedProperties do
49
+ options[:extended_properties].each do |prop_name, prop_value|
50
+ xml.ExtendedProperty do
51
+ xml.Name(prop_name)
52
+ xml.Value(prop_value)
53
+ end unless (prop_name.nil? || prop_name.empty?)\
54
+ || (prop_value.nil? || prop_value.empty?)
55
+ end
56
+ end unless options[:extended_properties].nil?\
57
+ || options[:extended_properties].empty?
58
+ end
59
+ end
60
+ builder.doc.to_xml
61
+ end
62
+
63
+ def self.create_deployment_to_xml(name, package_url, service_configuration, options={})
64
+ options[:label] = options[:label] || name
65
+ options[:start_deployment] = options[:start_deployment].nil? ? false : options[:start_deployment]
66
+ options[:treat_warnings_as_error] = options[:treat_warnings_as_error].nil? ? false : options[:treat_warnings_as_error]
67
+
68
+ builder = Nokogiri::XML::Builder.new do |xml|
69
+ xml.CreateDeployment(
70
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
71
+ ) do
72
+ xml.Name(name)
73
+ xml.PackageUrl(package_url)
74
+ xml.Label(Base64.strict_encode64(options[:label]))
75
+ xml.Configuration(Base64.strict_encode64(service_configuration))
76
+ xml.StartDeployment(options[:start_deployment])
77
+ xml.TreatWarningsAsError(options[:treat_warnings_as_error])
78
+
79
+ xml.ExtendedProperties do
80
+ options[:extended_properties].each do |prop_name, prop_value|
81
+ xml.ExtendedProperty do
82
+ xml.Name(prop_name)
83
+ xml.Value(prop_value)
84
+ end unless (prop_name.nil? || prop_name.empty?)\
85
+ || (prop_value.nil? || prop_value.empty?)
86
+ end
87
+ end unless options[:extended_properties].nil?\
88
+ || options[:extended_properties].empty?
89
+ end
90
+ end
91
+ builder.doc.to_xml
92
+ end
93
+
94
+ def self.upgrade_deployment_to_xml(package_url, service_configuration, options={})
95
+ options[:label] = options[:label]
96
+ options[:force] = options[:force].nil? ? false : options[:force]
97
+ options[:mode] = options[:mode].nil? ? "Auto" : options[:mode]
98
+
99
+ builder = Nokogiri::XML::Builder.new do |xml|
100
+ xml.UpgradeDeployment(
101
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
102
+ ) do
103
+ xml.Mode(options[:mode])
104
+ xml.PackageUrl(package_url)
105
+ xml.Configuration(Base64.strict_encode64(service_configuration))
106
+ xml.Label(Base64.strict_encode64(options[:label]))
107
+ xml.RoleToUpgrade(options[:role_to_upgrade])
108
+ xml.Force(options[:force])
109
+
110
+ xml.ExtendedProperties do
111
+ options[:extended_properties].each do |prop_name, prop_value|
112
+ xml.ExtendedProperty do
113
+ xml.Name(prop_name)
114
+ xml.Value(prop_value)
115
+ end unless (prop_name.nil? || prop_name.empty?)\
116
+ || (prop_value.nil? || prop_value.empty?)
117
+ end
118
+ end unless options[:extended_properties].nil?\
119
+ || options[:extended_properties].empty?
120
+ end
121
+ end
122
+ builder.doc.to_xml
123
+ end
124
+
125
+ def self.swap_deployments_to_xml(production_deployment_name, staging_deployment_name)
126
+ builder = Nokogiri::XML::Builder.new do |xml|
127
+ xml.Swap(
128
+ 'xmlns' => 'http://schemas.microsoft.com/windowsazure'
129
+ ) do
130
+ xml.Production(production_deployment_name)
131
+ xml.SourceDeployment(staging_deployment_name)
132
+ end
133
+ end
134
+ builder.doc.to_xml
135
+ end
136
+
137
+ def self.deployment_from_xml(cloud_xml)
138
+ deployment = nil
139
+ unless cloud_xml.nil?
140
+ deployment_xml = cloud_xml.css('Deployment')
141
+ deployment = Deployment.new
142
+ deployment.name = xml_content(deployment_xml, 'Name')
143
+ deployment.deployment_slot = xml_content(deployment_xml, 'DeploymentSlot')
144
+ deployment.private_id = xml_content(deployment_xml, 'PrivateID')
145
+ deployment.status = xml_content(deployment_xml, 'Status')
146
+ deployment.label = xml_content(deployment_xml, 'Label')
147
+ deployment.url = xml_content(deployment_xml, 'Url')
148
+ deployment.configuration = xml_content(deployment_xml, 'Configuration')
149
+ deployment.upgrade_domain_count = xml_content(deployment_xml, 'UpgradeDomainCount')
150
+ deployment.sdk_version = xml_content(deployment_xml, 'SdkVersion')
151
+ deployment.locked = xml_content(deployment_xml, 'Locked')
152
+ deployment.rollback_allowed = xml_content(deployment_xml, 'RollbackAllowed')
153
+ deployment.created_time = xml_content(deployment_xml, 'CreatedTime')
154
+ deployment.last_modified_time = xml_content(deployment_xml, 'LastModifiedTime')
155
+ deployment.extended_properties = {}
156
+ deployment_xml.css('ExtendedProperties ExtendedProperty').map do |prop|
157
+ p_name = xml_content(prop, 'Name')
158
+ p_value = xml_content(prop, 'Value')
159
+ deployment.extended_properties[p_name] = p_value
160
+ end
161
+ deployment.role_instances = deployment_xml.css("RoleInstanceList RoleInstance").map{ |xml|
162
+ self.role_instance_from_xml(xml)
163
+ }
164
+ deployment.roles = deployment_xml.css("RoleList Role").map{ |xml|
165
+ self.role_from_xml(xml)
166
+ }
167
+ deployment.persistent_vm_downtime = self.persistent_vm_downtime_from_xml(deployment_xml.css("PersistentVMDowntime"))
168
+ deployment.virtual_ips = deployment_xml.css("VirtualIPs VirtualIP").map{ |xml|
169
+ self.virtual_ip_from_xml(xml)
170
+ }
171
+ end
172
+ return deployment
173
+ end
174
+
175
+ def self.role_instance_from_xml(role_instance_xml)
176
+ role_instance = nil
177
+ unless role_instance_xml.nil?
178
+ role_instance = RoleInstance.new
179
+ role_instance.role_name = xml_content(role_instance_xml, 'RoleName')
180
+ role_instance.instance_name = xml_content(role_instance_xml, 'InstanceName')
181
+ role_instance.instance_status = xml_content(role_instance_xml, 'InstanceStatus')
182
+ role_instance.instance_upgrade_domain = xml_content(role_instance_xml, 'InstanceUpgradeDomain')
183
+ role_instance.instance_fault_domain = xml_content(role_instance_xml, 'InstanceFaultDomain')
184
+ role_instance.instance_size = xml_content(role_instance_xml, 'InstanceSize')
185
+ role_instance.instance_state_details = xml_content(role_instance_xml, 'InstanceStateDetails')
186
+ role_instance.ip_address = xml_content(role_instance_xml, 'IpAddress')
187
+ role_instance.power_state = xml_content(role_instance_xml, 'PowerState')
188
+
189
+ role_instance.instance_endpoints = role_instance_xml.css("InstanceEndpoints InstanceEndpoint").map{ |xml|
190
+ self.instance_endpoint_from_xml(xml)
191
+ }
192
+ end
193
+ return role_instance
194
+ end
195
+
196
+ def self.instance_endpoint_from_xml(instance_endpoint_xml)
197
+ instance_endpoint = nil
198
+ unless instance_endpoint_xml.nil?
199
+ instance_endpoint = InstanceEndpoint.new
200
+ instance_endpoint.name = xml_content(instance_endpoint_xml, 'Name')
201
+ instance_endpoint.vip = xml_content(instance_endpoint_xml, 'Vip')
202
+ instance_endpoint.public_port = xml_content(instance_endpoint_xml, 'PublicPort')
203
+ instance_endpoint.local_port = xml_content(instance_endpoint_xml, 'LocalPort')
204
+ instance_endpoint.protocol = xml_content(instance_endpoint_xml, 'Protocol')
205
+ end
206
+ return instance_endpoint
207
+ end
208
+
209
+ def self.virtual_ip_from_xml(virtual_ip_xml)
210
+ virtual_ip = nil
211
+ unless virtual_ip_xml.nil?
212
+ virtual_ip = VirtualIp.new
213
+ virtual_ip.address = xml_content(virtual_ip_xml, 'Address')
214
+ virtual_ip.is_dns_programmed = xml_content(virtual_ip_xml, 'IsDnsProgrammed')
215
+ virtual_ip.name = xml_content(virtual_ip_xml, 'Name')
216
+ end
217
+ return virtual_ip
218
+ end
219
+
220
+ def self.persistent_vm_downtime_from_xml(persistent_vm_downtime_xml)
221
+ persistent_vm_downtime = nil
222
+ unless persistent_vm_downtime_xml.nil?
223
+ persistent_vm_downtime = PersistentVmDowntime.new
224
+ persistent_vm_downtime.start_time = xml_content(persistent_vm_downtime_xml, 'StartTime')
225
+ persistent_vm_downtime.end_time = xml_content(persistent_vm_downtime_xml, 'EndTime')
226
+ persistent_vm_downtime.status = xml_content(persistent_vm_downtime_xml, 'Status')
227
+ end
228
+ return persistent_vm_downtime
229
+ end
230
+
231
+ def self.role_from_xml(role_xml)
232
+ role = nil
233
+ unless role_xml.nil?
234
+ role = Role.new
235
+ role.role_name = xml_content(role_xml, 'RoleName')
236
+ role.os_version = xml_content(role_xml, 'OsVersion')
237
+ role.configuration_sets = role_xml.css("ConfigurationSets ConfigurationSet").map{ |xml|
238
+ self.configuration_set_from_xml(xml)
239
+ }
240
+ end
241
+ return role
242
+ end
243
+
244
+ def self.configuration_set_from_xml(configuration_set_xml)
245
+ configuration_set = nil
246
+ unless configuration_set_xml.nil?
247
+ configuration_set = ConfigurationSet.new
248
+ configuration_set.configuration_set_type = xml_content(configuration_set_xml, 'ConfigurationSetType')
249
+ configuration_set.input_endpoints = configuration_set_xml.css("InputEndpoints InputEndpoint").map{ |xml|
250
+ self.input_endpoint_from_xml(xml)
251
+ }
252
+ end
253
+ return configuration_set
254
+ end
255
+
256
+ def self.input_endpoint_from_xml(input_enpoint_xml)
257
+ input_endpoint = nil
258
+ unless input_enpoint_xml.nil?
259
+ input_endpoint = InputEndpoint.new
260
+ input_endpoint.port = xml_content(input_enpoint_xml, 'Port')
261
+ input_endpoint.protocol = xml_content(input_enpoint_xml, 'Protocol')
262
+ input_endpoint.vip = xml_content(input_enpoint_xml, 'Vip')
263
+ end
264
+ return input_endpoint
265
+ end
266
+
267
+ def self.cloud_services_from_xml(cloud_xml)
268
+ clouds = []
269
+ cloud_services_xml = cloud_xml.css('HostedServices HostedService')
270
+ cloud_services_xml = cloud_xml.css('HostedService') if \
271
+ cloud_services_xml.length == 0
272
+ cloud_services_xml.each do |cloud_service_xml|
273
+ cloud = CloudService.new
274
+ cloud.url = xml_content(cloud_service_xml, 'Url')
275
+ cloud.name = xml_content(cloud_service_xml, 'ServiceName')
276
+
277
+ props_xml = cloud_service_xml.css('HostedServiceProperties')
278
+
279
+ cloud.label = Base64.decode64(xml_content(props_xml, 'Label'))
280
+ cloud.description = xml_content(props_xml, 'Description')
281
+ location = xml_content(props_xml, 'Location')
282
+ cloud.location = location unless location.empty?
283
+ affinity_group = xml_content(props_xml, 'AffinityGroup')
284
+ cloud.affinity_group = affinity_group unless affinity_group
285
+ cloud.status = xml_content(props_xml, 'Status')
286
+ cloud.date_created = xml_content(props_xml, 'DateCreated')
287
+ cloud.date_modified = xml_content(props_xml, 'DateLastModified')
288
+
289
+ cloud.extended_properties = {}
290
+ props_xml.css('ExtendedProperties ExtendedProperty').map do |prop|
291
+ p_name = xml_content(prop, 'Name')
292
+ p_value = xml_content(prop, 'Value')
293
+ cloud.extended_properties[p_name] = p_value
294
+ end
295
+
296
+ cloud.default_winrm_certificate_thumbprint = xml_content(
297
+ cloud_service_xml, 'DefaultWinRMCertificateThumbprint'
298
+ )
299
+ deployment_xml = cloud_services_xml.css('Deployments Deployment')
300
+ cloud.deployment_name = xml_content(deployment_xml, 'Name')
301
+ vms_in_deployment = {}
302
+
303
+ cloud_service_xml.css('Deployments').each do |deployxml|
304
+ deployment_name = xml_content(deployxml, 'Deployment Name')
305
+ vms = Azure::VirtualMachineManagement::Serialization.virtual_machines_from_xml(
306
+ deployxml, cloud.name
307
+ )
308
+ vms_in_deployment[deployment_name.to_sym] = vms if vms
309
+ end
310
+
311
+ cloud.virtual_machines = vms_in_deployment
312
+ clouds << cloud
313
+ end
314
+ clouds.compact
315
+ end
316
+
317
+ def self.add_certificate_to_xml(data)
318
+ builder = Nokogiri::XML::Builder.new do |xml|
319
+ xml.CertificateFile('xmlns' => 'http://schemas.microsoft.com/windowsazure') do
320
+ xml.Data data
321
+ xml.CertificateFormat 'pfx'
322
+ xml.Password nil
323
+ end
324
+ end
325
+ builder.doc.to_xml
326
+ end
327
+ end
328
+ end
329
+ end