azure-fix 0.7.0.pre3
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/.env_sample +13 -0
- data/.gitignore +30 -0
- data/.travis.yml +13 -0
- data/ChangeLog.txt +56 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +202 -0
- data/README.md +702 -0
- data/Rakefile +121 -0
- data/azure.gemspec +51 -0
- data/bin/pfxer +35 -0
- data/lib/azure.rb +147 -0
- data/lib/azure/base_management/affinity_group.rb +32 -0
- data/lib/azure/base_management/base_management_service.rb +220 -0
- data/lib/azure/base_management/location.rb +27 -0
- data/lib/azure/base_management/management_http_request.rb +172 -0
- data/lib/azure/base_management/serialization.rb +135 -0
- data/lib/azure/base_management/sql_management_http_request.rb +35 -0
- data/lib/azure/blob/auth/shared_access_signature.rb +147 -0
- data/lib/azure/blob/blob.rb +32 -0
- data/lib/azure/blob/blob_service.rb +1452 -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/client.rb +31 -0
- data/lib/azure/client_services.rb +98 -0
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +135 -0
- data/lib/azure/cloud_service_management/serialization.rb +118 -0
- data/lib/azure/configurable.rb +290 -0
- data/lib/azure/core/auth/authorizer.rb +36 -0
- data/lib/azure/core/auth/shared_key.rb +118 -0
- data/lib/azure/core/auth/shared_key_lite.rb +48 -0
- data/lib/azure/core/auth/signer.rb +51 -0
- data/lib/azure/core/error.rb +21 -0
- data/lib/azure/core/filtered_service.rb +45 -0
- data/lib/azure/core/http/debug_filter.rb +36 -0
- data/lib/azure/core/http/http_error.rb +86 -0
- data/lib/azure/core/http/http_filter.rb +53 -0
- data/lib/azure/core/http/http_request.rb +173 -0
- data/lib/azure/core/http/http_response.rb +96 -0
- data/lib/azure/core/http/retry_policy.rb +74 -0
- data/lib/azure/core/http/signer_filter.rb +33 -0
- data/lib/azure/core/service.rb +46 -0
- data/lib/azure/core/signed_service.rb +45 -0
- data/lib/azure/core/utility.rb +244 -0
- data/lib/azure/default.rb +126 -0
- data/lib/azure/http_client.rb +85 -0
- data/lib/azure/queue/message.rb +30 -0
- data/lib/azure/queue/queue.rb +28 -0
- data/lib/azure/queue/queue_service.rb +570 -0
- data/lib/azure/queue/serialization.rb +105 -0
- data/lib/azure/service/access_policy.rb +26 -0
- data/lib/azure/service/cors.rb +11 -0
- data/lib/azure/service/cors_rule.rb +15 -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 +299 -0
- data/lib/azure/service/signed_identifier.rb +30 -0
- data/lib/azure/service/storage_service.rb +86 -0
- data/lib/azure/service/storage_service_properties.rb +37 -0
- data/lib/azure/service_bus/action.rb +21 -0
- data/lib/azure/service_bus/auth/shared_access_signer.rb +44 -0
- data/lib/azure/service_bus/auth/wrap_service.rb +90 -0
- data/lib/azure/service_bus/auth/wrap_signer.rb +77 -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/relay.rb +88 -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 +161 -0
- data/lib/azure/service_bus/service_bus_service.rb +899 -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/errors.rb +11 -0
- data/lib/azure/sql_database_management/firewall_rule.rb +30 -0
- data/lib/azure/sql_database_management/serialization.rb +99 -0
- data/lib/azure/sql_database_management/sql_database_management_service.rb +211 -0
- data/lib/azure/sql_database_management/sql_server.rb +32 -0
- data/lib/azure/storage_management/serialization.rb +204 -0
- data/lib/azure/storage_management/storage_account.rb +48 -0
- data/lib/azure/storage_management/storage_management_service.rb +207 -0
- data/lib/azure/table/auth/shared_key.rb +59 -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 +563 -0
- data/lib/azure/version.rb +31 -0
- data/lib/azure/virtual_machine_image_management/serialization.rb +70 -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 +83 -0
- data/lib/azure/virtual_machine_management/serialization.rb +459 -0
- data/lib/azure/virtual_machine_management/virtual_machine.rb +44 -0
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +552 -0
- data/lib/azure/virtual_network_management/serialization.rb +193 -0
- data/lib/azure/virtual_network_management/virtual_network.rb +37 -0
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +108 -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/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_storage_account_error.xml +5 -0
- data/test/fixtures/get_storage_account_properties.xml +34 -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_locations.xml +212 -0
- data/test/fixtures/list_os_images.xml +110 -0
- data/test/fixtures/list_page_ranges.xml +11 -0
- data/test/fixtures/list_sql_database.xml +24 -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 +48 -0
- data/test/fixtures/list_virtual_networks.xml +92 -0
- data/test/fixtures/list_vm_images.xml +21 -0
- data/test/fixtures/logging.xml +11 -0
- data/test/fixtures/management_certificate.pfx +0 -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_relay_response.xml +15 -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_keys.xml +8 -0
- data/test/fixtures/storage_service_properties.xml +55 -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 +55 -0
- data/test/fixtures/virtual_machine.xml +116 -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 +64 -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 +87 -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 +55 -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 +45 -0
- data/test/integration/cloud_service/Cloud_Delete_test.rb +45 -0
- data/test/integration/database/create_sql_server_firewall_test.rb +81 -0
- data/test/integration/database/create_sql_server_test.rb +53 -0
- data/test/integration/database/delete_sql_server_firewall_test.rb +64 -0
- data/test/integration/database/delete_sql_server_test.rb +45 -0
- data/test/integration/database/list_sql_server_firewall_test.rb +44 -0
- data/test/integration/database/list_sql_servers_test.rb +44 -0
- data/test/integration/database/reset_password_sql_server_test.rb +53 -0
- data/test/integration/location/Location_List_test.rb +39 -0
- data/test/integration/location/RoleSize_List_test.rb +35 -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 +43 -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/relay_test.rb +132 -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 +185 -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 +196 -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 +40 -0
- data/test/integration/vm/VM_Create_test.rb +262 -0
- data/test/integration/vm/VM_Delete_test.rb +53 -0
- data/test/integration/vm/VM_Operations_test.rb +172 -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 +116 -0
- data/test/integration/vnet/Virtual_Network_list_test.rb +48 -0
- data/test/support/env.rb +19 -0
- data/test/support/fixtures.rb +36 -0
- data/test/support/name_generator.rb +168 -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 +47 -0
- data/test/unit/affinity_group/affinity_group_test.rb +189 -0
- data/test/unit/affinity_group/serialization_test.rb +87 -0
- data/test/unit/base_management/base_management_service_test.rb +19 -0
- data/test/unit/base_management/location_test.rb +56 -0
- data/test/unit/base_management/role_size_test.rb +50 -0
- data/test/unit/blob/auth/shared_access_signature_test.rb +71 -0
- data/test/unit/blob/blob_service_test.rb +1970 -0
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -0
- data/test/unit/cloud_service_management/serialization_test.rb +169 -0
- data/test/unit/config/azure_test.rb +112 -0
- data/test/unit/config/client_test.rb +37 -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 +61 -0
- data/test/unit/core/http/http_request_test.rb +138 -0
- data/test/unit/core/http/http_response_test.rb +20 -0
- data/test/unit/core/http/retry_policy_test.rb +23 -0
- data/test/unit/core/utility_test.rb +122 -0
- data/test/unit/database/serialization_test.rb +94 -0
- data/test/unit/database/sql_database_server_service_test.rb +341 -0
- data/test/unit/http_client_test.rb +74 -0
- data/test/unit/service/serialization_test.rb +533 -0
- data/test/unit/service/storage_service_test.rb +297 -0
- data/test/unit/storage_management/serialization_test.rb +244 -0
- data/test/unit/storage_management/storage_management_service_test.rb +247 -0
- data/test/unit/table/edmtype_test.rb +108 -0
- data/test/unit/virtual_machine_image_management/serialization_test.rb +50 -0
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +114 -0
- data/test/unit/virtual_machine_management/serialization_test.rb +316 -0
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +480 -0
- data/test/unit/vnet/serialization_test.rb +187 -0
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
- metadata +579 -0
|
@@ -0,0 +1,48 @@
|
|
|
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 Microsoft 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
|
+
attr_accessor :account_type
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Represents Windows Azure storage account keys
|
|
42
|
+
class StorageAccountKeys
|
|
43
|
+
attr_accessor :url
|
|
44
|
+
attr_accessor :primary_key
|
|
45
|
+
attr_accessor :secondary_key
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,207 @@
|
|
|
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 < BaseManagement::BaseManagementService
|
|
21
|
+
# Public: Gets a list of storage accounts available under the
|
|
22
|
+
# current subscription.
|
|
23
|
+
#
|
|
24
|
+
# Returns an array of Azure::StorageManagement::StorageAccount objects
|
|
25
|
+
def list_storage_accounts
|
|
26
|
+
request_path = '/services/storageservices'
|
|
27
|
+
request = client.management_request(:get, request_path)
|
|
28
|
+
response = request.call
|
|
29
|
+
Serialization.storage_services_from_xml(response)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Public: Checks to see if the specified storage account is available
|
|
33
|
+
#
|
|
34
|
+
# ==== Attributes
|
|
35
|
+
#
|
|
36
|
+
# * +name+ - String. Storage account name.
|
|
37
|
+
#
|
|
38
|
+
# Returns an Azure::StorageManagement::StorageAccount instance
|
|
39
|
+
def get_storage_account(name)
|
|
40
|
+
list_storage_accounts.select { |x| x.name.casecmp(name.to_s) == 0 }.first
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Public: Gets the properties of the storage account specified.
|
|
44
|
+
#
|
|
45
|
+
# ==== Attributes
|
|
46
|
+
#
|
|
47
|
+
# * +name+ - String. The name of the storage account. Required.
|
|
48
|
+
#
|
|
49
|
+
# See http://msdn.microsoft.com/en-us/library/azure/ee460802.aspx
|
|
50
|
+
#
|
|
51
|
+
# Returns the storage account
|
|
52
|
+
def get_storage_account_properties(name)
|
|
53
|
+
request_path = "/services/storageservices/#{name}"
|
|
54
|
+
request = client.management_request(:get, request_path)
|
|
55
|
+
response = request.call
|
|
56
|
+
Serialization.storage_services_from_xml(response).first
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Public: Create a new storage account in Microsoft Azure.
|
|
60
|
+
#
|
|
61
|
+
# ==== Attributes
|
|
62
|
+
#
|
|
63
|
+
# * +name+ - String. The name of the storage service.
|
|
64
|
+
# * +options+ - Hash. Optional parameters.
|
|
65
|
+
#
|
|
66
|
+
# ==== Options
|
|
67
|
+
#
|
|
68
|
+
# Accepted key/value pairs in options parameter are:
|
|
69
|
+
# * +:label+ - String. The label for this storage account. The name will
|
|
70
|
+
# be used as label if none specified. (optional)
|
|
71
|
+
# * +:location+ - String. The location where the storage
|
|
72
|
+
# service will be created. Reqruied if no affinity_group_name specified.
|
|
73
|
+
# * +:description+ - String. A description for the storage
|
|
74
|
+
# service. (optional)
|
|
75
|
+
# * +:affinity_group_name+ - String. The name of an existing affinity group
|
|
76
|
+
# in the specified subscription. Required if no location specified.
|
|
77
|
+
# * +:geo_replication_enabled+ - String. A flag indicating wheter to
|
|
78
|
+
# turn Geo replication on or off. Values other than 'true'/'false'
|
|
79
|
+
# will result in an error from the REST API. (optional)
|
|
80
|
+
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
|
81
|
+
# properties to add to the storage account. The key is used as the
|
|
82
|
+
# property name and the value as its value. (optional)
|
|
83
|
+
# * +:account_type+ - String. Specifies the type of storage account
|
|
84
|
+
#
|
|
85
|
+
# See http://msdn.microsoft.com/en-us/library/azure/hh264518.aspx
|
|
86
|
+
#
|
|
87
|
+
# Returns None
|
|
88
|
+
def create_storage_account(name, options = {})
|
|
89
|
+
raise 'Name not specified' if !name || name.class != String || name.empty?
|
|
90
|
+
options[:account_type] ||= 'Standard_GRS'
|
|
91
|
+
if get_storage_account(name)
|
|
92
|
+
Azure::Loggerx.warn "Storage Account #{name} already exists. Skipped..."
|
|
93
|
+
else
|
|
94
|
+
Azure::Loggerx.info "Creating Storage Account #{name}."
|
|
95
|
+
body = Serialization.storage_services_to_xml(name, options)
|
|
96
|
+
request_path = '/services/storageservices'
|
|
97
|
+
request = client.management_request(:post, request_path, body: body)
|
|
98
|
+
request.call
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Public: Updates an existing storage account in Microsoft Azure
|
|
103
|
+
#
|
|
104
|
+
# ==== Attributes
|
|
105
|
+
#
|
|
106
|
+
# * +name+ - String. The name of the storage service.
|
|
107
|
+
# * +options+ - Hash. parameters.
|
|
108
|
+
#
|
|
109
|
+
# ==== Options
|
|
110
|
+
#
|
|
111
|
+
# Accepted key/value pairs in options parameter are:
|
|
112
|
+
# * +:label+ - String. A label for the storage service. Required if no
|
|
113
|
+
# description is provided. If both label and description are
|
|
114
|
+
# provided, only the label will get updated.
|
|
115
|
+
# * +:description+ - String. A description for the storage service.
|
|
116
|
+
# Required if no label is provided. If both label and description are
|
|
117
|
+
# provided, only the label will get updated.
|
|
118
|
+
# * +:geo_replication_enabled+ - Boolean (TrueClass/FalseClass). Boolean
|
|
119
|
+
# flag indicating whether to turn Geo replication on or off. (optional)
|
|
120
|
+
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
|
121
|
+
# properties to add to the storage account. The key is used as the
|
|
122
|
+
# property name and the value as its value. (optional)
|
|
123
|
+
# * +:account_type+ - String. Specifies the type of storage account
|
|
124
|
+
#
|
|
125
|
+
# See http://msdn.microsoft.com/en-us/library/azure/hh264516.aspx
|
|
126
|
+
#
|
|
127
|
+
# Returns None
|
|
128
|
+
# Fails with RuntimeError if invalid options specified
|
|
129
|
+
def update_storage_account(name, options)
|
|
130
|
+
if get_storage_account name
|
|
131
|
+
Azure::Loggerx.info "Account '#{name}' exists, updating..."
|
|
132
|
+
body = Serialization.storage_update_to_xml options
|
|
133
|
+
request_path = "/services/storageservices/#{name}"
|
|
134
|
+
request = client.management_request(:put, request_path, body)
|
|
135
|
+
request.call
|
|
136
|
+
else
|
|
137
|
+
Azure::Loggerx.warn "Storage Account '#{name}' does not exist. Skipped..."
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Public: Deletes the specified storage account of given subscription id
|
|
142
|
+
# from Microsoft Azure.
|
|
143
|
+
#
|
|
144
|
+
# ==== Attributes
|
|
145
|
+
#
|
|
146
|
+
# * +name+ - String. Storage account name.
|
|
147
|
+
#
|
|
148
|
+
# See http://msdn.microsoft.com/en-us/library/azure/hh264517.aspx
|
|
149
|
+
#
|
|
150
|
+
# Returns: None
|
|
151
|
+
def delete_storage_account(name)
|
|
152
|
+
Azure::Loggerx.info "Deleting Storage Account #{name}."
|
|
153
|
+
request_path = "/services/storageservices/#{name}"
|
|
154
|
+
request = client.management_request(:delete, request_path)
|
|
155
|
+
request.call
|
|
156
|
+
rescue => e
|
|
157
|
+
e.message
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Public: Regenerates the primary or secondary access key for the specified storage account
|
|
161
|
+
#
|
|
162
|
+
# ==== Attributes
|
|
163
|
+
#
|
|
164
|
+
# * +name+ - String. Storage account name.
|
|
165
|
+
# * +key_type+ - String. Specifies which key(primary or secondary) to regenerate
|
|
166
|
+
#
|
|
167
|
+
# Returns an Azure::StorageManagement::StorageAccountKeys instance.
|
|
168
|
+
#
|
|
169
|
+
# See:
|
|
170
|
+
# http://msdn.microsoft.com/en-us/library/azure/ee460795.aspx
|
|
171
|
+
def regenerate_storage_account_keys(name, key_type = 'primary')
|
|
172
|
+
if get_storage_account name
|
|
173
|
+
path = "/services/storageservices/#{name}/keys?action=regenerate"
|
|
174
|
+
body = Serialization.regenerate_storage_account_keys_to_xml key_type
|
|
175
|
+
request = client.management_request(:post, path, body)
|
|
176
|
+
response = request.call
|
|
177
|
+
Serialization.storage_account_keys_from_xml(response)
|
|
178
|
+
else
|
|
179
|
+
Azure::Loggerx.warn "Storage Account '#{name}' does not exist."
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Public: Gets the primary and secondary access keys for the specified storage account.
|
|
184
|
+
#
|
|
185
|
+
# ==== Attributes
|
|
186
|
+
#
|
|
187
|
+
# * +name+ - String. Storage account name.
|
|
188
|
+
#
|
|
189
|
+
# Returns an Azure::StorageManagement::StorageAccountKeys instance.
|
|
190
|
+
#
|
|
191
|
+
# See:
|
|
192
|
+
# http://msdn.microsoft.com/en-us/library/azure/ee460785.aspx
|
|
193
|
+
def get_storage_account_keys(name)
|
|
194
|
+
if get_storage_account name
|
|
195
|
+
path = "/services/storageservices/#{name}/keys"
|
|
196
|
+
request = client.management_request(:get, path)
|
|
197
|
+
response = request.call
|
|
198
|
+
Serialization.storage_account_keys_from_xml(response)
|
|
199
|
+
else
|
|
200
|
+
Azure::Loggerx.warn "Storage Account '#{name}' does not exist."
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
Azure::StorageManagementService = Azure::StorageManagement::StorageManagementService
|
|
@@ -0,0 +1,59 @@
|
|
|
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 'cgi'
|
|
16
|
+
require 'azure/core/auth/signer'
|
|
17
|
+
|
|
18
|
+
module Azure
|
|
19
|
+
module Table
|
|
20
|
+
module Auth
|
|
21
|
+
class SharedKey < Azure::Core::Auth::SharedKey
|
|
22
|
+
# The account name
|
|
23
|
+
attr :account_name
|
|
24
|
+
|
|
25
|
+
# Generate the string to sign.
|
|
26
|
+
#
|
|
27
|
+
# @param method [Symbol] The HTTP request method.
|
|
28
|
+
# @param uri [URI] The URI of the request we're signing.
|
|
29
|
+
# @param headers [Hash] The HTTP request headers.
|
|
30
|
+
#
|
|
31
|
+
# Returns a plain text string.
|
|
32
|
+
def signable_string(method, uri, headers)
|
|
33
|
+
[
|
|
34
|
+
method.to_s.upcase,
|
|
35
|
+
headers.fetch('Content-MD5', ''),
|
|
36
|
+
headers.fetch('Content-Type', ''),
|
|
37
|
+
headers.fetch('Date') { headers.fetch('x-ms-date') },
|
|
38
|
+
canonicalized_resource(uri)
|
|
39
|
+
].join("\n")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Calculate the Canonicalized Resource string for a request.
|
|
43
|
+
#
|
|
44
|
+
# @param uri [URI] The request's URI.
|
|
45
|
+
#
|
|
46
|
+
# @return [String] with the canonicalized resource.
|
|
47
|
+
def canonicalized_resource(uri)
|
|
48
|
+
resource = "/#{account_name}#{uri.path}"
|
|
49
|
+
|
|
50
|
+
comp = CGI.parse(uri.query.to_s).fetch('comp', nil)
|
|
51
|
+
resource = [resource, 'comp=' + comp[0]].join('?') if comp
|
|
52
|
+
|
|
53
|
+
resource
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
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/table/auth/shared_key'
|
|
16
|
+
|
|
17
|
+
module Azure
|
|
18
|
+
module Table
|
|
19
|
+
module Auth
|
|
20
|
+
class SharedKeyLite < SharedKey
|
|
21
|
+
# Public: The name of the strategy.
|
|
22
|
+
#
|
|
23
|
+
# Returns a String.
|
|
24
|
+
def name
|
|
25
|
+
'SharedKeyLite'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Generate the string to sign.
|
|
29
|
+
#
|
|
30
|
+
# verb - The HTTP request method.
|
|
31
|
+
# uri - The URI of the request we're signing.
|
|
32
|
+
# headers - A Hash of HTTP request headers.
|
|
33
|
+
#
|
|
34
|
+
# Returns a plain text string.
|
|
35
|
+
def signable_string(method, uri, headers)
|
|
36
|
+
[
|
|
37
|
+
headers.fetch('Date') { headers.fetch('x-ms-date') },
|
|
38
|
+
canonicalized_resource(uri)
|
|
39
|
+
].join("\n")
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,330 @@
|
|
|
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 'uuid'
|
|
16
|
+
|
|
17
|
+
require 'azure/table/serialization'
|
|
18
|
+
require 'azure/table/table_service'
|
|
19
|
+
require 'azure/table/batch_response'
|
|
20
|
+
require 'azure/core/http/http_error'
|
|
21
|
+
|
|
22
|
+
module Azure
|
|
23
|
+
module Table
|
|
24
|
+
# Represents a batch of table operations.
|
|
25
|
+
#
|
|
26
|
+
# Example usage (block syntax):
|
|
27
|
+
#
|
|
28
|
+
# results = Batch.new "table", "partition" do
|
|
29
|
+
# insert "row1", {"meta"=>"data"}
|
|
30
|
+
# insert "row2", {"meta"=>"data"}
|
|
31
|
+
# end.execute
|
|
32
|
+
#
|
|
33
|
+
# which is equivalent to (fluent syntax):
|
|
34
|
+
#
|
|
35
|
+
# results = Batch.new("table", "partition")
|
|
36
|
+
# .insert("row1", {"meta"=>"data"})
|
|
37
|
+
# .insert("row2", {"meta"=>"data"})
|
|
38
|
+
# .execute
|
|
39
|
+
#
|
|
40
|
+
# which is equivalent to (as class):
|
|
41
|
+
#
|
|
42
|
+
# svc = TableSerice.new
|
|
43
|
+
#
|
|
44
|
+
# batch = Batch.new "table", "partition"
|
|
45
|
+
# batch.insert "row1", {"meta"=>"data"}
|
|
46
|
+
# batch.insert "row2", {"meta"=>"data"}
|
|
47
|
+
#
|
|
48
|
+
# results = svc.execute_batch batch
|
|
49
|
+
#
|
|
50
|
+
class Batch
|
|
51
|
+
def initialize(table, partition, &block)
|
|
52
|
+
@table = table
|
|
53
|
+
@partition = partition
|
|
54
|
+
@operations = []
|
|
55
|
+
@entity_keys = []
|
|
56
|
+
@table_service = Azure::Table::TableService.new
|
|
57
|
+
uuid = UUID.new
|
|
58
|
+
@batch_id = "batch_" + uuid.generate
|
|
59
|
+
@changeset_id = "changeset_" + uuid.generate
|
|
60
|
+
|
|
61
|
+
self.instance_eval(&block) if block_given?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
attr_reader :table
|
|
66
|
+
attr_reader :partition
|
|
67
|
+
attr_reader :table_service
|
|
68
|
+
|
|
69
|
+
attr_accessor :operations
|
|
70
|
+
attr_accessor :entity_keys
|
|
71
|
+
attr_accessor :changeset_id
|
|
72
|
+
|
|
73
|
+
public
|
|
74
|
+
attr_accessor :batch_id
|
|
75
|
+
|
|
76
|
+
protected
|
|
77
|
+
def execute
|
|
78
|
+
@table_service.execute_batch(self)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
protected
|
|
82
|
+
class ResponseWrapper
|
|
83
|
+
def initialize(hash)
|
|
84
|
+
@hash = hash
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def uri
|
|
88
|
+
@hash[:uri]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def status_code
|
|
92
|
+
@hash[:status_code].to_i
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def body
|
|
96
|
+
@hash[:body]
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
protected
|
|
101
|
+
def add_operation(method, uri, body=nil, headers=nil)
|
|
102
|
+
op = {
|
|
103
|
+
:method => method,
|
|
104
|
+
:uri => uri,
|
|
105
|
+
:body => body,
|
|
106
|
+
:headers => headers
|
|
107
|
+
}
|
|
108
|
+
operations.push op
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
protected
|
|
112
|
+
def check_entity_key(key)
|
|
113
|
+
raise ArgumentError, "Only allowed to perform a single operation per entity, and there is already a operation registered in this batch for the key: #{key}." if entity_keys.include? key
|
|
114
|
+
entity_keys.push key
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
public
|
|
118
|
+
def parse_response(response)
|
|
119
|
+
responses = BatchResponse.parse response.body
|
|
120
|
+
new_responses = []
|
|
121
|
+
|
|
122
|
+
(0..responses.length-1).each { |index|
|
|
123
|
+
operation = operations[index]
|
|
124
|
+
response = responses[index]
|
|
125
|
+
|
|
126
|
+
if response[:status_code].to_i > 299
|
|
127
|
+
# failed
|
|
128
|
+
error = Azure::Core::Http::HTTPError.new(ResponseWrapper.new(response.merge({:uri=>operation[:uri]})))
|
|
129
|
+
error.description = response[:message] if (error.description || '').strip == ''
|
|
130
|
+
raise error
|
|
131
|
+
else
|
|
132
|
+
# success
|
|
133
|
+
case operation[:method]
|
|
134
|
+
when :post
|
|
135
|
+
# entity from body
|
|
136
|
+
result = Azure::Table::Serialization.hash_from_entry_xml(response[:body])
|
|
137
|
+
|
|
138
|
+
entity = Azure::Table::Entity.new
|
|
139
|
+
entity.table = table
|
|
140
|
+
entity.updated = result[:updated]
|
|
141
|
+
entity.etag = response[:headers]["etag"] || result[:etag]
|
|
142
|
+
entity.properties = result[:properties]
|
|
143
|
+
|
|
144
|
+
new_responses.push entity
|
|
145
|
+
when :put, :merge
|
|
146
|
+
# etag from headers
|
|
147
|
+
new_responses.push response[:headers]["etag"]
|
|
148
|
+
when :delete
|
|
149
|
+
# true
|
|
150
|
+
new_responses.push nil
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
new_responses
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
public
|
|
159
|
+
def to_body
|
|
160
|
+
body = ""
|
|
161
|
+
body.define_singleton_method(:add_line) do |a| self << (a||nil) + "\n" end
|
|
162
|
+
|
|
163
|
+
body.add_line "--#{batch_id}"
|
|
164
|
+
body.add_line "Content-Type: multipart/mixed; boundary=#{changeset_id}"
|
|
165
|
+
body.add_line ""
|
|
166
|
+
|
|
167
|
+
content_id = 1
|
|
168
|
+
operations.each { |op|
|
|
169
|
+
body.add_line "--#{changeset_id}"
|
|
170
|
+
body.add_line "Content-Type: application/http"
|
|
171
|
+
body.add_line "Content-Transfer-Encoding: binary"
|
|
172
|
+
body.add_line ""
|
|
173
|
+
body.add_line "#{op[:method].to_s.upcase} #{op[:uri]} HTTP/1.1"
|
|
174
|
+
body.add_line "Content-ID: #{content_id}"
|
|
175
|
+
|
|
176
|
+
if op[:headers]
|
|
177
|
+
op[:headers].each { |k,v|
|
|
178
|
+
body.add_line "#{k}: #{v}"
|
|
179
|
+
}
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
if op[:body]
|
|
183
|
+
body.add_line "Content-Type: application/atom+xml;type=entry"
|
|
184
|
+
body.add_line "Content-Length: #{op[:body].bytesize.to_s}"
|
|
185
|
+
body.add_line ""
|
|
186
|
+
body.add_line op[:body]
|
|
187
|
+
else
|
|
188
|
+
body.add_line ""
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
content_id += 1
|
|
192
|
+
}
|
|
193
|
+
body.add_line "--#{changeset_id}--"
|
|
194
|
+
body.add_line "--#{batch_id}--"
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Public: Inserts new entity to the table.
|
|
198
|
+
#
|
|
199
|
+
# ==== Attributes
|
|
200
|
+
#
|
|
201
|
+
# * +row_key+ - String. The row key
|
|
202
|
+
# * +entity_values+ - Hash. A hash of the name/value pairs for the entity.
|
|
203
|
+
#
|
|
204
|
+
# See http://msdn.microsoft.com/en-us/library/azure/dd179433
|
|
205
|
+
public
|
|
206
|
+
def insert(row_key, entity_values)
|
|
207
|
+
check_entity_key(row_key)
|
|
208
|
+
|
|
209
|
+
body = Azure::Table::Serialization.hash_to_entry_xml({
|
|
210
|
+
"PartitionKey" => partition,
|
|
211
|
+
"RowKey" => row_key
|
|
212
|
+
}.merge(entity_values) ).to_xml
|
|
213
|
+
|
|
214
|
+
add_operation(:post, @table_service.entities_uri(table), body)
|
|
215
|
+
self
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Public: Updates an existing entity in a table. The Update Entity operation replaces
|
|
219
|
+
# the entire entity and can be used to remove properties.
|
|
220
|
+
#
|
|
221
|
+
# ==== Attributes
|
|
222
|
+
#
|
|
223
|
+
# * +row_key+ - String. The row key
|
|
224
|
+
# * +entity_values+ - Hash. A hash of the name/value pairs for the entity.
|
|
225
|
+
# * +options+ - Hash. Optional parameters.
|
|
226
|
+
#
|
|
227
|
+
# ==== Options
|
|
228
|
+
#
|
|
229
|
+
# Accepted key/value pairs in options parameter are:
|
|
230
|
+
# * :if_match - String. A matching condition which is required for update (optional, Default="*")
|
|
231
|
+
# * :create_if_not_exists - Boolean. If true, and partition_key and row_key do not reference and existing entity,
|
|
232
|
+
# that entity will be inserted. If false, the operation will fail. (optional, Default=false)
|
|
233
|
+
#
|
|
234
|
+
# See http://msdn.microsoft.com/en-us/library/azure/dd179427
|
|
235
|
+
public
|
|
236
|
+
def update(row_key, entity_values, options={})
|
|
237
|
+
check_entity_key(row_key)
|
|
238
|
+
|
|
239
|
+
uri = @table_service.entities_uri(table, partition, row_key)
|
|
240
|
+
|
|
241
|
+
headers = {}
|
|
242
|
+
headers["If-Match"] = options[:if_match] || "*" unless options[:create_if_not_exists]
|
|
243
|
+
|
|
244
|
+
body = Azure::Table::Serialization.hash_to_entry_xml(entity_values).to_xml
|
|
245
|
+
|
|
246
|
+
add_operation(:put, uri, body, headers)
|
|
247
|
+
self
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Public: Updates an existing entity by updating the entity's properties. This operation
|
|
251
|
+
# does not replace the existing entity, as the update_entity operation does.
|
|
252
|
+
#
|
|
253
|
+
# ==== Attributes
|
|
254
|
+
#
|
|
255
|
+
# * +row_key+ - String. The row key
|
|
256
|
+
# * +entity_values+ - Hash. A hash of the name/value pairs for the entity.
|
|
257
|
+
# * +options+ - Hash. Optional parameters.
|
|
258
|
+
#
|
|
259
|
+
# ==== Options
|
|
260
|
+
#
|
|
261
|
+
# Accepted key/value pairs in options parameter are:
|
|
262
|
+
# * +if_match+ - String. A matching condition which is required for update (optional, Default="*")
|
|
263
|
+
# * +create_if_not_exists+ - Boolean. If true, and partition_key and row_key do not reference and existing entity,
|
|
264
|
+
# that entity will be inserted. If false, the operation will fail. (optional, Default=false)
|
|
265
|
+
#
|
|
266
|
+
# See http://msdn.microsoft.com/en-us/library/azure/dd179392
|
|
267
|
+
public
|
|
268
|
+
def merge(row_key, entity_values, options={})
|
|
269
|
+
check_entity_key(row_key)
|
|
270
|
+
|
|
271
|
+
uri = @table_service.entities_uri(table, partition, row_key)
|
|
272
|
+
|
|
273
|
+
headers = {}
|
|
274
|
+
headers["If-Match"] = options[:if_match] || "*" unless options[:create_if_not_exists]
|
|
275
|
+
|
|
276
|
+
body = Azure::Table::Serialization.hash_to_entry_xml(entity_values).to_xml
|
|
277
|
+
|
|
278
|
+
add_operation(:merge, uri, body, headers)
|
|
279
|
+
self
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Public: Inserts or updates an existing entity within a table by merging new property values into the entity.
|
|
283
|
+
#
|
|
284
|
+
# ==== Attributes
|
|
285
|
+
#
|
|
286
|
+
# * +row_key+ - String. The row key
|
|
287
|
+
# * +entity_values+ - Hash. A hash of the name/value pairs for the entity.
|
|
288
|
+
#
|
|
289
|
+
# See http://msdn.microsoft.com/en-us/library/azure/hh452241
|
|
290
|
+
public
|
|
291
|
+
def insert_or_merge(row_key, entity_values)
|
|
292
|
+
merge(row_key, entity_values, { :create_if_not_exists => true })
|
|
293
|
+
self
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Public: Inserts or updates a new entity into a table.
|
|
297
|
+
#
|
|
298
|
+
# ==== Attributes
|
|
299
|
+
#
|
|
300
|
+
# * +row_key+ - String. The row key
|
|
301
|
+
# * +entity_values+ - Hash. A hash of the name/value pairs for the entity.
|
|
302
|
+
#
|
|
303
|
+
# See http://msdn.microsoft.com/en-us/library/azure/hh452242
|
|
304
|
+
public
|
|
305
|
+
def insert_or_replace(row_key, entity_values)
|
|
306
|
+
update(row_key, entity_values, { :create_if_not_exists => true })
|
|
307
|
+
self
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Public: Deletes an existing entity in the table.
|
|
311
|
+
#
|
|
312
|
+
# ==== Attributes
|
|
313
|
+
#
|
|
314
|
+
# * +row_key+ - String. The row key
|
|
315
|
+
# * +options+ - Hash. Optional parameters.
|
|
316
|
+
#
|
|
317
|
+
# ==== Options
|
|
318
|
+
#
|
|
319
|
+
# Accepted key/value pairs in options parameter are:
|
|
320
|
+
# * +if_match+ - String. A matching condition which is required for update (optional, Default="*")
|
|
321
|
+
#
|
|
322
|
+
# See http://msdn.microsoft.com/en-us/library/azure/dd135727
|
|
323
|
+
public
|
|
324
|
+
def delete(row_key, options={})
|
|
325
|
+
add_operation(:delete, @table_service.entities_uri(table, partition, row_key), nil, {"If-Match"=> options[:if_match] || "*"})
|
|
326
|
+
self
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
end
|