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,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
|
|
@@ -0,0 +1,244 @@
|
|
|
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
|
+
# * +options+ - Hash. Optional parameters.
|
|
50
|
+
#
|
|
51
|
+
# ==== Options
|
|
52
|
+
#
|
|
53
|
+
# Accepted key/value pairs in options parameter are:
|
|
54
|
+
#
|
|
55
|
+
# * +:fire_and_forget+ - Boolean(optional). Default is false. If true, the client
|
|
56
|
+
# does not wait until the request is completed
|
|
57
|
+
# * +:no_exit_on_failure+ - Boolean(optional). Default is false.
|
|
58
|
+
#
|
|
59
|
+
# Returns a Nokogiri::XML instance of HttpResponse body
|
|
60
|
+
def call(options={})
|
|
61
|
+
fire_and_forget = options[:fire_and_forget].nil? ? false : options[:fire_and_forget]
|
|
62
|
+
request = http_request_class.new(uri.request_uri, headers)
|
|
63
|
+
request.body = body if body
|
|
64
|
+
http = http_setup
|
|
65
|
+
# http.set_debug_output($stdout)
|
|
66
|
+
if fire_and_forget
|
|
67
|
+
response = validate_response(HttpResponse.new(http.request(request)), options)
|
|
68
|
+
Nokogiri::XML response.body unless response.nil?
|
|
69
|
+
else
|
|
70
|
+
response = wait_for_completion(HttpResponse.new(http.request(request)), options)
|
|
71
|
+
Nokogiri::XML response.body unless response.nil?
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Public: Wait for HTTP request completion.
|
|
76
|
+
#
|
|
77
|
+
# ==== Attributes
|
|
78
|
+
#
|
|
79
|
+
# * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
|
|
80
|
+
# * +options+ - Hash. Optional parameters.
|
|
81
|
+
#
|
|
82
|
+
# ==== Options
|
|
83
|
+
#
|
|
84
|
+
# Accepted key/value pairs in options parameter are:
|
|
85
|
+
#
|
|
86
|
+
# * +:no_exit_on_failure+ - Boolean(optional). Default is false.
|
|
87
|
+
#
|
|
88
|
+
# Print Error or Success of HttpRequest
|
|
89
|
+
def wait_for_completion(response, options={})
|
|
90
|
+
no_exit_on_failure = options[:no_exit_on_failure].nil? ? false : options[:no_exit_on_failure]
|
|
91
|
+
ret_val = Nokogiri::XML response.body
|
|
92
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
|
|
93
|
+
error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
|
94
|
+
return log_warn_or_exit(response, error_msg, no_exit_on_failure)
|
|
95
|
+
end
|
|
96
|
+
if response.status_code.to_i == 200 || response.status_code.to_i == 201
|
|
97
|
+
return response
|
|
98
|
+
elsif redirected? response
|
|
99
|
+
rebuild_request response
|
|
100
|
+
elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299
|
|
101
|
+
check_completion(response.headers['x-ms-request-id'])
|
|
102
|
+
elsif warn && !response.success?
|
|
103
|
+
# Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
|
104
|
+
elsif response.body
|
|
105
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
|
|
106
|
+
error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
|
107
|
+
return log_warn_or_exit(response, error_msg, no_exit_on_failure)
|
|
108
|
+
else
|
|
109
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
|
110
|
+
end
|
|
111
|
+
else
|
|
112
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Public: Validate the Http response
|
|
117
|
+
#
|
|
118
|
+
# ==== Attributes
|
|
119
|
+
#
|
|
120
|
+
# * +response+ - Azure::Core::Http::HttpResponse. HttpResponse Response
|
|
121
|
+
# * +options+ - Hash. Optional parameters.
|
|
122
|
+
#
|
|
123
|
+
# ==== Options
|
|
124
|
+
#
|
|
125
|
+
# Accepted key/value pairs in options parameter are:
|
|
126
|
+
#
|
|
127
|
+
# * +:no_exit_on_failure+ - Boolean(optional). Default is false.
|
|
128
|
+
#
|
|
129
|
+
# Print Error or Success of HttpRequest
|
|
130
|
+
def validate_response(response, options={})
|
|
131
|
+
no_exit_on_failure = options[:no_exit_on_failure].nil? ? false : options[:no_exit_on_failure]
|
|
132
|
+
ret_val = Nokogiri::XML response.body
|
|
133
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed'
|
|
134
|
+
error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
|
135
|
+
return log_warn_or_exit(response, error_msg, no_exit_on_failure)
|
|
136
|
+
end
|
|
137
|
+
status_code = response.status_code.to_i
|
|
138
|
+
if [200, 201, 202].include? status_code
|
|
139
|
+
return response
|
|
140
|
+
elsif response.body
|
|
141
|
+
if ret_val.at_css('Error Code') && ret_val.at_css('Error Message')
|
|
142
|
+
error_msg = ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content
|
|
143
|
+
return log_warn_or_exit(response, error_msg, no_exit_on_failure)
|
|
144
|
+
else
|
|
145
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
|
146
|
+
end
|
|
147
|
+
else
|
|
148
|
+
Loggerx.exception_message "http error: #{response.status_code}"
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Public: Gets the status of the specified operation and determines whether
|
|
153
|
+
# the operation has succeeded, failed, or is still in progress.
|
|
154
|
+
#
|
|
155
|
+
# ==== Attributes
|
|
156
|
+
#
|
|
157
|
+
# * +request_id+ - String. x-ms-request-id response header of request
|
|
158
|
+
#
|
|
159
|
+
# See: http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
|
|
160
|
+
#
|
|
161
|
+
# Print Error or Success of Operation.
|
|
162
|
+
def check_completion(request_id)
|
|
163
|
+
request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}"
|
|
164
|
+
http = http_setup
|
|
165
|
+
headers['Content-Length'] = '0'
|
|
166
|
+
@method = :get
|
|
167
|
+
done = false
|
|
168
|
+
while not done
|
|
169
|
+
print '# '
|
|
170
|
+
request = http_request_class.new(request_path, headers)
|
|
171
|
+
response = HttpResponse.new(http.request(request))
|
|
172
|
+
ret_val = Nokogiri::XML response.body
|
|
173
|
+
status = xml_content(ret_val, 'Operation Status')
|
|
174
|
+
status_code = response.status_code.to_i
|
|
175
|
+
if status != 'InProgress'
|
|
176
|
+
done = true
|
|
177
|
+
end
|
|
178
|
+
if redirected? response
|
|
179
|
+
host_uri = URI.parse(response.headers['location'])
|
|
180
|
+
http = http_setup(host_uri)
|
|
181
|
+
done = false
|
|
182
|
+
end
|
|
183
|
+
if done
|
|
184
|
+
if status.downcase != 'succeeded'
|
|
185
|
+
error_code = xml_content(ret_val, 'Operation Error Code')
|
|
186
|
+
error_msg = xml_content(ret_val, 'Operation Error Message')
|
|
187
|
+
Loggerx.exception_message "#{error_code}: #{error_msg}"
|
|
188
|
+
else
|
|
189
|
+
Loggerx.success "#{status.downcase} (#{status_code})"
|
|
190
|
+
end
|
|
191
|
+
return
|
|
192
|
+
else
|
|
193
|
+
sleep(5)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def rebuild_request(response)
|
|
199
|
+
host_uri = URI.parse(response.headers['location'])
|
|
200
|
+
request = http_request_class.new(host_uri.request_uri, headers)
|
|
201
|
+
request.body = body if body
|
|
202
|
+
http = http_setup(host_uri)
|
|
203
|
+
wait_for_completion(HttpResponse.new(http.request(request)))
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def redirected?(response)
|
|
207
|
+
(response.status_code.to_i == 307)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def http_setup(host_uri = nil)
|
|
211
|
+
@uri = host_uri if host_uri
|
|
212
|
+
http = nil
|
|
213
|
+
if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
|
|
214
|
+
if ENV['HTTP_PROXY']
|
|
215
|
+
proxy_uri = URI.parse(ENV['HTTP_PROXY'])
|
|
216
|
+
else
|
|
217
|
+
proxy_uri = URI.parse(ENV['HTTPS_PROXY'])
|
|
218
|
+
end
|
|
219
|
+
http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
|
|
220
|
+
else
|
|
221
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
if uri.scheme.downcase == 'https'
|
|
225
|
+
http.use_ssl = true
|
|
226
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
227
|
+
http.cert = cert
|
|
228
|
+
http.key = key
|
|
229
|
+
end
|
|
230
|
+
http
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
private
|
|
234
|
+
def log_warn_or_exit(response, error_msg, no_exit_on_failure)
|
|
235
|
+
if no_exit_on_failure
|
|
236
|
+
Loggerx.warn "Warning: #{error_msg}"
|
|
237
|
+
return response
|
|
238
|
+
else
|
|
239
|
+
Loggerx.error_with_exit error_msg
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
# Represents an HTTP request that can perform synchronous queries to
|
|
16
|
+
# an HTTP server, returning a HttpResponse
|
|
17
|
+
module Azure
|
|
18
|
+
module BaseManagement
|
|
19
|
+
# This class is used for communicating with the Management certificate authentication API endpoint
|
|
20
|
+
class SqlManagementHttpRequest < ManagementHttpRequest
|
|
21
|
+
attr_accessor :uri
|
|
22
|
+
# Public: Creates the ManagementHttpRequest
|
|
23
|
+
#
|
|
24
|
+
# method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
|
|
25
|
+
# path - URI. The URI of the HTTP endpoint to query
|
|
26
|
+
# body - IO or String. The request body (optional)
|
|
27
|
+
def initialize(method, path, body = nil)
|
|
28
|
+
if sql_endpoint?
|
|
29
|
+
super(method, path, body)
|
|
30
|
+
@headers['x-ms-version'] = '1.0'
|
|
31
|
+
@uri = URI.parse(Azure.config.sql_database_management_endpoint + Azure.config.subscription_id + path)
|
|
32
|
+
else
|
|
33
|
+
path = "/services/sqlservers#{path}"
|
|
34
|
+
super(method, path, body)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def sql_endpoint?
|
|
41
|
+
Azure.config.sql_database_authentication_mode == :sql_server
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
module Azure
|
|
17
|
+
module Blob
|
|
18
|
+
class Blob
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@properties = {}
|
|
22
|
+
@metadata = {}
|
|
23
|
+
yield self if block_given?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_accessor :name
|
|
27
|
+
attr_accessor :snapshot
|
|
28
|
+
attr_accessor :properties
|
|
29
|
+
attr_accessor :metadata
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|