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,38 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require 'azure/service_bus/sql_filter'
|
|
16
|
+
|
|
17
|
+
module Azure
|
|
18
|
+
module ServiceBus
|
|
19
|
+
class TrueFilter < SqlFilter
|
|
20
|
+
# Public: Initialize the SQL True Filter.
|
|
21
|
+
#
|
|
22
|
+
# ==== Attributes
|
|
23
|
+
#
|
|
24
|
+
# * +hash+ - The resource options Hash
|
|
25
|
+
#
|
|
26
|
+
# ==== Options
|
|
27
|
+
#
|
|
28
|
+
# Accepted key/value pairs in options parameter are:
|
|
29
|
+
# * +:sql_expression+ - The SQL expression.
|
|
30
|
+
#
|
|
31
|
+
def initialize(hash=nil)
|
|
32
|
+
hash = {} unless hash
|
|
33
|
+
hash[:sql_expression] = "1 = 1" unless hash[:sql_expression]
|
|
34
|
+
super(hash)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
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/sql_database_management/sql_database'
|
|
16
|
+
|
|
17
|
+
module Azure
|
|
18
|
+
module SqlDatabaseManagement
|
|
19
|
+
module Serialization
|
|
20
|
+
|
|
21
|
+
def self.database_to_xml(login, password, location)
|
|
22
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
|
23
|
+
xml.Server('xmlns'=>'http://schemas.microsoft.com/sqlazure/2010/12/') {
|
|
24
|
+
xml.AdministratorLogin login
|
|
25
|
+
xml.AdministratorLoginPassword password
|
|
26
|
+
xml.Location location
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
builder.doc.to_xml
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.databases_from_xml(databasesXML)
|
|
33
|
+
databases = []
|
|
34
|
+
databases_servicesXML = databasesXML.css('Servers Server')
|
|
35
|
+
databases_servicesXML.each do |database_xml|
|
|
36
|
+
database = SqlDatabase.new
|
|
37
|
+
database.name = xml_content(database_xml, 'Name')
|
|
38
|
+
database.administrator_login = xml_content(database_xml, 'AdministratorLogin')
|
|
39
|
+
database.location = xml_content(database_xml, 'Location')
|
|
40
|
+
database.feature_name = xml_content(database_xml, 'Features Feature Name')
|
|
41
|
+
database.feature_value = xml_content(database_xml, 'Features Feature Value')
|
|
42
|
+
databases << database
|
|
43
|
+
end
|
|
44
|
+
databases.compact
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.server_name_from_xml(response_xml, login, location)
|
|
48
|
+
server_name = xml_content(response_xml, 'ServerName')
|
|
49
|
+
SqlDatabase.new do |db|
|
|
50
|
+
db.name = server_name
|
|
51
|
+
db.location = location
|
|
52
|
+
db.administrator_login = login
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.reset_password_to_xml(password)
|
|
57
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
|
58
|
+
xml.AdministratorLoginPassword(password, {'xmlns'=>'http://schemas.microsoft.com/sqlazure/2010/12/'})
|
|
59
|
+
end
|
|
60
|
+
builder.doc.to_xml
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.firewall_rule_to_xml(options)
|
|
64
|
+
# Need to revisit and implement RDFE request XML.
|
|
65
|
+
# Currently Azure is throwing Internal Server Error when executing the
|
|
66
|
+
# API
|
|
67
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
|
68
|
+
xml.FirewallRule('xmlns'=>'http://schemas.microsoft.com/sqlazure/2010/12/',
|
|
69
|
+
'xmlns:xsi'=>'http://www.w3.org/2001/XMLSchema-instance',
|
|
70
|
+
'xsi:schemaLocation'=>'http://schemas.microsoft.com/sqlazure/2010/12/ FirewallRule.xsd') {
|
|
71
|
+
xml.StartIpAddress options[:start_ip_address]
|
|
72
|
+
xml.EndIpAddress options[:end_ip_address]
|
|
73
|
+
}
|
|
74
|
+
end
|
|
75
|
+
builder.doc.to_xml
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.database_firewall_from_xml(response_xml)
|
|
79
|
+
firewalls = []
|
|
80
|
+
if Azure.config.sql_database_authentication_mode == :sql_server
|
|
81
|
+
database_firewallXML = response_xml.css('FirewallRules FirewallRule')
|
|
82
|
+
database_firewallXML.each do |firewall_xml|
|
|
83
|
+
firewall = {
|
|
84
|
+
:rule => xml_content(firewall_xml, 'Name'),
|
|
85
|
+
:start_ip_address => xml_content(firewall_xml, 'StartIpAddress'),
|
|
86
|
+
:end_ip_address => xml_content(firewall_xml, 'EndIpAddress')
|
|
87
|
+
}
|
|
88
|
+
firewalls << firewall
|
|
89
|
+
end
|
|
90
|
+
else
|
|
91
|
+
service_resources = response_xml.css(
|
|
92
|
+
'ServiceResources ServiceResource'
|
|
93
|
+
)
|
|
94
|
+
service_resources.each do |resource|
|
|
95
|
+
type = xml_content(resource, 'Type')
|
|
96
|
+
if type == 'Microsoft.SqlAzure.FirewallRule'
|
|
97
|
+
firewall = {
|
|
98
|
+
rule: xml_content(resource, 'Name'),
|
|
99
|
+
start_ip_address: xml_content(resource, 'StartIPAddress'),
|
|
100
|
+
end_ip_address: xml_content(resource, 'EndIPAddress')
|
|
101
|
+
}
|
|
102
|
+
firewalls << firewall
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
firewalls.compact
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
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
|
+
module Azure
|
|
16
|
+
module SqlDatabaseManagement
|
|
17
|
+
class SqlDatabase
|
|
18
|
+
|
|
19
|
+
def initialize
|
|
20
|
+
yield self if block_given?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_accessor :name
|
|
24
|
+
attr_accessor :administrator_login
|
|
25
|
+
attr_accessor :location
|
|
26
|
+
attr_accessor :feature_name
|
|
27
|
+
attr_accessor :feature_value
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,200 @@
|
|
|
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/sql_database_management/serialization'
|
|
16
|
+
|
|
17
|
+
module Azure
|
|
18
|
+
module SqlDatabaseManagement
|
|
19
|
+
class SqlDatabaseManagementService < BaseManagementService
|
|
20
|
+
|
|
21
|
+
def initialize
|
|
22
|
+
super()
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Public: Gets a list of database servers available under the
|
|
26
|
+
# current subscription.
|
|
27
|
+
#
|
|
28
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715269.aspx
|
|
29
|
+
#
|
|
30
|
+
# Returns an array of Azure::SqlDatabaseManagement::SqlDatabase objects
|
|
31
|
+
def list_servers
|
|
32
|
+
request_path = '/servers'
|
|
33
|
+
request = SqlManagementHttpRequest.new(:get, request_path, nil)
|
|
34
|
+
response = request.call
|
|
35
|
+
Serialization.databases_from_xml(response)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Public: Create a new database server in Windows Azure.
|
|
39
|
+
#
|
|
40
|
+
# ==== Attributes
|
|
41
|
+
#
|
|
42
|
+
# * +login+ - String. The administrator login name.
|
|
43
|
+
# * +password+ - String. The administrator login password.
|
|
44
|
+
# * +:location+ - String. The location where the database server will be created.
|
|
45
|
+
#
|
|
46
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715274.aspx
|
|
47
|
+
#
|
|
48
|
+
# Returns Azure::SqlDatabaseManagement::SqlDatabase object
|
|
49
|
+
def create_server(login, password, location)
|
|
50
|
+
body = Serialization.database_to_xml(login, password, location)
|
|
51
|
+
request_path = '/servers'
|
|
52
|
+
request = SqlManagementHttpRequest.new(:post, request_path, body)
|
|
53
|
+
response = request.call
|
|
54
|
+
sql_server = Serialization.server_name_from_xml(response, login, location)
|
|
55
|
+
Loggerx.info "SQL database server #{sql_server.name} is created." if sql_server
|
|
56
|
+
sql_server
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Public: Deletes the specified database server of given
|
|
60
|
+
# subscription id from Windows Azure.
|
|
61
|
+
#
|
|
62
|
+
# ==== Attributes
|
|
63
|
+
#
|
|
64
|
+
# * +name+ - String. Database server name.
|
|
65
|
+
#
|
|
66
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715285.aspx
|
|
67
|
+
#
|
|
68
|
+
# Returns: None
|
|
69
|
+
def delete_server(name)
|
|
70
|
+
if get_sql_server(name)
|
|
71
|
+
request_path = "/servers/#{name}"
|
|
72
|
+
request = SqlManagementHttpRequest.new(:delete, request_path)
|
|
73
|
+
request.call
|
|
74
|
+
Loggerx.info "Deleted database server #{name}."
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Public: Sets the administrative password of a SQL Database server
|
|
79
|
+
# for a subscription.
|
|
80
|
+
#
|
|
81
|
+
# ==== Attributes
|
|
82
|
+
#
|
|
83
|
+
# * +name+ - String. Database server name.
|
|
84
|
+
# * +password+ - String. Database server new password.
|
|
85
|
+
#
|
|
86
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715272.aspx
|
|
87
|
+
#
|
|
88
|
+
# Returns: None
|
|
89
|
+
def reset_password(name, password)
|
|
90
|
+
if get_sql_server(name)
|
|
91
|
+
body = Serialization.reset_password_to_xml(password)
|
|
92
|
+
request_path = "/servers/#{name}?op=ResetPassword"
|
|
93
|
+
request = SqlManagementHttpRequest.new(:post, request_path, body)
|
|
94
|
+
request.call
|
|
95
|
+
Loggerx.info "Password for server #{name} changed successfully."
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Public: The Set Server Firewall Rule operation for the given
|
|
100
|
+
# subscription adds a new server-level firewall or updates an
|
|
101
|
+
# existing server-level firewall rule for a SQL Database server.
|
|
102
|
+
#
|
|
103
|
+
# ==== Attributes
|
|
104
|
+
#
|
|
105
|
+
# * +server_name+ - String. Database server name.
|
|
106
|
+
# * +rule_name+ - String. Database server new password.
|
|
107
|
+
#
|
|
108
|
+
# ==== Options
|
|
109
|
+
#
|
|
110
|
+
# Accepted key/value pairs are:
|
|
111
|
+
# * +:start_ip_address+ - String. Start of the IP Range
|
|
112
|
+
# * +:end_ip_address+ - String. End of the IP Range
|
|
113
|
+
#
|
|
114
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715280.aspx
|
|
115
|
+
#
|
|
116
|
+
# Returns: None
|
|
117
|
+
def set_sql_server_firewall_rule(server_name, rule_name, options = {})
|
|
118
|
+
unless server_name.class == String && rule_name.class == String
|
|
119
|
+
raise "Missing parameter server_name or rule_name."
|
|
120
|
+
end
|
|
121
|
+
if get_sql_server(server_name)
|
|
122
|
+
if options[:start_ip_address] || options[:end_ip_address]
|
|
123
|
+
body = Serialization.firewall_rule_to_xml(options)
|
|
124
|
+
request_path = "/servers/#{server_name}/firewallrules/#{rule_name}"
|
|
125
|
+
method = :put
|
|
126
|
+
else
|
|
127
|
+
request_path = "/servers/#{server_name}/firewallrules/#{rule_name}?op=AutoDetectClientIP"
|
|
128
|
+
method = :post
|
|
129
|
+
end
|
|
130
|
+
request = SqlManagementHttpRequest.new(method, request_path, body)
|
|
131
|
+
request.headers['x-ms-version'] = '1.0'
|
|
132
|
+
request.uri = URI.parse(Azure.config.sql_database_management_endpoint + Azure.config.subscription_id + request_path)
|
|
133
|
+
# Management certificate authentication Endpoint throws errors for this operation. Need to re-visit
|
|
134
|
+
# this once the Azure API is working.
|
|
135
|
+
|
|
136
|
+
request.call
|
|
137
|
+
Loggerx.info "Added server-level firewall rule #{rule_name}."
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Public: Gets a list of server-level firewall rules set for
|
|
142
|
+
# SQL database server.
|
|
143
|
+
#
|
|
144
|
+
# ==== Attributes
|
|
145
|
+
#
|
|
146
|
+
# * +server_name+ - String. Database server name.
|
|
147
|
+
#
|
|
148
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715278.aspx
|
|
149
|
+
#
|
|
150
|
+
# Returns an array of firewall
|
|
151
|
+
def list_sql_server_firewall_rules(server_name)
|
|
152
|
+
if get_sql_server(server_name)
|
|
153
|
+
request_path = "/servers/#{server_name}/firewallrules"
|
|
154
|
+
request = SqlManagementHttpRequest.new(:get, request_path)
|
|
155
|
+
response = request.call
|
|
156
|
+
Serialization.database_firewall_from_xml(response)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Public: Deletes a server-level firewall rule from a SQL Database server.
|
|
161
|
+
#
|
|
162
|
+
# ==== Attributes
|
|
163
|
+
#
|
|
164
|
+
# * +name+ - String. SQL database server name.
|
|
165
|
+
# * +rule_name+ - String. SQL database server firewall rule name.
|
|
166
|
+
#
|
|
167
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg715277.aspx
|
|
168
|
+
#
|
|
169
|
+
# Returns: None
|
|
170
|
+
def delete_sql_server_firewall_rule(server_name, rule_name)
|
|
171
|
+
if !list_sql_server_firewall_rules(server_name).collect{|x| x[:rule]}.include?(rule_name)
|
|
172
|
+
error = "The specified firewall rule #{rule_name} does not exist."
|
|
173
|
+
raise error
|
|
174
|
+
elsif get_sql_server(server_name)
|
|
175
|
+
request_path = "/servers/#{server_name}/firewallrules/#{rule_name}"
|
|
176
|
+
request = SqlManagementHttpRequest.new(:delete, request_path)
|
|
177
|
+
request.call
|
|
178
|
+
Loggerx.info "Deleted server-level firewall rule #{rule_name}."
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
private
|
|
183
|
+
|
|
184
|
+
def get_sql_server(server_name)
|
|
185
|
+
if server_name.empty?
|
|
186
|
+
error = Azure::Error::Error.new("DatabaseServerNotFound", 40645, "Servername cannot be empty or null.")
|
|
187
|
+
else
|
|
188
|
+
sql_server = list_servers.collect(&:name).include?(server_name)
|
|
189
|
+
if sql_server
|
|
190
|
+
return sql_server
|
|
191
|
+
else
|
|
192
|
+
error = Azure::Error::Error.new("DatabaseServerNotFound", 40647, "Subscription #{Azure.config.subscription_id} does not have server #{server_name}.")
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
raise error if error
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
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/storage_management/storage_account'
|
|
17
|
+
|
|
18
|
+
module Azure
|
|
19
|
+
module StorageManagement
|
|
20
|
+
# Storage management serialization module is responsible for converting
|
|
21
|
+
# the objects to XML and vice versa.
|
|
22
|
+
module Serialization
|
|
23
|
+
def self.storage_services_to_xml(name, options = {})
|
|
24
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
|
25
|
+
xml.CreateStorageServiceInput(
|
|
26
|
+
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
|
27
|
+
) do
|
|
28
|
+
xml.ServiceName(name)
|
|
29
|
+
label = options[:label] || name
|
|
30
|
+
xml.Label(Base64.encode64(label))
|
|
31
|
+
xml.Description options[:description]\
|
|
32
|
+
|| 'Explicitly created storage service'
|
|
33
|
+
unless options[:affinity_group_name].nil?
|
|
34
|
+
xml.AffinityGroup options[:affinity_group_name]
|
|
35
|
+
else
|
|
36
|
+
xml.Location options[:location]
|
|
37
|
+
end
|
|
38
|
+
add_options_to_xml(xml, options)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
builder.doc.to_xml
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.storage_services_from_xml(storage_xml)
|
|
45
|
+
storage_accounts = []
|
|
46
|
+
storage_services_xml = storage_xml.css('StorageService')
|
|
47
|
+
storage_services_xml.each do |storage_service_xml|
|
|
48
|
+
storage_account = StorageAccount.new
|
|
49
|
+
|
|
50
|
+
storage_account.url = xml_content(storage_service_xml, 'Url')
|
|
51
|
+
storage_account.name = xml_content(
|
|
52
|
+
storage_service_xml, 'ServiceName'
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
storage_service_properties = storage_service_xml.css(
|
|
56
|
+
'StorageServiceProperties'
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
storage_account.description = xml_content(
|
|
60
|
+
storage_service_properties, 'Description'
|
|
61
|
+
)
|
|
62
|
+
storage_account.affinity_group = xml_content(
|
|
63
|
+
storage_service_properties, 'AffinityGroup'
|
|
64
|
+
)
|
|
65
|
+
storage_account.location = xml_content(
|
|
66
|
+
storage_service_properties, 'Location'
|
|
67
|
+
)
|
|
68
|
+
storage_account.label = Base64.decode64(
|
|
69
|
+
xml_content(storage_service_properties, 'Label')
|
|
70
|
+
)
|
|
71
|
+
storage_account.status = xml_content(
|
|
72
|
+
storage_service_properties, 'Status'
|
|
73
|
+
)
|
|
74
|
+
storage_account.endpoints = storage_service_properties.css(
|
|
75
|
+
'Endpoints Endpoint'
|
|
76
|
+
).map { |endpoint| endpoint.content }
|
|
77
|
+
storage_account.geo_replication_enabled = xml_content(
|
|
78
|
+
storage_service_properties, 'GeoReplicationEnabled'
|
|
79
|
+
)
|
|
80
|
+
storage_account.geo_primary_region = xml_content(
|
|
81
|
+
storage_service_properties, 'GeoPrimaryRegion'
|
|
82
|
+
)
|
|
83
|
+
storage_account.status_of_primary = xml_content(
|
|
84
|
+
storage_service_properties, 'StatusOfPrimary'
|
|
85
|
+
)
|
|
86
|
+
storage_account.last_geo_failover_time = xml_content(
|
|
87
|
+
storage_service_properties, 'LastGeoFailoverTime'
|
|
88
|
+
)
|
|
89
|
+
storage_account.geo_secondary_region = xml_content(
|
|
90
|
+
storage_service_properties, 'GeoSecondaryRegion'
|
|
91
|
+
)
|
|
92
|
+
storage_account.status_of_secondary = xml_content(
|
|
93
|
+
storage_service_properties, 'StatusOfSecondary'
|
|
94
|
+
)
|
|
95
|
+
storage_account.creation_time = xml_content(
|
|
96
|
+
storage_service_properties, 'CreationTime'
|
|
97
|
+
)
|
|
98
|
+
storage_account.extended_properties = storage_service_xml.css(
|
|
99
|
+
'ExtendedProperties ExtendedProperty'
|
|
100
|
+
).map do |prop|
|
|
101
|
+
{
|
|
102
|
+
name: xml_content(prop, 'Name'),
|
|
103
|
+
value: xml_content(prop, 'Value')
|
|
104
|
+
}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
storage_accounts << storage_account
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
storage_accounts.compact
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def self.storage_update_to_xml(options)
|
|
114
|
+
# Cannot update if options is nil or empty
|
|
115
|
+
fail 'No options specified' if options.nil? || options.empty?
|
|
116
|
+
|
|
117
|
+
# Either one of Label, or Description is required.
|
|
118
|
+
if (options[:label].nil? || options[:label].empty?) &&
|
|
119
|
+
(options[:description].nil? || options[:description].empty?)
|
|
120
|
+
fail 'Either one of Label or Description'\
|
|
121
|
+
' has to be provided. Both cannot be empty'
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# The input param may not be nil or empty, but the values inside may
|
|
125
|
+
# be. Check if atleast one value exists before proceeding.
|
|
126
|
+
is_empty = true
|
|
127
|
+
options.each do |option, value|
|
|
128
|
+
case option
|
|
129
|
+
when :description, :label
|
|
130
|
+
is_empty = value.nil? || value.empty?
|
|
131
|
+
when :geo_replication_enabled
|
|
132
|
+
is_empty = !(value.kind_of?(TrueClass)\
|
|
133
|
+
|| value.kind_of?(FalseClass))
|
|
134
|
+
when :extended_properties
|
|
135
|
+
value.each do |p, v|
|
|
136
|
+
is_empty = ((p.nil? || p.empty?) || (v.nil? || v.empty?))
|
|
137
|
+
break unless is_empty
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
break unless is_empty
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Raise a RuntimeError if no options were provided
|
|
145
|
+
fail 'No Options Specified' if is_empty
|
|
146
|
+
|
|
147
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
|
148
|
+
xml.UpdateStorageServiceInput(
|
|
149
|
+
'xmlns' => 'http://schemas.microsoft.com/windowsazure'
|
|
150
|
+
) do
|
|
151
|
+
# Check if label is nil. Use description only if label is nil
|
|
152
|
+
if options[:label].nil? || options[:label].empty?
|
|
153
|
+
desc = options[:description]
|
|
154
|
+
xml.Description(desc) unless desc.nil? || desc.empty?
|
|
155
|
+
else
|
|
156
|
+
label = Base64.encode64(options[:label])
|
|
157
|
+
xml.Label(label) unless label.nil? || label.empty?
|
|
158
|
+
end
|
|
159
|
+
add_options_to_xml(xml, options)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
builder.to_xml
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def self.add_options_to_xml(xml, options = {})
|
|
166
|
+
gre = options[:geo_replication_enabled]
|
|
167
|
+
xml.GeoReplicationEnabled(
|
|
168
|
+
gre
|
|
169
|
+
) unless gre.nil?\
|
|
170
|
+
|| !(gre.kind_of?(TrueClass) || gre.kind_of?(FalseClass))
|
|
171
|
+
xml.ExtendedProperties do
|
|
172
|
+
options[:extended_properties].each do |name, value|
|
|
173
|
+
xml.ExtendedProperty do
|
|
174
|
+
xml.Name name
|
|
175
|
+
xml.Value value
|
|
176
|
+
end unless (name.nil? || name.empty?)\
|
|
177
|
+
|| (value.nil? || value.empty?)
|
|
178
|
+
end
|
|
179
|
+
end unless options[:extended_properties].nil?\
|
|
180
|
+
|| options[:extended_properties].empty?
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|