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,184 +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
|
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
|
@@ -1,40 +1,40 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
module Azure
|
16
|
-
module StorageManagement
|
17
|
-
# Represents a Windows Azure storage account
|
18
|
-
class StorageAccount
|
19
|
-
def initialize
|
20
|
-
yield self if block_given?
|
21
|
-
end
|
22
|
-
attr_accessor :url
|
23
|
-
attr_accessor :name
|
24
|
-
attr_accessor :description
|
25
|
-
attr_accessor :location
|
26
|
-
attr_accessor :affinity_group
|
27
|
-
attr_accessor :label
|
28
|
-
attr_accessor :status
|
29
|
-
attr_accessor :endpoints
|
30
|
-
attr_accessor :geo_replication_enabled
|
31
|
-
attr_accessor :geo_primary_region
|
32
|
-
attr_accessor :status_of_primary
|
33
|
-
attr_accessor :last_geo_failover_time
|
34
|
-
attr_accessor :geo_secondary_region
|
35
|
-
attr_accessor :status_of_secondary
|
36
|
-
attr_accessor :creation_time
|
37
|
-
attr_accessor :extended_properties
|
38
|
-
end
|
39
|
-
end
|
40
|
-
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
|
+
module Azure
|
16
|
+
module StorageManagement
|
17
|
+
# Represents a Windows Azure storage account
|
18
|
+
class StorageAccount
|
19
|
+
def initialize
|
20
|
+
yield self if block_given?
|
21
|
+
end
|
22
|
+
attr_accessor :url
|
23
|
+
attr_accessor :name
|
24
|
+
attr_accessor :description
|
25
|
+
attr_accessor :location
|
26
|
+
attr_accessor :affinity_group
|
27
|
+
attr_accessor :label
|
28
|
+
attr_accessor :status
|
29
|
+
attr_accessor :endpoints
|
30
|
+
attr_accessor :geo_replication_enabled
|
31
|
+
attr_accessor :geo_primary_region
|
32
|
+
attr_accessor :status_of_primary
|
33
|
+
attr_accessor :last_geo_failover_time
|
34
|
+
attr_accessor :geo_secondary_region
|
35
|
+
attr_accessor :status_of_secondary
|
36
|
+
attr_accessor :creation_time
|
37
|
+
attr_accessor :extended_properties
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,166 +1,166 @@
|
|
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/storage_management/serialization'
|
16
|
-
|
17
|
-
module Azure
|
18
|
-
module StorageManagement
|
19
|
-
# Provides Storage Management API
|
20
|
-
class StorageManagementService < BaseManagementService
|
21
|
-
def initialize
|
22
|
-
super()
|
23
|
-
end
|
24
|
-
# Public: Gets a list of storage accounts available under the
|
25
|
-
# current subscription.
|
26
|
-
#
|
27
|
-
# Returns an array of Azure::StorageManagement::StorageAccount objects
|
28
|
-
def list_storage_accounts
|
29
|
-
request_path = '/services/storageservices'
|
30
|
-
request = ManagementHttpRequest.new(:get, request_path, nil)
|
31
|
-
response = request.call
|
32
|
-
Serialization.storage_services_from_xml(response)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Public: Checks to see if the specified storage account is available
|
36
|
-
#
|
37
|
-
# ==== Attributes
|
38
|
-
#
|
39
|
-
# * +name+ - String. Storage account name.
|
40
|
-
#
|
41
|
-
# Returns: A boolean value indicating whether the storage account exists.
|
42
|
-
# If true, the storage account exists. If false, the storage account
|
43
|
-
# does not exist.
|
44
|
-
def get_storage_account(name)
|
45
|
-
return false if name.nil?
|
46
|
-
flag = false
|
47
|
-
storage_accounts = list_storage_accounts
|
48
|
-
storage_accounts.each do |storage|
|
49
|
-
if storage.name == name
|
50
|
-
flag = true
|
51
|
-
break
|
52
|
-
end
|
53
|
-
end
|
54
|
-
flag
|
55
|
-
end
|
56
|
-
|
57
|
-
# Public: Gets the properties of the storage account specified.
|
58
|
-
#
|
59
|
-
# ==== Attributes
|
60
|
-
#
|
61
|
-
# * +name+ - String. The name of the storage account. Required.
|
62
|
-
#
|
63
|
-
# See http://msdn.microsoft.com/en-us/library/windowsazure/ee460802.aspx
|
64
|
-
#
|
65
|
-
# Returns the storage account
|
66
|
-
def get_storage_account_properties(name)
|
67
|
-
request_path = "/services/storageservices/#{name}"
|
68
|
-
request = ManagementHttpRequest.new(:get, request_path, nil)
|
69
|
-
response = request.call
|
70
|
-
Serialization.storage_services_from_xml(response).first
|
71
|
-
end
|
72
|
-
|
73
|
-
# Public: Create a new storage account in Windows Azure.
|
74
|
-
#
|
75
|
-
# ==== Attributes
|
76
|
-
#
|
77
|
-
# * +name+ - String. The name of the storage service.
|
78
|
-
# * +options+ - Hash. Optional parameters.
|
79
|
-
#
|
80
|
-
# ==== Options
|
81
|
-
#
|
82
|
-
# Accepted key/value pairs in options parameter are:
|
83
|
-
# * +:label+ - String. The label for this storage account. The name will
|
84
|
-
# be used as label if none specified. (optional)
|
85
|
-
# * +:location+ - String. The location where the storage
|
86
|
-
# service will be created. Reqruied if no affinity_group_name specified.
|
87
|
-
# * +:description+ - String. A description for the storage
|
88
|
-
# service. (optional)
|
89
|
-
# * +:affinity_group_name+ - String. The name of an existing affinity group
|
90
|
-
# in the specified subscription. Required if no location specified.
|
91
|
-
# * +:geo_replication_enabled+ - String. A flag indicating wheter to
|
92
|
-
# turn Geo replication on or off. Values other than 'true'/'false'
|
93
|
-
# will result in an error from the REST API. (optional)
|
94
|
-
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
95
|
-
# properties to add to the storage account. The key is used as the
|
96
|
-
# property name and the value as its value. (optional)
|
97
|
-
#
|
98
|
-
# Returns None
|
99
|
-
def create_storage_account(name, options = {})
|
100
|
-
raise 'Name not specified' if !name || name.class != String || name.empty?
|
101
|
-
if get_storage_account(name)
|
102
|
-
Loggerx.warn "Storage Account #{name} already exists. Skipped..."
|
103
|
-
else
|
104
|
-
Loggerx.info "Creating Storage Account #{name}."
|
105
|
-
body = Serialization.storage_services_to_xml(name, options)
|
106
|
-
request_path = '/services/storageservices'
|
107
|
-
request = ManagementHttpRequest.new(:post, request_path, body)
|
108
|
-
request.call
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
# Public: Updates an existing storage account in Windows Azure
|
113
|
-
#
|
114
|
-
# ==== Attributes
|
115
|
-
#
|
116
|
-
# * +name+ - String. The name of the storage service.
|
117
|
-
# * +options+ - Hash. Optional parameters.
|
118
|
-
#
|
119
|
-
# ==== Options
|
120
|
-
#
|
121
|
-
# Accepted key/value pairs in options parameter are:
|
122
|
-
# * +:label+ - String. A label for the storage service. Required if no
|
123
|
-
# description is provided. If both label and description are
|
124
|
-
# provided, only the label will get updated.
|
125
|
-
# * +:description+ - String. A description for the storage service.
|
126
|
-
# Required if no label is provided. If both label and description are
|
127
|
-
# provided, only the label will get updated.
|
128
|
-
# * +:geo_replication_enabled+ - Boolean (TrueClass/FalseClass). Boolean
|
129
|
-
# flag indicating wheter to turn Geo replication on or off. (optional)
|
130
|
-
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
131
|
-
# properties to add to the storage account. The key is used as the
|
132
|
-
# property name and the value as its value. (optional)
|
133
|
-
#
|
134
|
-
# Returns None
|
135
|
-
# Fails with RuntimeError if invalid options specified
|
136
|
-
def update_storage_account(name, options = {})
|
137
|
-
if get_storage_account name
|
138
|
-
Loggerx.info "Account '#{name}' exists, updating..."
|
139
|
-
body = Serialization.storage_update_to_xml options
|
140
|
-
request_path = "/services/storageservices/#{name}"
|
141
|
-
request = ManagementHttpRequest.new(:put, request_path, body)
|
142
|
-
request.call
|
143
|
-
else
|
144
|
-
Loggerx.warn "Storage Account '#{name}' does not exist. Skipped..."
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
# Public: Deletes the specified storage account of given subscription id
|
149
|
-
# from Windows Azure.
|
150
|
-
#
|
151
|
-
# ==== Attributes
|
152
|
-
#
|
153
|
-
# * +name+ - String. Storage account name.
|
154
|
-
#
|
155
|
-
# Returns: None
|
156
|
-
def delete_storage_account(name)
|
157
|
-
Loggerx.info "Deleting Storage Account #{name}."
|
158
|
-
request_path = "/services/storageservices/#{name}"
|
159
|
-
request = ManagementHttpRequest.new(:delete, request_path)
|
160
|
-
request.call
|
161
|
-
rescue Exception => e
|
162
|
-
e.message
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
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/storage_management/serialization'
|
16
|
+
|
17
|
+
module Azure
|
18
|
+
module StorageManagement
|
19
|
+
# Provides Storage Management API
|
20
|
+
class StorageManagementService < BaseManagementService
|
21
|
+
def initialize
|
22
|
+
super()
|
23
|
+
end
|
24
|
+
# Public: Gets a list of storage accounts available under the
|
25
|
+
# current subscription.
|
26
|
+
#
|
27
|
+
# Returns an array of Azure::StorageManagement::StorageAccount objects
|
28
|
+
def list_storage_accounts
|
29
|
+
request_path = '/services/storageservices'
|
30
|
+
request = ManagementHttpRequest.new(:get, request_path, nil)
|
31
|
+
response = request.call
|
32
|
+
Serialization.storage_services_from_xml(response)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Checks to see if the specified storage account is available
|
36
|
+
#
|
37
|
+
# ==== Attributes
|
38
|
+
#
|
39
|
+
# * +name+ - String. Storage account name.
|
40
|
+
#
|
41
|
+
# Returns: A boolean value indicating whether the storage account exists.
|
42
|
+
# If true, the storage account exists. If false, the storage account
|
43
|
+
# does not exist.
|
44
|
+
def get_storage_account(name)
|
45
|
+
return false if name.nil?
|
46
|
+
flag = false
|
47
|
+
storage_accounts = list_storage_accounts
|
48
|
+
storage_accounts.each do |storage|
|
49
|
+
if storage.name == name
|
50
|
+
flag = true
|
51
|
+
break
|
52
|
+
end
|
53
|
+
end
|
54
|
+
flag
|
55
|
+
end
|
56
|
+
|
57
|
+
# Public: Gets the properties of the storage account specified.
|
58
|
+
#
|
59
|
+
# ==== Attributes
|
60
|
+
#
|
61
|
+
# * +name+ - String. The name of the storage account. Required.
|
62
|
+
#
|
63
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/ee460802.aspx
|
64
|
+
#
|
65
|
+
# Returns the storage account
|
66
|
+
def get_storage_account_properties(name)
|
67
|
+
request_path = "/services/storageservices/#{name}"
|
68
|
+
request = ManagementHttpRequest.new(:get, request_path, nil)
|
69
|
+
response = request.call
|
70
|
+
Serialization.storage_services_from_xml(response).first
|
71
|
+
end
|
72
|
+
|
73
|
+
# Public: Create a new storage account in Windows Azure.
|
74
|
+
#
|
75
|
+
# ==== Attributes
|
76
|
+
#
|
77
|
+
# * +name+ - String. The name of the storage service.
|
78
|
+
# * +options+ - Hash. Optional parameters.
|
79
|
+
#
|
80
|
+
# ==== Options
|
81
|
+
#
|
82
|
+
# Accepted key/value pairs in options parameter are:
|
83
|
+
# * +:label+ - String. The label for this storage account. The name will
|
84
|
+
# be used as label if none specified. (optional)
|
85
|
+
# * +:location+ - String. The location where the storage
|
86
|
+
# service will be created. Reqruied if no affinity_group_name specified.
|
87
|
+
# * +:description+ - String. A description for the storage
|
88
|
+
# service. (optional)
|
89
|
+
# * +:affinity_group_name+ - String. The name of an existing affinity group
|
90
|
+
# in the specified subscription. Required if no location specified.
|
91
|
+
# * +:geo_replication_enabled+ - String. A flag indicating wheter to
|
92
|
+
# turn Geo replication on or off. Values other than 'true'/'false'
|
93
|
+
# will result in an error from the REST API. (optional)
|
94
|
+
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
95
|
+
# properties to add to the storage account. The key is used as the
|
96
|
+
# property name and the value as its value. (optional)
|
97
|
+
#
|
98
|
+
# Returns None
|
99
|
+
def create_storage_account(name, options = {})
|
100
|
+
raise 'Name not specified' if !name || name.class != String || name.empty?
|
101
|
+
if get_storage_account(name)
|
102
|
+
Loggerx.warn "Storage Account #{name} already exists. Skipped..."
|
103
|
+
else
|
104
|
+
Loggerx.info "Creating Storage Account #{name}."
|
105
|
+
body = Serialization.storage_services_to_xml(name, options)
|
106
|
+
request_path = '/services/storageservices'
|
107
|
+
request = ManagementHttpRequest.new(:post, request_path, body)
|
108
|
+
request.call
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Public: Updates an existing storage account in Windows Azure
|
113
|
+
#
|
114
|
+
# ==== Attributes
|
115
|
+
#
|
116
|
+
# * +name+ - String. The name of the storage service.
|
117
|
+
# * +options+ - Hash. Optional parameters.
|
118
|
+
#
|
119
|
+
# ==== Options
|
120
|
+
#
|
121
|
+
# Accepted key/value pairs in options parameter are:
|
122
|
+
# * +:label+ - String. A label for the storage service. Required if no
|
123
|
+
# description is provided. If both label and description are
|
124
|
+
# provided, only the label will get updated.
|
125
|
+
# * +:description+ - String. A description for the storage service.
|
126
|
+
# Required if no label is provided. If both label and description are
|
127
|
+
# provided, only the label will get updated.
|
128
|
+
# * +:geo_replication_enabled+ - Boolean (TrueClass/FalseClass). Boolean
|
129
|
+
# flag indicating wheter to turn Geo replication on or off. (optional)
|
130
|
+
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
131
|
+
# properties to add to the storage account. The key is used as the
|
132
|
+
# property name and the value as its value. (optional)
|
133
|
+
#
|
134
|
+
# Returns None
|
135
|
+
# Fails with RuntimeError if invalid options specified
|
136
|
+
def update_storage_account(name, options = {})
|
137
|
+
if get_storage_account name
|
138
|
+
Loggerx.info "Account '#{name}' exists, updating..."
|
139
|
+
body = Serialization.storage_update_to_xml options
|
140
|
+
request_path = "/services/storageservices/#{name}"
|
141
|
+
request = ManagementHttpRequest.new(:put, request_path, body)
|
142
|
+
request.call
|
143
|
+
else
|
144
|
+
Loggerx.warn "Storage Account '#{name}' does not exist. Skipped..."
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# Public: Deletes the specified storage account of given subscription id
|
149
|
+
# from Windows Azure.
|
150
|
+
#
|
151
|
+
# ==== Attributes
|
152
|
+
#
|
153
|
+
# * +name+ - String. Storage account name.
|
154
|
+
#
|
155
|
+
# Returns: None
|
156
|
+
def delete_storage_account(name)
|
157
|
+
Loggerx.info "Deleting Storage Account #{name}."
|
158
|
+
request_path = "/services/storageservices/#{name}"
|
159
|
+
request = ManagementHttpRequest.new(:delete, request_path)
|
160
|
+
request.call
|
161
|
+
rescue Exception => e
|
162
|
+
e.message
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|