stuartpreston-azure-sdk-for-ruby 0.7.1 → 0.7.2
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 +4 -4
- data/.gitignore +11 -11
- data/.travis.yml +10 -10
- data/ChangeLog.txt +70 -68
- data/Gemfile +15 -15
- data/README.md +618 -618
- data/Rakefile +133 -133
- data/azure.gemspec +44 -44
- data/lib/azure.rb +52 -52
- data/lib/azure/base_management/affinity_group.rb +32 -32
- data/lib/azure/base_management/base_management_service.rb +304 -304
- data/lib/azure/base_management/location.rb +27 -27
- data/lib/azure/base_management/management_http_request.rb +171 -171
- data/lib/azure/base_management/serialization.rb +129 -129
- data/lib/azure/base_management/sql_management_http_request.rb +45 -45
- data/lib/azure/blob/blob.rb +31 -31
- data/lib/azure/blob/blob_service.rb +1423 -1423
- data/lib/azure/blob/block.rb +30 -30
- data/lib/azure/blob/container.rb +31 -31
- data/lib/azure/blob/serialization.rb +284 -284
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -38
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +140 -140
- data/lib/azure/cloud_service_management/serialization.rb +117 -117
- data/lib/azure/core.rb +39 -39
- data/lib/azure/core/auth/authorizer.rb +36 -36
- data/lib/azure/core/auth/shared_key.rb +110 -110
- data/lib/azure/core/auth/shared_key_lite.rb +48 -48
- data/lib/azure/core/auth/signer.rb +48 -48
- data/lib/azure/core/configuration.rb +211 -211
- data/lib/azure/core/error.rb +22 -22
- data/lib/azure/core/filtered_service.rb +43 -43
- data/lib/azure/core/http/debug_filter.rb +35 -35
- data/lib/azure/core/http/http_error.rb +88 -88
- data/lib/azure/core/http/http_filter.rb +52 -52
- data/lib/azure/core/http/http_request.rb +157 -157
- data/lib/azure/core/http/http_response.rb +140 -140
- data/lib/azure/core/http/retry_policy.rb +73 -73
- data/lib/azure/core/http/signer_filter.rb +33 -33
- data/lib/azure/core/service.rb +62 -62
- data/lib/azure/core/signed_service.rb +42 -42
- data/lib/azure/core/utility.rb +190 -190
- data/lib/azure/queue/message.rb +29 -29
- data/lib/azure/queue/queue.rb +28 -28
- data/lib/azure/queue/queue_service.rb +567 -567
- data/lib/azure/queue/serialization.rb +106 -106
- data/lib/azure/service/access_policy.rb +25 -25
- data/lib/azure/service/cors.rb +11 -11
- data/lib/azure/service/cors_rule.rb +15 -15
- data/lib/azure/service/enumeration_results.rb +20 -20
- data/lib/azure/service/logging.rb +31 -31
- data/lib/azure/service/metrics.rb +30 -30
- data/lib/azure/service/retention_policy.rb +24 -24
- data/lib/azure/service/serialization.rb +297 -297
- data/lib/azure/service/signed_identifier.rb +29 -29
- data/lib/azure/service/storage_service.rb +82 -82
- data/lib/azure/service/storage_service_properties.rb +37 -37
- data/lib/azure/service_bus/action.rb +21 -21
- data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
- data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
- data/lib/azure/service_bus/brokered_message.rb +123 -123
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
- data/lib/azure/service_bus/correlation_filter.rb +45 -45
- data/lib/azure/service_bus/empty_rule_action.rb +29 -29
- data/lib/azure/service_bus/false_filter.rb +38 -38
- data/lib/azure/service_bus/filter.rb +21 -21
- data/lib/azure/service_bus/interval.rb +103 -103
- data/lib/azure/service_bus/queue.rb +229 -229
- data/lib/azure/service_bus/relay.rb +87 -87
- data/lib/azure/service_bus/resource.rb +108 -108
- data/lib/azure/service_bus/rule.rb +97 -97
- data/lib/azure/service_bus/rule_aspect.rb +34 -34
- data/lib/azure/service_bus/serialization.rb +161 -161
- data/lib/azure/service_bus/service_bus_service.rb +896 -896
- data/lib/azure/service_bus/sql_filter.rb +50 -50
- data/lib/azure/service_bus/sql_rule_action.rb +50 -50
- data/lib/azure/service_bus/subscription.rb +183 -183
- data/lib/azure/service_bus/topic.rb +186 -186
- data/lib/azure/service_bus/true_filter.rb +38 -38
- data/lib/azure/sql_database_management/serialization.rb +111 -111
- data/lib/azure/sql_database_management/sql_database.rb +31 -31
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -200
- data/lib/azure/storage_management/serialization.rb +184 -184
- data/lib/azure/storage_management/storage_account.rb +40 -40
- data/lib/azure/storage_management/storage_management_service.rb +166 -166
- data/lib/azure/table/auth/shared_key.rb +92 -92
- data/lib/azure/table/auth/shared_key_lite.rb +44 -44
- data/lib/azure/table/batch.rb +329 -329
- data/lib/azure/table/batch_response.rb +118 -118
- data/lib/azure/table/edmtype.rb +126 -126
- data/lib/azure/table/entity.rb +30 -30
- data/lib/azure/table/guid.rb +23 -23
- data/lib/azure/table/query.rb +111 -111
- data/lib/azure/table/serialization.rb +107 -107
- data/lib/azure/table/table_service.rb +559 -559
- data/lib/azure/version.rb +31 -31
- data/lib/azure/virtual_machine_image_management/serialization.rb +66 -66
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +94 -94
- data/lib/azure/virtual_machine_management/serialization.rb +462 -462
- data/lib/azure/virtual_machine_management/virtual_machine.rb +45 -45
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +588 -588
- data/lib/azure/virtual_network_management/serialization.rb +190 -190
- data/lib/azure/virtual_network_management/virtual_network.rb +37 -37
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
- data/test/fixtures/affinity_group.xml +33 -33
- data/test/fixtures/all_containers.xml +20 -20
- data/test/fixtures/all_tables.xml +22 -22
- data/test/fixtures/certificate.pem +21 -21
- data/test/fixtures/container_acl.xml +11 -11
- data/test/fixtures/create_sql_database_server.xml +1 -1
- data/test/fixtures/create_storage_desc_error.xml +5 -5
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -8
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -6
- data/test/fixtures/create_storage_full_error.xml +6 -6
- data/test/fixtures/create_storage_label_error.xml +5 -5
- data/test/fixtures/create_storage_location_error.xml +5 -5
- data/test/fixtures/create_storage_name_error.xml +6 -6
- data/test/fixtures/create_table_response_entry.xml +15 -15
- data/test/fixtures/delete_storage_container_error.xml +5 -5
- data/test/fixtures/delete_storage_error.xml +5 -5
- data/test/fixtures/deployment_error.xml +5 -5
- data/test/fixtures/get_storage_account_error.xml +5 -5
- data/test/fixtures/get_storage_account_properties.xml +31 -31
- data/test/fixtures/get_storage_account_properties_new.xml +31 -31
- data/test/fixtures/http_error.xml +5 -5
- data/test/fixtures/insert_entity_response_entry.xml +25 -25
- data/test/fixtures/list_affinity_groups.xml +22 -22
- data/test/fixtures/list_blobs.xml +120 -120
- data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
- data/test/fixtures/list_blocks_all.xml +22 -22
- data/test/fixtures/list_blocks_committed.xml +12 -12
- data/test/fixtures/list_cloud_services.xml +38 -38
- data/test/fixtures/list_containers.xml +37 -37
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -27
- data/test/fixtures/list_images.xml +110 -110
- data/test/fixtures/list_locations.xml +62 -62
- data/test/fixtures/list_page_ranges.xml +10 -10
- data/test/fixtures/list_sql_database.xml +36 -36
- data/test/fixtures/list_sql_server_firewall.xml +23 -23
- data/test/fixtures/list_storage_account_single.xml +24 -24
- data/test/fixtures/list_storage_accounts.xml +45 -45
- data/test/fixtures/list_virtual_networks.xml +92 -92
- data/test/fixtures/logging.xml +11 -11
- data/test/fixtures/management_certificate.pem +55 -55
- data/test/fixtures/messages.xml +12 -12
- data/test/fixtures/metrics.xml +10 -10
- data/test/fixtures/privatekey.key +28 -28
- data/test/fixtures/query_entities_empty_response.xml +7 -7
- data/test/fixtures/query_entities_response.xml +45 -45
- data/test/fixtures/queue_service_properties.xml +22 -22
- data/test/fixtures/queue_service_properties_original.xml +19 -19
- data/test/fixtures/queues.xml +16 -16
- data/test/fixtures/retention_policy.xml +5 -5
- data/test/fixtures/sb_default_create_queue_response.xml +23 -23
- data/test/fixtures/sb_default_create_relay_response.xml +15 -15
- data/test/fixtures/sb_default_create_topic_response.xml +18 -18
- data/test/fixtures/sb_get_access_token_response.txt +1 -1
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
- data/test/fixtures/storage_service_properties.xml +54 -54
- data/test/fixtures/update_storage_account.xml +16 -16
- data/test/fixtures/update_storage_error.xml +4 -4
- data/test/fixtures/updated_storage_accounts.xml +52 -52
- data/test/fixtures/virtual_machine.xml +113 -113
- data/test/fixtures/windows_virtual_machine.xml +106 -106
- data/test/integration/affinity_group/Affinity_test.rb +55 -55
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
- data/test/integration/blob/blob_gb18030_test.rb +199 -199
- data/test/integration/blob/blob_metadata_test.rb +75 -75
- data/test/integration/blob/blob_pages_test.rb +119 -119
- data/test/integration/blob/blob_properties_test.rb +77 -77
- data/test/integration/blob/block_blob_test.rb +254 -254
- data/test/integration/blob/container/container_acl_test.rb +69 -69
- data/test/integration/blob/container/container_metadata_test.rb +50 -50
- data/test/integration/blob/container/create_container_test.rb +60 -60
- data/test/integration/blob/container/delete_container_test.rb +39 -39
- data/test/integration/blob/container/get_container_properties_test.rb +48 -48
- data/test/integration/blob/container/list_containers_test.rb +79 -79
- data/test/integration/blob/container/root_container_test.rb +53 -53
- data/test/integration/blob/copy_blob_test.rb +113 -113
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
- data/test/integration/blob/create_page_blob_test.rb +83 -83
- data/test/integration/blob/delete_blob_test.rb +159 -159
- data/test/integration/blob/get_blob_test.rb +65 -65
- data/test/integration/blob/informative_errors_test.rb +38 -38
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
- data/test/integration/blob/lease/break_lease_test.rb +40 -40
- data/test/integration/blob/lease/release_lease_test.rb +40 -40
- data/test/integration/blob/lease/renew_lease_test.rb +42 -42
- data/test/integration/blob/list_blobs_test.rb +113 -113
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -44
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -44
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
- data/test/integration/database/create_sql_server_test.rb +53 -53
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -70
- data/test/integration/database/delete_sql_server_test.rb +58 -58
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -45
- data/test/integration/database/list_sql_servers_test.rb +44 -44
- data/test/integration/database/reset_password_sql_server_test.rb +55 -55
- data/test/integration/location/Location_List_test.rb +39 -39
- data/test/integration/queue/clear_messages_test.rb +42 -42
- data/test/integration/queue/create_message_test.rb +75 -75
- data/test/integration/queue/create_queue_test.rb +50 -50
- data/test/integration/queue/delete_message_test.rb +67 -67
- data/test/integration/queue/delete_queue_test.rb +45 -45
- data/test/integration/queue/informative_errors_test.rb +41 -41
- data/test/integration/queue/list_messages_encoded_test.rb +79 -79
- data/test/integration/queue/list_messages_test.rb +79 -79
- data/test/integration/queue/list_queues_test.rb +44 -44
- data/test/integration/queue/peek_messages_test.rb +59 -59
- data/test/integration/queue/queue_gb18030_test.rb +131 -131
- data/test/integration/queue/queue_metadata_test.rb +40 -40
- data/test/integration/queue/update_message_test.rb +74 -74
- data/test/integration/service_bus/informative_errors_test.rb +36 -36
- data/test/integration/service_bus/queues_scenario_test.rb +200 -200
- data/test/integration/service_bus/queues_test.rb +265 -265
- data/test/integration/service_bus/relay_test.rb +131 -131
- data/test/integration/service_bus/rules_test.rb +144 -144
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
- data/test/integration/service_bus/scenario_test.rb +101 -101
- data/test/integration/service_bus/subscriptions_test.rb +211 -211
- data/test/integration/service_bus/topics_scenario_test.rb +406 -406
- data/test/integration/service_bus/topics_test.rb +129 -129
- data/test/integration/storage_management/storage_management_test.rb +160 -160
- data/test/integration/table/create_table_test.rb +35 -35
- data/test/integration/table/delete_entity_batch_test.rb +106 -106
- data/test/integration/table/delete_entity_test.rb +93 -93
- data/test/integration/table/delete_table_test.rb +39 -39
- data/test/integration/table/get_table_test.rb +36 -36
- data/test/integration/table/informative_errors_test.rb +38 -38
- data/test/integration/table/insert_entity_batch_test.rb +99 -99
- data/test/integration/table/insert_entity_test.rb +87 -87
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
- data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
- data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
- data/test/integration/table/merge_entity_batch_test.rb +127 -127
- data/test/integration/table/merge_entity_test.rb +112 -112
- data/test/integration/table/query_entities_test.rb +194 -194
- data/test/integration/table/query_tables_test.rb +42 -42
- data/test/integration/table/query_test.rb +250 -250
- data/test/integration/table/table_acl_test.rb +51 -51
- data/test/integration/table/table_gb18030_test.rb +355 -355
- data/test/integration/table/update_entity_batch_test.rb +148 -148
- data/test/integration/table/update_entity_test.rb +130 -130
- data/test/integration/test_helper.rb +42 -42
- data/test/integration/vm/VM_Create_test.rb +260 -260
- data/test/integration/vm/VM_Delete_test.rb +55 -55
- data/test/integration/vm/VM_Operations_test.rb +173 -173
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
- data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
- data/test/support/env.rb +19 -19
- data/test/support/fixtures.rb +36 -36
- data/test/support/name_generator.rb +168 -168
- data/test/support/stubs.rb +42 -42
- data/test/support/virtual_machine_name_generator.rb +102 -102
- data/test/support/virtual_network_helper.rb +73 -73
- data/test/test_helper.rb +53 -53
- data/test/unit/affinity_group/affinity_group_test.rb +192 -192
- data/test/unit/affinity_group/serialization_test.rb +88 -88
- data/test/unit/base_management/location_test.rb +57 -57
- data/test/unit/blob/blob_service_test.rb +1946 -1946
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
- data/test/unit/cloud_service_management/serialization_test.rb +169 -169
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
- data/test/unit/core/auth/shared_key_test.rb +58 -58
- data/test/unit/core/auth/signer_test.rb +30 -30
- data/test/unit/core/http/http_error_test.rb +57 -57
- data/test/unit/core/http/http_request_test.rb +66 -66
- data/test/unit/core/http/http_response_test.rb +45 -45
- data/test/unit/core/http/retry_policy_test.rb +23 -23
- data/test/unit/database/serialization_test.rb +97 -97
- data/test/unit/database/sql_database_server_service_test.rb +288 -288
- data/test/unit/service/serialization_test.rb +532 -532
- data/test/unit/service/storage_service_test.rb +292 -292
- data/test/unit/storage_management/serialization_test.rb +232 -232
- data/test/unit/storage_management/storage_management_service_test.rb +261 -261
- data/test/unit/table/edmtype_test.rb +107 -107
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -35
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -65
- data/test/unit/virtual_machine_management/serialization_test.rb +258 -258
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -440
- data/test/unit/vnet/serialization_test.rb +187 -187
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
- metadata +34 -27
@@ -1,27 +1,27 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
require "azure/base_management/serialization"
|
16
|
-
|
17
|
-
module Azure
|
18
|
-
module BaseManagement
|
19
|
-
class Location
|
20
|
-
attr_accessor :name, :available_services
|
21
|
-
|
22
|
-
def initialize
|
23
|
-
yield self if block_given?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
1
|
+
#-------------------------------------------------------------------------
|
2
|
+
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#--------------------------------------------------------------------------
|
15
|
+
require "azure/base_management/serialization"
|
16
|
+
|
17
|
+
module Azure
|
18
|
+
module BaseManagement
|
19
|
+
class Location
|
20
|
+
attr_accessor :name, :available_services
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
yield self if block_given?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,172 +1,172 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
require 'azure/core/http/http_response'
|
16
|
-
require 'azure/core/http/http_request'
|
17
|
-
include Azure::Core::Http
|
18
|
-
|
19
|
-
# Represents an HTTP request that can perform synchronous queries to
|
20
|
-
# an HTTP server, returning a HttpResponse
|
21
|
-
module Azure
|
22
|
-
module BaseManagement
|
23
|
-
class ManagementHttpRequest < HttpRequest
|
24
|
-
attr_accessor :uri, :warn, :key, :cert
|
25
|
-
|
26
|
-
# Public: Creates the ManagementHttpRequest
|
27
|
-
#
|
28
|
-
# method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
|
29
|
-
# path - URI. The URI of the HTTP endpoint to query
|
30
|
-
# body - IO or String. The request body (optional)
|
31
|
-
# key - String. The request key
|
32
|
-
# cert - String. The request certificate
|
33
|
-
def initialize(method, path, body = nil)
|
34
|
-
super
|
35
|
-
@warn = false
|
36
|
-
content_length = body ? body.bytesize.to_s : '0'
|
37
|
-
@headers = {
|
38
|
-
'x-ms-version' => '2014-04-01',
|
39
|
-
'Content-Type' => 'application/xml',
|
40
|
-
'Content-Length' => content_length
|
41
|
-
}
|
42
|
-
@uri = URI.parse(Azure.config.management_endpoint + Azure.config.subscription_id + path)
|
43
|
-
@key = Azure.config.http_private_key
|
44
|
-
@cert = Azure.config.http_certificate_key
|
45
|
-
end
|
46
|
-
|
47
|
-
# Public: Sends a request to HTTP server and returns a HttpResponse
|
48
|
-
#
|
49
|
-
# Returns a Nokogiri::XML instance of HttpResponse body
|
50
|
-
def call
|
51
|
-
request = http_request_class.new(uri.request_uri, headers)
|
52
|
-
request.body = body if body
|
53
|
-
http = http_setup
|
54
|
-
# http.set_debug_output($stdout)
|
55
|
-
response = wait_for_completion(HttpResponse.new(http.request(request)))
|
56
|
-
Nokogiri::XML response.body unless response.nil?
|
57
|
-
end
|
58
|
-
|
59
|
-
# Public: Wait for HTTP request completion.
|
60
|
-
#
|
61
|
-
# ==== Attributes
|
62
|
-
#
|
63
|
-
# * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
|
64
|
-
#
|
65
|
-
# Print Error or Success of HttpRequest
|
66
|
-
def wait_for_completion(response)
|
67
|
-
ret_val = Nokogiri::XML response.body
|
68
|
-
if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
|
69
|
-
Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
70
|
-
end
|
71
|
-
if response.status_code.to_i == 200 || response.status_code.to_i == 201
|
72
|
-
return response
|
73
|
-
elsif redirected? response
|
74
|
-
rebuild_request response
|
75
|
-
elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
|
76
|
-
check_completion(response.headers['x-ms-request-id'])
|
77
|
-
elsif warn && !response.success?
|
78
|
-
# Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
79
|
-
elsif response.body
|
80
|
-
if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
|
81
|
-
Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
82
|
-
else
|
83
|
-
Loggerx.exception_message "http error: #{response.status_code}"
|
84
|
-
end
|
85
|
-
else
|
86
|
-
Loggerx.exception_message "http error: #{response.status_code}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
# Public: Gets the status of the specified operation and determines whether
|
91
|
-
# the operation has succeeded, failed, or is still in progress.
|
92
|
-
#
|
93
|
-
# ==== Attributes
|
94
|
-
#
|
95
|
-
# * +request_id+ - String. x-ms-request-id response header of request
|
96
|
-
#
|
97
|
-
# See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
|
98
|
-
#
|
99
|
-
# Print Error or Success of Operation.
|
100
|
-
def check_completion(request_id)
|
101
|
-
request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}"
|
102
|
-
http = http_setup
|
103
|
-
headers['Content-Length'] = '0'
|
104
|
-
@method = :get
|
105
|
-
done = false
|
106
|
-
while not done
|
107
|
-
print '# '
|
108
|
-
request = http_request_class.new(request_path, headers)
|
109
|
-
response = HttpResponse.new(http.request(request))
|
110
|
-
ret_val = Nokogiri::XML response.body
|
111
|
-
status = xml_content(ret_val, 'Operation Status')
|
112
|
-
status_code = response.status_code.to_i
|
113
|
-
if status != 'InProgress'
|
114
|
-
done = true
|
115
|
-
end
|
116
|
-
if redirected? response
|
117
|
-
host_uri = URI.parse(response.headers['location'])
|
118
|
-
http = http_setup(host_uri)
|
119
|
-
done = false
|
120
|
-
end
|
121
|
-
if done
|
122
|
-
if status.downcase != 'succeeded'
|
123
|
-
error_code = xml_content(ret_val, 'Operation Error Code')
|
124
|
-
error_msg = xml_content(ret_val, 'Operation Error Message')
|
125
|
-
Loggerx.exception_message "#{error_code}: #{error_msg}"
|
126
|
-
else
|
127
|
-
Loggerx.success "#{status.downcase} (#{status_code})"
|
128
|
-
end
|
129
|
-
return
|
130
|
-
else
|
131
|
-
sleep(5)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def rebuild_request(response)
|
137
|
-
host_uri = URI.parse(response.headers['location'])
|
138
|
-
request = http_request_class.new(host_uri.request_uri, headers)
|
139
|
-
request.body = body if body
|
140
|
-
http = http_setup(host_uri)
|
141
|
-
wait_for_completion(HttpResponse.new(http.request(request)))
|
142
|
-
end
|
143
|
-
|
144
|
-
def redirected?(response)
|
145
|
-
(response.status_code.to_i == 307)
|
146
|
-
end
|
147
|
-
|
148
|
-
def http_setup(host_uri = nil)
|
149
|
-
@uri = host_uri if host_uri
|
150
|
-
http = nil
|
151
|
-
if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
|
152
|
-
if ENV['HTTP_PROXY']
|
153
|
-
proxy_uri = URI.parse(ENV['HTTP_PROXY'])
|
154
|
-
else
|
155
|
-
proxy_uri = URI.parse(ENV['HTTPS_PROXY'])
|
156
|
-
end
|
157
|
-
http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
|
158
|
-
else
|
159
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
160
|
-
end
|
161
|
-
|
162
|
-
if uri.scheme.downcase == 'https'
|
163
|
-
http.use_ssl = true
|
164
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
165
|
-
http.cert = cert
|
166
|
-
http.key = key
|
167
|
-
end
|
168
|
-
http
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
1
|
+
#-------------------------------------------------------------------------
|
2
|
+
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#--------------------------------------------------------------------------
|
15
|
+
require 'azure/core/http/http_response'
|
16
|
+
require 'azure/core/http/http_request'
|
17
|
+
include Azure::Core::Http
|
18
|
+
|
19
|
+
# Represents an HTTP request that can perform synchronous queries to
|
20
|
+
# an HTTP server, returning a HttpResponse
|
21
|
+
module Azure
|
22
|
+
module BaseManagement
|
23
|
+
class ManagementHttpRequest < HttpRequest
|
24
|
+
attr_accessor :uri, :warn, :key, :cert
|
25
|
+
|
26
|
+
# Public: Creates the ManagementHttpRequest
|
27
|
+
#
|
28
|
+
# method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
|
29
|
+
# path - URI. The URI of the HTTP endpoint to query
|
30
|
+
# body - IO or String. The request body (optional)
|
31
|
+
# key - String. The request key
|
32
|
+
# cert - String. The request certificate
|
33
|
+
def initialize(method, path, body = nil)
|
34
|
+
super
|
35
|
+
@warn = false
|
36
|
+
content_length = body ? body.bytesize.to_s : '0'
|
37
|
+
@headers = {
|
38
|
+
'x-ms-version' => '2014-04-01',
|
39
|
+
'Content-Type' => 'application/xml',
|
40
|
+
'Content-Length' => content_length
|
41
|
+
}
|
42
|
+
@uri = URI.parse(Azure.config.management_endpoint + Azure.config.subscription_id + path)
|
43
|
+
@key = Azure.config.http_private_key
|
44
|
+
@cert = Azure.config.http_certificate_key
|
45
|
+
end
|
46
|
+
|
47
|
+
# Public: Sends a request to HTTP server and returns a HttpResponse
|
48
|
+
#
|
49
|
+
# Returns a Nokogiri::XML instance of HttpResponse body
|
50
|
+
def call
|
51
|
+
request = http_request_class.new(uri.request_uri, headers)
|
52
|
+
request.body = body if body
|
53
|
+
http = http_setup
|
54
|
+
# http.set_debug_output($stdout)
|
55
|
+
response = wait_for_completion(HttpResponse.new(http.request(request)))
|
56
|
+
Nokogiri::XML response.body unless response.nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
# Public: Wait for HTTP request completion.
|
60
|
+
#
|
61
|
+
# ==== Attributes
|
62
|
+
#
|
63
|
+
# * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
|
64
|
+
#
|
65
|
+
# Print Error or Success of HttpRequest
|
66
|
+
def wait_for_completion(response)
|
67
|
+
ret_val = Nokogiri::XML response.body
|
68
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
|
69
|
+
Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
70
|
+
end
|
71
|
+
if response.status_code.to_i == 200 || response.status_code.to_i == 201
|
72
|
+
return response
|
73
|
+
elsif redirected? response
|
74
|
+
rebuild_request response
|
75
|
+
elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
|
76
|
+
check_completion(response.headers['x-ms-request-id'])
|
77
|
+
elsif warn && !response.success?
|
78
|
+
# Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
79
|
+
elsif response.body
|
80
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
|
81
|
+
Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
82
|
+
else
|
83
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
84
|
+
end
|
85
|
+
else
|
86
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Public: Gets the status of the specified operation and determines whether
|
91
|
+
# the operation has succeeded, failed, or is still in progress.
|
92
|
+
#
|
93
|
+
# ==== Attributes
|
94
|
+
#
|
95
|
+
# * +request_id+ - String. x-ms-request-id response header of request
|
96
|
+
#
|
97
|
+
# See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
|
98
|
+
#
|
99
|
+
# Print Error or Success of Operation.
|
100
|
+
def check_completion(request_id)
|
101
|
+
request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}"
|
102
|
+
http = http_setup
|
103
|
+
headers['Content-Length'] = '0'
|
104
|
+
@method = :get
|
105
|
+
done = false
|
106
|
+
while not done
|
107
|
+
print '# '
|
108
|
+
request = http_request_class.new(request_path, headers)
|
109
|
+
response = HttpResponse.new(http.request(request))
|
110
|
+
ret_val = Nokogiri::XML response.body
|
111
|
+
status = xml_content(ret_val, 'Operation Status')
|
112
|
+
status_code = response.status_code.to_i
|
113
|
+
if status != 'InProgress'
|
114
|
+
done = true
|
115
|
+
end
|
116
|
+
if redirected? response
|
117
|
+
host_uri = URI.parse(response.headers['location'])
|
118
|
+
http = http_setup(host_uri)
|
119
|
+
done = false
|
120
|
+
end
|
121
|
+
if done
|
122
|
+
if status.downcase != 'succeeded'
|
123
|
+
error_code = xml_content(ret_val, 'Operation Error Code')
|
124
|
+
error_msg = xml_content(ret_val, 'Operation Error Message')
|
125
|
+
Loggerx.exception_message "#{error_code}: #{error_msg}"
|
126
|
+
else
|
127
|
+
Loggerx.success "#{status.downcase} (#{status_code})"
|
128
|
+
end
|
129
|
+
return
|
130
|
+
else
|
131
|
+
sleep(5)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def rebuild_request(response)
|
137
|
+
host_uri = URI.parse(response.headers['location'])
|
138
|
+
request = http_request_class.new(host_uri.request_uri, headers)
|
139
|
+
request.body = body if body
|
140
|
+
http = http_setup(host_uri)
|
141
|
+
wait_for_completion(HttpResponse.new(http.request(request)))
|
142
|
+
end
|
143
|
+
|
144
|
+
def redirected?(response)
|
145
|
+
(response.status_code.to_i == 307)
|
146
|
+
end
|
147
|
+
|
148
|
+
def http_setup(host_uri = nil)
|
149
|
+
@uri = host_uri if host_uri
|
150
|
+
http = nil
|
151
|
+
if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
|
152
|
+
if ENV['HTTP_PROXY']
|
153
|
+
proxy_uri = URI.parse(ENV['HTTP_PROXY'])
|
154
|
+
else
|
155
|
+
proxy_uri = URI.parse(ENV['HTTPS_PROXY'])
|
156
|
+
end
|
157
|
+
http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
|
158
|
+
else
|
159
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
160
|
+
end
|
161
|
+
|
162
|
+
if uri.scheme.downcase == 'https'
|
163
|
+
http.use_ssl = true
|
164
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
165
|
+
http.cert = cert
|
166
|
+
http.key = key
|
167
|
+
end
|
168
|
+
http
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
172
|
end
|
@@ -1,129 +1,129 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
|
16
|
-
module Azure
|
17
|
-
module BaseManagement
|
18
|
-
module Serialization
|
19
|
-
def self.locations_from_xml(locationXML)
|
20
|
-
location_objs = []
|
21
|
-
xml = locationXML.css('Locations Location')
|
22
|
-
xml.each do |meta_node|
|
23
|
-
loc = Location.new
|
24
|
-
loc.name = xml_content(meta_node, 'Name')
|
25
|
-
available_services = meta_node.css('AvailableServices').children
|
26
|
-
loc.available_services = available_services.to_ary.join(', ')
|
27
|
-
location_objs << loc
|
28
|
-
end
|
29
|
-
location_objs
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.affinity_group_to_xml(name, location, label, options = {})
|
33
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
34
|
-
xml.CreateAffinityGroup(
|
35
|
-
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
36
|
-
) do
|
37
|
-
xml.Name name
|
38
|
-
xml.Label Base64.encode64(label).strip
|
39
|
-
xml.Description options[:description]
|
40
|
-
xml.Location location
|
41
|
-
end
|
42
|
-
end
|
43
|
-
builder.doc.to_xml
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.affinity_groups_from_xml(affinity_xml)
|
47
|
-
affinity_groups = []
|
48
|
-
affinity_group_services_xml = affinity_xml.css(
|
49
|
-
'AffinityGroups AffinityGroup'
|
50
|
-
)
|
51
|
-
|
52
|
-
affinity_group_services_xml.each do |ag_xml|
|
53
|
-
affinity_group = AffinityGroup.new
|
54
|
-
affinity_group.name = xml_content(ag_xml, 'Name')
|
55
|
-
affinity_group.label = Base64.decode64(xml_content(ag_xml, 'Label'))
|
56
|
-
affinity_group.description = xml_content(ag_xml, 'Description')
|
57
|
-
affinity_group.location = xml_content(ag_xml, 'Location')
|
58
|
-
|
59
|
-
capabilities = ag_xml.css('Capabilities Capability')
|
60
|
-
affinity_group.capability = capabilities.map { |x| x.content }
|
61
|
-
affinity_groups << affinity_group
|
62
|
-
end
|
63
|
-
affinity_groups.compact
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.affinity_group_from_xml(affinity_xml)
|
67
|
-
hosted_services_xml = affinity_xml.css(
|
68
|
-
'AffinityGroup HostedServices HostedService'
|
69
|
-
)
|
70
|
-
|
71
|
-
storage_services_xml = affinity_xml.css(
|
72
|
-
'AffinityGroup StorageServices StorageService'
|
73
|
-
)
|
74
|
-
|
75
|
-
capability_xml = affinity_xml.css(
|
76
|
-
'AffinityGroup Capabilities Capability'
|
77
|
-
)
|
78
|
-
|
79
|
-
AffinityGroup.new do |affinity_group|
|
80
|
-
affinity_group.name = xml_content(
|
81
|
-
affinity_xml,
|
82
|
-
'AffinityGroup Name'
|
83
|
-
)
|
84
|
-
affinity_group.label = Base64.decode64(
|
85
|
-
xml_content(
|
86
|
-
affinity_xml,
|
87
|
-
'AffinityGroup Label'
|
88
|
-
)
|
89
|
-
)
|
90
|
-
affinity_group.description = xml_content(
|
91
|
-
affinity_xml,
|
92
|
-
'AffinityGroup Description'
|
93
|
-
)
|
94
|
-
affinity_group.location = xml_content(
|
95
|
-
affinity_xml,
|
96
|
-
'AffinityGroup Location'
|
97
|
-
)
|
98
|
-
affinity_group.hosted_services = []
|
99
|
-
hosted_services_xml.each do |hosted_service_xml|
|
100
|
-
affinity_group.hosted_services << {
|
101
|
-
url: xml_content(hosted_service_xml, 'Url'),
|
102
|
-
service_name: xml_content(hosted_service_xml, 'ServiceName')
|
103
|
-
}
|
104
|
-
end
|
105
|
-
affinity_group.storage_services = []
|
106
|
-
storage_services_xml.each do |storage_service_xml|
|
107
|
-
affinity_group.storage_services << {
|
108
|
-
url: xml_content(storage_service_xml, 'Url'),
|
109
|
-
service_name: xml_content(storage_service_xml, 'ServiceName')
|
110
|
-
}
|
111
|
-
end
|
112
|
-
affinity_group.capability = capability_xml.map { |x| x.content }
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def self.resource_to_xml(label, options = {})
|
117
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
118
|
-
xml.UpdateAffinityGroup(
|
119
|
-
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
120
|
-
) do
|
121
|
-
xml.Label Base64.encode64(label).strip
|
122
|
-
xml.Description options[:description] if options[:description]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
builder.doc.to_xml
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
1
|
+
#-------------------------------------------------------------------------
|
2
|
+
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#--------------------------------------------------------------------------
|
15
|
+
|
16
|
+
module Azure
|
17
|
+
module BaseManagement
|
18
|
+
module Serialization
|
19
|
+
def self.locations_from_xml(locationXML)
|
20
|
+
location_objs = []
|
21
|
+
xml = locationXML.css('Locations Location')
|
22
|
+
xml.each do |meta_node|
|
23
|
+
loc = Location.new
|
24
|
+
loc.name = xml_content(meta_node, 'Name')
|
25
|
+
available_services = meta_node.css('AvailableServices').children
|
26
|
+
loc.available_services = available_services.to_ary.join(', ')
|
27
|
+
location_objs << loc
|
28
|
+
end
|
29
|
+
location_objs
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.affinity_group_to_xml(name, location, label, options = {})
|
33
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
34
|
+
xml.CreateAffinityGroup(
|
35
|
+
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
36
|
+
) do
|
37
|
+
xml.Name name
|
38
|
+
xml.Label Base64.encode64(label).strip
|
39
|
+
xml.Description options[:description]
|
40
|
+
xml.Location location
|
41
|
+
end
|
42
|
+
end
|
43
|
+
builder.doc.to_xml
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.affinity_groups_from_xml(affinity_xml)
|
47
|
+
affinity_groups = []
|
48
|
+
affinity_group_services_xml = affinity_xml.css(
|
49
|
+
'AffinityGroups AffinityGroup'
|
50
|
+
)
|
51
|
+
|
52
|
+
affinity_group_services_xml.each do |ag_xml|
|
53
|
+
affinity_group = AffinityGroup.new
|
54
|
+
affinity_group.name = xml_content(ag_xml, 'Name')
|
55
|
+
affinity_group.label = Base64.decode64(xml_content(ag_xml, 'Label'))
|
56
|
+
affinity_group.description = xml_content(ag_xml, 'Description')
|
57
|
+
affinity_group.location = xml_content(ag_xml, 'Location')
|
58
|
+
|
59
|
+
capabilities = ag_xml.css('Capabilities Capability')
|
60
|
+
affinity_group.capability = capabilities.map { |x| x.content }
|
61
|
+
affinity_groups << affinity_group
|
62
|
+
end
|
63
|
+
affinity_groups.compact
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.affinity_group_from_xml(affinity_xml)
|
67
|
+
hosted_services_xml = affinity_xml.css(
|
68
|
+
'AffinityGroup HostedServices HostedService'
|
69
|
+
)
|
70
|
+
|
71
|
+
storage_services_xml = affinity_xml.css(
|
72
|
+
'AffinityGroup StorageServices StorageService'
|
73
|
+
)
|
74
|
+
|
75
|
+
capability_xml = affinity_xml.css(
|
76
|
+
'AffinityGroup Capabilities Capability'
|
77
|
+
)
|
78
|
+
|
79
|
+
AffinityGroup.new do |affinity_group|
|
80
|
+
affinity_group.name = xml_content(
|
81
|
+
affinity_xml,
|
82
|
+
'AffinityGroup Name'
|
83
|
+
)
|
84
|
+
affinity_group.label = Base64.decode64(
|
85
|
+
xml_content(
|
86
|
+
affinity_xml,
|
87
|
+
'AffinityGroup Label'
|
88
|
+
)
|
89
|
+
)
|
90
|
+
affinity_group.description = xml_content(
|
91
|
+
affinity_xml,
|
92
|
+
'AffinityGroup Description'
|
93
|
+
)
|
94
|
+
affinity_group.location = xml_content(
|
95
|
+
affinity_xml,
|
96
|
+
'AffinityGroup Location'
|
97
|
+
)
|
98
|
+
affinity_group.hosted_services = []
|
99
|
+
hosted_services_xml.each do |hosted_service_xml|
|
100
|
+
affinity_group.hosted_services << {
|
101
|
+
url: xml_content(hosted_service_xml, 'Url'),
|
102
|
+
service_name: xml_content(hosted_service_xml, 'ServiceName')
|
103
|
+
}
|
104
|
+
end
|
105
|
+
affinity_group.storage_services = []
|
106
|
+
storage_services_xml.each do |storage_service_xml|
|
107
|
+
affinity_group.storage_services << {
|
108
|
+
url: xml_content(storage_service_xml, 'Url'),
|
109
|
+
service_name: xml_content(storage_service_xml, 'ServiceName')
|
110
|
+
}
|
111
|
+
end
|
112
|
+
affinity_group.capability = capability_xml.map { |x| x.content }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.resource_to_xml(label, options = {})
|
117
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
118
|
+
xml.UpdateAffinityGroup(
|
119
|
+
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
120
|
+
) do
|
121
|
+
xml.Label Base64.encode64(label).strip
|
122
|
+
xml.Description options[:description] if options[:description]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
builder.doc.to_xml
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|