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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +11 -0
- data/ChangeLog.txt +40 -0
- data/Gemfile +16 -0
- data/README.md +590 -0
- data/Rakefile +129 -0
- data/azure.gemspec +47 -0
- data/lib/azure.rb +52 -0
- data/lib/azure/base_management/affinity_group.rb +32 -0
- data/lib/azure/base_management/base_management_service.rb +238 -0
- data/lib/azure/base_management/location.rb +27 -0
- data/lib/azure/base_management/management_http_request.rb +244 -0
- data/lib/azure/base_management/serialization.rb +129 -0
- data/lib/azure/base_management/sql_management_http_request.rb +45 -0
- data/lib/azure/blob/blob.rb +32 -0
- data/lib/azure/blob/blob_service.rb +1424 -0
- data/lib/azure/blob/block.rb +31 -0
- data/lib/azure/blob/container.rb +32 -0
- data/lib/azure/blob/serialization.rb +285 -0
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +361 -0
- data/lib/azure/cloud_service_management/configuration_set.rb +28 -0
- data/lib/azure/cloud_service_management/deployment.rb +64 -0
- data/lib/azure/cloud_service_management/input_endpoint.rb +29 -0
- data/lib/azure/cloud_service_management/instance_endpoint.rb +31 -0
- data/lib/azure/cloud_service_management/persistent_vm_downtime.rb +29 -0
- data/lib/azure/cloud_service_management/role.rb +30 -0
- data/lib/azure/cloud_service_management/role_instance.rb +40 -0
- data/lib/azure/cloud_service_management/serialization.rb +329 -0
- data/lib/azure/cloud_service_management/virtual_ip.rb +29 -0
- data/lib/azure/core.rb +39 -0
- data/lib/azure/core/auth/authorizer.rb +36 -0
- data/lib/azure/core/auth/shared_key.rb +110 -0
- data/lib/azure/core/auth/shared_key_lite.rb +48 -0
- data/lib/azure/core/auth/signer.rb +48 -0
- data/lib/azure/core/configuration.rb +211 -0
- data/lib/azure/core/error.rb +22 -0
- data/lib/azure/core/filtered_service.rb +44 -0
- data/lib/azure/core/http/debug_filter.rb +36 -0
- data/lib/azure/core/http/http_error.rb +88 -0
- data/lib/azure/core/http/http_filter.rb +53 -0
- data/lib/azure/core/http/http_request.rb +159 -0
- data/lib/azure/core/http/http_response.rb +140 -0
- data/lib/azure/core/http/retry_policy.rb +74 -0
- data/lib/azure/core/http/signer_filter.rb +34 -0
- data/lib/azure/core/service.rb +63 -0
- data/lib/azure/core/signed_service.rb +43 -0
- data/lib/azure/core/utility.rb +190 -0
- data/lib/azure/queue/message.rb +30 -0
- data/lib/azure/queue/queue.rb +29 -0
- data/lib/azure/queue/queue_service.rb +568 -0
- data/lib/azure/queue/serialization.rb +106 -0
- data/lib/azure/service/access_policy.rb +26 -0
- data/lib/azure/service/enumeration_results.rb +21 -0
- data/lib/azure/service/logging.rb +32 -0
- data/lib/azure/service/metrics.rb +31 -0
- data/lib/azure/service/retention_policy.rb +25 -0
- data/lib/azure/service/serialization.rb +240 -0
- data/lib/azure/service/signed_identifier.rb +30 -0
- data/lib/azure/service/storage_service.rb +79 -0
- data/lib/azure/service/storage_service_properties.rb +32 -0
- data/lib/azure/service_bus/action.rb +21 -0
- data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
- data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
- data/lib/azure/service_bus/brokered_message.rb +124 -0
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
- data/lib/azure/service_bus/correlation_filter.rb +45 -0
- data/lib/azure/service_bus/empty_rule_action.rb +30 -0
- data/lib/azure/service_bus/false_filter.rb +38 -0
- data/lib/azure/service_bus/filter.rb +21 -0
- data/lib/azure/service_bus/interval.rb +104 -0
- data/lib/azure/service_bus/queue.rb +230 -0
- data/lib/azure/service_bus/resource.rb +109 -0
- data/lib/azure/service_bus/rule.rb +98 -0
- data/lib/azure/service_bus/rule_aspect.rb +34 -0
- data/lib/azure/service_bus/serialization.rb +160 -0
- data/lib/azure/service_bus/service_bus_service.rb +829 -0
- data/lib/azure/service_bus/sql_filter.rb +50 -0
- data/lib/azure/service_bus/sql_rule_action.rb +50 -0
- data/lib/azure/service_bus/subscription.rb +184 -0
- data/lib/azure/service_bus/topic.rb +187 -0
- data/lib/azure/service_bus/true_filter.rb +38 -0
- data/lib/azure/sql_database_management/serialization.rb +111 -0
- data/lib/azure/sql_database_management/sql_database.rb +31 -0
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
- data/lib/azure/storage_management/serialization.rb +184 -0
- data/lib/azure/storage_management/storage_account.rb +40 -0
- data/lib/azure/storage_management/storage_management_service.rb +166 -0
- data/lib/azure/table/auth/shared_key.rb +92 -0
- data/lib/azure/table/auth/shared_key_lite.rb +44 -0
- data/lib/azure/table/batch.rb +330 -0
- data/lib/azure/table/batch_response.rb +118 -0
- data/lib/azure/table/edmtype.rb +127 -0
- data/lib/azure/table/entity.rb +31 -0
- data/lib/azure/table/guid.rb +24 -0
- data/lib/azure/table/query.rb +112 -0
- data/lib/azure/table/serialization.rb +108 -0
- data/lib/azure/table/table_service.rb +560 -0
- data/lib/azure/version.rb +31 -0
- data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
- data/lib/azure/virtual_machine_management/serialization.rb +436 -0
- data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
- data/lib/azure/virtual_network_management/serialization.rb +186 -0
- data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
- data/test/fixtures/32px-fulls-black.jpg +0 -0
- data/test/fixtures/affinity_group.xml +33 -0
- data/test/fixtures/all_containers.xml +20 -0
- data/test/fixtures/all_tables.xml +22 -0
- data/test/fixtures/certificate.pem +21 -0
- data/test/fixtures/container_acl.xml +11 -0
- data/test/fixtures/create_sql_database_server.xml +2 -0
- data/test/fixtures/create_storage_desc_error.xml +5 -0
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
- data/test/fixtures/create_storage_full_error.xml +6 -0
- data/test/fixtures/create_storage_label_error.xml +5 -0
- data/test/fixtures/create_storage_location_error.xml +5 -0
- data/test/fixtures/create_storage_name_error.xml +6 -0
- data/test/fixtures/create_table_response_entry.xml +15 -0
- data/test/fixtures/delete_storage_container_error.xml +5 -0
- data/test/fixtures/delete_storage_error.xml +5 -0
- data/test/fixtures/deployment_error.xml +5 -0
- data/test/fixtures/empty_xml_file +0 -0
- data/test/fixtures/get_deployment.xml +94 -0
- data/test/fixtures/get_deployment_existing.xml +94 -0
- data/test/fixtures/get_deployment_missing.xml +5 -0
- data/test/fixtures/get_storage_account_error.xml +5 -0
- data/test/fixtures/get_storage_account_properties.xml +32 -0
- data/test/fixtures/get_storage_account_properties_new.xml +32 -0
- data/test/fixtures/http_error.xml +5 -0
- data/test/fixtures/insert_entity_response_entry.xml +25 -0
- data/test/fixtures/list_affinity_groups.xml +22 -0
- data/test/fixtures/list_blobs.xml +121 -0
- data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
- data/test/fixtures/list_blocks_all.xml +23 -0
- data/test/fixtures/list_blocks_committed.xml +13 -0
- data/test/fixtures/list_cloud_services.xml +39 -0
- data/test/fixtures/list_containers.xml +38 -0
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
- data/test/fixtures/list_images.xml +110 -0
- data/test/fixtures/list_locations.xml +62 -0
- data/test/fixtures/list_page_ranges.xml +11 -0
- data/test/fixtures/list_sql_database.xml +36 -0
- data/test/fixtures/list_sql_server_firewall.xml +23 -0
- data/test/fixtures/list_storage_account_single.xml +25 -0
- data/test/fixtures/list_storage_accounts.xml +46 -0
- data/test/fixtures/list_virtual_networks.xml +92 -0
- data/test/fixtures/logging.xml +11 -0
- data/test/fixtures/management_certificate.pem +55 -0
- data/test/fixtures/messages.xml +12 -0
- data/test/fixtures/metrics.xml +10 -0
- data/test/fixtures/privatekey.key +28 -0
- data/test/fixtures/query_entities_empty_response.xml +7 -0
- data/test/fixtures/query_entities_response.xml +45 -0
- data/test/fixtures/queue_service_properties.xml +22 -0
- data/test/fixtures/queue_service_properties_original.xml +19 -0
- data/test/fixtures/queues.xml +16 -0
- data/test/fixtures/retention_policy.xml +5 -0
- data/test/fixtures/sb_default_create_queue_response.xml +23 -0
- data/test/fixtures/sb_default_create_topic_response.xml +18 -0
- data/test/fixtures/sb_get_access_token_response.txt +1 -0
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
- data/test/fixtures/storage_service_properties.xml +23 -0
- data/test/fixtures/update_storage_account.xml +16 -0
- data/test/fixtures/update_storage_error.xml +5 -0
- data/test/fixtures/updated_storage_accounts.xml +53 -0
- data/test/fixtures/virtual_machine.xml +113 -0
- data/test/fixtures/windows_virtual_machine.xml +106 -0
- data/test/integration/affinity_group/Affinity_test.rb +55 -0
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
- data/test/integration/blob/blob_gb18030_test.rb +199 -0
- data/test/integration/blob/blob_metadata_test.rb +75 -0
- data/test/integration/blob/blob_pages_test.rb +119 -0
- data/test/integration/blob/blob_properties_test.rb +77 -0
- data/test/integration/blob/block_blob_test.rb +254 -0
- data/test/integration/blob/container/container_acl_test.rb +69 -0
- data/test/integration/blob/container/container_metadata_test.rb +50 -0
- data/test/integration/blob/container/create_container_test.rb +60 -0
- data/test/integration/blob/container/delete_container_test.rb +39 -0
- data/test/integration/blob/container/get_container_properties_test.rb +48 -0
- data/test/integration/blob/container/list_containers_test.rb +79 -0
- data/test/integration/blob/container/root_container_test.rb +54 -0
- data/test/integration/blob/copy_blob_test.rb +113 -0
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
- data/test/integration/blob/create_page_blob_test.rb +83 -0
- data/test/integration/blob/delete_blob_test.rb +159 -0
- data/test/integration/blob/get_blob_test.rb +65 -0
- data/test/integration/blob/informative_errors_test.rb +39 -0
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
- data/test/integration/blob/lease/break_lease_test.rb +40 -0
- data/test/integration/blob/lease/release_lease_test.rb +40 -0
- data/test/integration/blob/lease/renew_lease_test.rb +42 -0
- data/test/integration/blob/list_blobs_test.rb +113 -0
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
- data/test/integration/database/create_sql_server_test.rb +53 -0
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
- data/test/integration/database/delete_sql_server_test.rb +58 -0
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
- data/test/integration/database/list_sql_servers_test.rb +44 -0
- data/test/integration/database/reset_password_sql_server_test.rb +55 -0
- data/test/integration/location/Location_List_test.rb +39 -0
- data/test/integration/queue/clear_messages_test.rb +42 -0
- data/test/integration/queue/create_message_test.rb +75 -0
- data/test/integration/queue/create_queue_test.rb +50 -0
- data/test/integration/queue/delete_message_test.rb +67 -0
- data/test/integration/queue/delete_queue_test.rb +45 -0
- data/test/integration/queue/informative_errors_test.rb +42 -0
- data/test/integration/queue/list_messages_encoded_test.rb +79 -0
- data/test/integration/queue/list_messages_test.rb +79 -0
- data/test/integration/queue/list_queues_test.rb +44 -0
- data/test/integration/queue/peek_messages_test.rb +59 -0
- data/test/integration/queue/queue_gb18030_test.rb +131 -0
- data/test/integration/queue/queue_metadata_test.rb +40 -0
- data/test/integration/queue/update_message_test.rb +74 -0
- data/test/integration/service_bus/informative_errors_test.rb +37 -0
- data/test/integration/service_bus/queues_scenario_test.rb +200 -0
- data/test/integration/service_bus/queues_test.rb +266 -0
- data/test/integration/service_bus/rules_test.rb +145 -0
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
- data/test/integration/service_bus/scenario_test.rb +101 -0
- data/test/integration/service_bus/subscriptions_test.rb +211 -0
- data/test/integration/service_bus/topics_scenario_test.rb +406 -0
- data/test/integration/service_bus/topics_test.rb +129 -0
- data/test/integration/storage_management/storage_management_test.rb +160 -0
- data/test/integration/table/create_table_test.rb +36 -0
- data/test/integration/table/delete_entity_batch_test.rb +107 -0
- data/test/integration/table/delete_entity_test.rb +94 -0
- data/test/integration/table/delete_table_test.rb +40 -0
- data/test/integration/table/get_table_test.rb +37 -0
- data/test/integration/table/informative_errors_test.rb +39 -0
- data/test/integration/table/insert_entity_batch_test.rb +100 -0
- data/test/integration/table/insert_entity_test.rb +88 -0
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
- data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
- data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
- data/test/integration/table/merge_entity_batch_test.rb +128 -0
- data/test/integration/table/merge_entity_test.rb +113 -0
- data/test/integration/table/query_entities_test.rb +195 -0
- data/test/integration/table/query_tables_test.rb +43 -0
- data/test/integration/table/query_test.rb +251 -0
- data/test/integration/table/table_acl_test.rb +52 -0
- data/test/integration/table/table_gb18030_test.rb +355 -0
- data/test/integration/table/update_entity_batch_test.rb +149 -0
- data/test/integration/table/update_entity_test.rb +131 -0
- data/test/integration/test_helper.rb +42 -0
- data/test/integration/vm/VM_Create_test.rb +260 -0
- data/test/integration/vm/VM_Delete_test.rb +55 -0
- data/test/integration/vm/VM_Operations_test.rb +173 -0
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
- data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
- data/test/support/env.rb +19 -0
- data/test/support/fixtures.rb +36 -0
- data/test/support/name_generator.rb +160 -0
- data/test/support/stubs.rb +42 -0
- data/test/support/virtual_machine_name_generator.rb +102 -0
- data/test/support/virtual_network_helper.rb +73 -0
- data/test/test_helper.rb +53 -0
- data/test/unit/affinity_group/affinity_group_test.rb +192 -0
- data/test/unit/affinity_group/serialization_test.rb +88 -0
- data/test/unit/base_management/location_test.rb +57 -0
- data/test/unit/blob/blob_service_test.rb +1947 -0
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +276 -0
- data/test/unit/cloud_service_management/serialization_test.rb +169 -0
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
- data/test/unit/core/auth/shared_key_test.rb +58 -0
- data/test/unit/core/auth/signer_test.rb +30 -0
- data/test/unit/core/http/http_error_test.rb +57 -0
- data/test/unit/core/http/http_request_test.rb +66 -0
- data/test/unit/core/http/http_response_test.rb +45 -0
- data/test/unit/core/http/retry_policy_test.rb +23 -0
- data/test/unit/database/serialization_test.rb +97 -0
- data/test/unit/database/sql_database_server_service_test.rb +288 -0
- data/test/unit/service/serialization_test.rb +502 -0
- data/test/unit/service/storage_service_test.rb +291 -0
- data/test/unit/storage_management/serialization_test.rb +232 -0
- data/test/unit/storage_management/storage_management_service_test.rb +261 -0
- data/test/unit/table/edmtype_test.rb +108 -0
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
- data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
- data/test/unit/vnet/serialization_test.rb +187 -0
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
- 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
|