juliusl-azure-sdk-for-ruby 0.7.0
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 +11 -0
- data/.gitignore +15 -0
- data/.travis.yml +13 -0
- data/ChangeLog.txt +56 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +202 -0
- data/README.md +630 -0
- data/Rakefile +121 -0
- data/azure.gemspec +47 -0
- data/bin/pfxer +35 -0
- data/lib/azure.rb +60 -0
- data/lib/azure/base_management/affinity_group.rb +32 -0
- data/lib/azure/base_management/base_management_service.rb +245 -0
- data/lib/azure/base_management/location.rb +27 -0
- data/lib/azure/base_management/management_http_request.rb +175 -0
- data/lib/azure/base_management/serialization.rb +135 -0
- data/lib/azure/base_management/sql_management_http_request.rb +45 -0
- data/lib/azure/blob/auth/shared_access_signature.rb +141 -0
- data/lib/azure/blob/blob.rb +32 -0
- data/lib/azure/blob/blob_service.rb +1427 -0
- data/lib/azure/blob/block.rb +31 -0
- data/lib/azure/blob/container.rb +32 -0
- data/lib/azure/blob/serialization.rb +285 -0
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +137 -0
- data/lib/azure/cloud_service_management/serialization.rb +118 -0
- data/lib/azure/core.rb +41 -0
- data/lib/azure/core/auth/authorizer.rb +36 -0
- data/lib/azure/core/auth/shared_key.rb +110 -0
- data/lib/azure/core/auth/shared_key_lite.rb +48 -0
- data/lib/azure/core/auth/signer.rb +52 -0
- data/lib/azure/core/configuration.rb +218 -0
- data/lib/azure/core/error.rb +22 -0
- data/lib/azure/core/filtered_service.rb +44 -0
- data/lib/azure/core/http/debug_filter.rb +36 -0
- data/lib/azure/core/http/http_error.rb +88 -0
- data/lib/azure/core/http/http_filter.rb +53 -0
- data/lib/azure/core/http/http_request.rb +160 -0
- data/lib/azure/core/http/http_response.rb +140 -0
- data/lib/azure/core/http/retry_policy.rb +74 -0
- data/lib/azure/core/http/signer_filter.rb +34 -0
- data/lib/azure/core/service.rb +63 -0
- data/lib/azure/core/signed_service.rb +43 -0
- data/lib/azure/core/utility.rb +242 -0
- data/lib/azure/queue/message.rb +30 -0
- data/lib/azure/queue/queue.rb +29 -0
- data/lib/azure/queue/queue_service.rb +568 -0
- data/lib/azure/queue/serialization.rb +106 -0
- data/lib/azure/service/access_policy.rb +26 -0
- data/lib/azure/service/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 +83 -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/wrap_service.rb +89 -0
- data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
- data/lib/azure/service_bus/brokered_message.rb +124 -0
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
- data/lib/azure/service_bus/correlation_filter.rb +45 -0
- data/lib/azure/service_bus/empty_rule_action.rb +30 -0
- data/lib/azure/service_bus/false_filter.rb +38 -0
- data/lib/azure/service_bus/filter.rb +21 -0
- data/lib/azure/service_bus/interval.rb +104 -0
- data/lib/azure/service_bus/queue.rb +230 -0
- data/lib/azure/service_bus/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 +895 -0
- data/lib/azure/service_bus/sql_filter.rb +50 -0
- data/lib/azure/service_bus/sql_rule_action.rb +50 -0
- data/lib/azure/service_bus/subscription.rb +184 -0
- data/lib/azure/service_bus/topic.rb +187 -0
- data/lib/azure/service_bus/true_filter.rb +38 -0
- data/lib/azure/sql_database_management/serialization.rb +112 -0
- data/lib/azure/sql_database_management/sql_database.rb +31 -0
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
- data/lib/azure/storage_management/serialization.rb +204 -0
- data/lib/azure/storage_management/storage_account.rb +48 -0
- data/lib/azure/storage_management/storage_management_service.rb +208 -0
- data/lib/azure/table/auth/shared_key.rb +92 -0
- data/lib/azure/table/auth/shared_key_lite.rb +44 -0
- data/lib/azure/table/batch.rb +330 -0
- data/lib/azure/table/batch_response.rb +118 -0
- data/lib/azure/table/edmtype.rb +127 -0
- data/lib/azure/table/entity.rb +31 -0
- data/lib/azure/table/guid.rb +24 -0
- data/lib/azure/table/query.rb +112 -0
- data/lib/azure/table/serialization.rb +108 -0
- data/lib/azure/table/table_service.rb +560 -0
- data/lib/azure/version.rb +31 -0
- data/lib/azure/virtual_machine_image_management/serialization.rb +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 +89 -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 +554 -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 +109 -0
- data/test/fixtures/32px-fulls-black.jpg +0 -0
- data/test/fixtures/affinity_group.xml +33 -0
- data/test/fixtures/all_containers.xml +20 -0
- data/test/fixtures/all_tables.xml +22 -0
- data/test/fixtures/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 +36 -0
- data/test/fixtures/list_sql_server_firewall.xml +23 -0
- data/test/fixtures/list_storage_account_single.xml +25 -0
- data/test/fixtures/list_storage_accounts.xml +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/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 +83 -0
- data/test/integration/blob/blob_gb18030_test.rb +199 -0
- data/test/integration/blob/blob_metadata_test.rb +75 -0
- data/test/integration/blob/blob_pages_test.rb +119 -0
- data/test/integration/blob/blob_properties_test.rb +77 -0
- data/test/integration/blob/block_blob_test.rb +254 -0
- data/test/integration/blob/container/container_acl_test.rb +69 -0
- data/test/integration/blob/container/container_metadata_test.rb +50 -0
- data/test/integration/blob/container/create_container_test.rb +60 -0
- data/test/integration/blob/container/delete_container_test.rb +39 -0
- data/test/integration/blob/container/get_container_properties_test.rb +48 -0
- data/test/integration/blob/container/list_containers_test.rb +79 -0
- data/test/integration/blob/container/root_container_test.rb +54 -0
- data/test/integration/blob/copy_blob_test.rb +113 -0
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
- data/test/integration/blob/create_page_blob_test.rb +83 -0
- data/test/integration/blob/delete_blob_test.rb +159 -0
- data/test/integration/blob/get_blob_test.rb +65 -0
- data/test/integration/blob/informative_errors_test.rb +39 -0
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
- data/test/integration/blob/lease/break_lease_test.rb +40 -0
- data/test/integration/blob/lease/release_lease_test.rb +40 -0
- data/test/integration/blob/lease/renew_lease_test.rb +42 -0
- data/test/integration/blob/list_blobs_test.rb +113 -0
- data/test/integration/cloud_service/Cloud_Create_test.rb +45 -0
- data/test/integration/cloud_service/Cloud_Delete_test.rb +45 -0
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
- data/test/integration/database/create_sql_server_test.rb +53 -0
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
- data/test/integration/database/delete_sql_server_test.rb +58 -0
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
- data/test/integration/database/list_sql_servers_test.rb +44 -0
- data/test/integration/database/reset_password_sql_server_test.rb +55 -0
- data/test/integration/location/Location_List_test.rb +39 -0
- data/test/integration/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 +44 -0
- data/test/integration/queue/peek_messages_test.rb +59 -0
- data/test/integration/queue/queue_gb18030_test.rb +131 -0
- data/test/integration/queue/queue_metadata_test.rb +40 -0
- data/test/integration/queue/update_message_test.rb +74 -0
- data/test/integration/service_bus/informative_errors_test.rb +37 -0
- data/test/integration/service_bus/queues_scenario_test.rb +200 -0
- data/test/integration/service_bus/queues_test.rb +266 -0
- data/test/integration/service_bus/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 +195 -0
- data/test/integration/table/query_tables_test.rb +43 -0
- data/test/integration/table/query_test.rb +251 -0
- data/test/integration/table/table_acl_test.rb +52 -0
- data/test/integration/table/table_gb18030_test.rb +355 -0
- data/test/integration/table/update_entity_batch_test.rb +149 -0
- data/test/integration/table/update_entity_test.rb +131 -0
- data/test/integration/test_helper.rb +38 -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 +44 -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/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 +1969 -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/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 +62 -0
- data/test/unit/core/http/http_request_test.rb +113 -0
- data/test/unit/core/http/http_response_test.rb +45 -0
- data/test/unit/core/http/retry_policy_test.rb +23 -0
- data/test/unit/core/utility_test.rb +122 -0
- data/test/unit/database/serialization_test.rb +97 -0
- data/test/unit/database/sql_database_server_service_test.rb +284 -0
- data/test/unit/service/serialization_test.rb +533 -0
- data/test/unit/service/storage_service_test.rb +293 -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 +478 -0
- data/test/unit/vnet/serialization_test.rb +187 -0
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
- metadata +512 -0
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
module Azure
|
|
16
|
+
module Blob
|
|
17
|
+
# Represents a Block as part of a BlockList
|
|
18
|
+
# The type should be one of :uncommitted, :committed or :latest
|
|
19
|
+
class Block
|
|
20
|
+
|
|
21
|
+
def initialize
|
|
22
|
+
@type = :latest
|
|
23
|
+
yield self if block_given?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_accessor :name
|
|
27
|
+
attr_accessor :size
|
|
28
|
+
attr_accessor :type
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
module Azure
|
|
17
|
+
module Blob
|
|
18
|
+
class Container
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@properties = {}
|
|
22
|
+
@metadata = {}
|
|
23
|
+
yield self if block_given?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_accessor :name
|
|
27
|
+
attr_accessor :properties
|
|
28
|
+
attr_accessor :metadata
|
|
29
|
+
attr_accessor :public_access_level
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require 'azure/service/serialization'
|
|
16
|
+
require 'azure/service/enumeration_results'
|
|
17
|
+
|
|
18
|
+
require 'azure/blob/container'
|
|
19
|
+
require 'azure/blob/blob'
|
|
20
|
+
require 'azure/blob/block'
|
|
21
|
+
|
|
22
|
+
require 'base64'
|
|
23
|
+
|
|
24
|
+
module Azure
|
|
25
|
+
module Blob
|
|
26
|
+
module Serialization
|
|
27
|
+
include Azure::Service::Serialization
|
|
28
|
+
|
|
29
|
+
def self.container_enumeration_results_from_xml(xml)
|
|
30
|
+
xml = slopify(xml)
|
|
31
|
+
expect_node("EnumerationResults", xml)
|
|
32
|
+
|
|
33
|
+
results = enumeration_results_from_xml(xml, Azure::Service::EnumerationResults.new)
|
|
34
|
+
|
|
35
|
+
return results unless (xml > "Containers").any? && ((xml > "Containers") > "Container").any?
|
|
36
|
+
|
|
37
|
+
if xml.Containers.Container.count == 0
|
|
38
|
+
results.push(container_from_xml(xml.Containers.Container))
|
|
39
|
+
else
|
|
40
|
+
xml.Containers.Container.each { |container_node|
|
|
41
|
+
results.push(container_from_xml(container_node))
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
results
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.container_from_xml(xml)
|
|
49
|
+
xml = slopify(xml)
|
|
50
|
+
expect_node("Container", xml)
|
|
51
|
+
|
|
52
|
+
Container.new do |container|
|
|
53
|
+
container.name = xml.Name.text if (xml > "Name").any?
|
|
54
|
+
container.properties = container_properties_from_xml(xml.Properties) if (xml > "Properties").any?
|
|
55
|
+
container.metadata = metadata_from_xml(xml.Metadata) if (xml > "Metadata").any?
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.container_from_headers(headers)
|
|
60
|
+
Container.new do |container|
|
|
61
|
+
container.properties = container_properties_from_headers(headers)
|
|
62
|
+
container.public_access_level = public_access_level_from_headers(headers)
|
|
63
|
+
container.metadata = metadata_from_headers(headers)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def self.container_properties_from_xml(xml)
|
|
68
|
+
xml = slopify(xml)
|
|
69
|
+
expect_node("Properties", xml)
|
|
70
|
+
|
|
71
|
+
props = {}
|
|
72
|
+
|
|
73
|
+
props[:last_modified] = (xml > "Last-Modified").text if (xml > "Last-Modified").any?
|
|
74
|
+
props[:etag] = xml.Etag.text if (xml > "Etag").any?
|
|
75
|
+
props[:lease_status] = xml.LeaseStatus.text if (xml > "LeaseStatus").any?
|
|
76
|
+
props[:lease_state] = xml.LeaseState.text if (xml > "LeaseState").any?
|
|
77
|
+
props[:lease_duration] = xml.LeaseDuration.text if (xml > "LeaseDuration").any?
|
|
78
|
+
|
|
79
|
+
props
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def self.container_properties_from_headers(headers)
|
|
83
|
+
props = {}
|
|
84
|
+
|
|
85
|
+
props[:last_modified] = headers["Last-Modified"]
|
|
86
|
+
props[:etag] = headers["Etag"]
|
|
87
|
+
props[:lease_status] = headers["x-ms-lease-status"]
|
|
88
|
+
props[:lease_state] = headers["x-ms-lease-state"]
|
|
89
|
+
props[:lease_duration] = headers["x-ms-lease-duration"]
|
|
90
|
+
|
|
91
|
+
props
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.public_access_level_from_headers(headers)
|
|
95
|
+
headers["x-ms-blob-public-access"]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.blob_enumeration_results_from_xml(xml)
|
|
99
|
+
|
|
100
|
+
xml = slopify(xml)
|
|
101
|
+
expect_node("EnumerationResults", xml)
|
|
102
|
+
|
|
103
|
+
results = enumeration_results_from_xml(xml, Azure::Service::EnumerationResults.new)
|
|
104
|
+
|
|
105
|
+
return results unless (xml > "Blobs").any?
|
|
106
|
+
|
|
107
|
+
if ((xml > "Blobs") > "Blob").any?
|
|
108
|
+
if xml.Blobs.Blob.count == 0
|
|
109
|
+
results.push(blob_from_xml(xml.Blobs.Blob))
|
|
110
|
+
else
|
|
111
|
+
xml.Blobs.Blob.each { |blob_node|
|
|
112
|
+
results.push(blob_from_xml(blob_node))
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
results
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def self.blob_from_xml(xml)
|
|
121
|
+
xml = slopify(xml)
|
|
122
|
+
expect_node("Blob", xml)
|
|
123
|
+
|
|
124
|
+
Blob.new do |blob|
|
|
125
|
+
blob.name = xml.Name.text if (xml > "Name").any?
|
|
126
|
+
blob.snapshot = xml.Snapshot.text if (xml > "Snapshot").any?
|
|
127
|
+
|
|
128
|
+
blob.properties = blob_properties_from_xml(xml.Properties) if (xml > "Properties").any?
|
|
129
|
+
blob.metadata = metadata_from_xml(xml.Metadata) if (xml > "Metadata").any?
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def self.blob_from_headers(headers)
|
|
134
|
+
Blob.new do |blob|
|
|
135
|
+
blob.properties = blob_properties_from_headers(headers)
|
|
136
|
+
blob.metadata = metadata_from_headers(headers)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def self.blob_properties_from_xml(xml)
|
|
141
|
+
xml = slopify(xml)
|
|
142
|
+
expect_node("Properties", xml)
|
|
143
|
+
|
|
144
|
+
props = {}
|
|
145
|
+
|
|
146
|
+
props[:last_modified] = (xml > "Last-Modified").text if (xml > "Last-Modified").any?
|
|
147
|
+
props[:etag] = xml.Etag.text if (xml > "Etag").any?
|
|
148
|
+
props[:lease_status] = xml.LeaseStatus.text if (xml > "LeaseStatus").any?
|
|
149
|
+
props[:lease_state] = xml.LeaseState.text if (xml > "LeaseState").any?
|
|
150
|
+
props[:lease_duration] = xml.LeaseDuration.text if (xml > "LeaseDuration").any?
|
|
151
|
+
props[:content_length] = (xml > "Content-Length").text.to_i if (xml > "Content-Length").any?
|
|
152
|
+
props[:content_type] = (xml > "Content-Type").text if (xml > "Content-Type").any?
|
|
153
|
+
props[:content_encoding] = (xml > "Content-Encoding").text if (xml > "Content-Encoding").any?
|
|
154
|
+
props[:content_language] = (xml > "Content-Language").text if (xml > "Content-Language").any?
|
|
155
|
+
props[:content_md5] = (xml > "Content-MD5").text if (xml > "Content-MD5").any?
|
|
156
|
+
|
|
157
|
+
props[:cache_control] = (xml > "Cache-Control").text if (xml > "Cache-Control").any?
|
|
158
|
+
props[:sequence_number] = (xml > "x-ms-blob-sequence-number").text.to_i if (xml > "x-ms-blob-sequence-number").any?
|
|
159
|
+
props[:blob_type] = xml.BlobType.text if (xml > "BlobType").any?
|
|
160
|
+
props[:copy_id] = xml.CopyId.text if (xml > "CopyId").any?
|
|
161
|
+
props[:copy_status] = xml.CopyStatus.text if (xml > "CopyStatus").any?
|
|
162
|
+
props[:copy_source] = xml.CopySource.text if (xml > "CopySource").any?
|
|
163
|
+
props[:copy_progress] = xml.CopyProgress.text if (xml > "CopyProgress").any?
|
|
164
|
+
props[:copy_completion_time] = xml.CopyCompletionTime.text if (xml > "CopyCompletionTime").any?
|
|
165
|
+
props[:copy_status_description] = xml.CopyStatusDescription.text if (xml > "CopyStatusDescription").any?
|
|
166
|
+
|
|
167
|
+
props
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def self.blob_properties_from_headers(headers)
|
|
171
|
+
props = {}
|
|
172
|
+
|
|
173
|
+
props[:last_modified] = headers["Last-Modified"]
|
|
174
|
+
props[:etag] = headers["Etag"]
|
|
175
|
+
props[:lease_status] = headers["x-ms-lease-status"]
|
|
176
|
+
props[:lease_state] = headers["x-ms-lease-state"]
|
|
177
|
+
props[:lease_duration] = headers["x-ms-lease-duration"]
|
|
178
|
+
|
|
179
|
+
props[:content_length] = headers["x-ms-blob-content-length"] || headers["Content-Length"]
|
|
180
|
+
props[:content_length] = props[:content_length].to_i if props[:content_length]
|
|
181
|
+
|
|
182
|
+
props[:content_type] = headers["x-ms-blob-content-type"] || headers["Content-Type"]
|
|
183
|
+
props[:content_encoding] = headers["x-ms-blob-content-encoding"] || headers["Content-Encoding"]
|
|
184
|
+
props[:content_language] = headers["x-ms-blob-content-language"] || headers["Content-Language"]
|
|
185
|
+
props[:content_md5] = headers["x-ms-blob-content-md5"] || headers["Content-MD5"]
|
|
186
|
+
|
|
187
|
+
props[:cache_control] = headers["x-ms-blob-cache-control"] || headers["Cache-Control"]
|
|
188
|
+
props[:sequence_number] = headers["x-ms-blob-sequence-number"].to_i if headers["x-ms-blob-sequence-number"]
|
|
189
|
+
props[:blob_type] = headers["x-ms-blob-type"]
|
|
190
|
+
|
|
191
|
+
props[:copy_id] = headers["x-ms-copy-id"]
|
|
192
|
+
props[:copy_status] = headers["x-ms-copy-status"]
|
|
193
|
+
props[:copy_source] = headers["x-ms-copy-source"]
|
|
194
|
+
props[:copy_progress] = headers["x-ms-copy-progress"]
|
|
195
|
+
props[:copy_completion_time] = headers["x-ms-copy-completion-time"]
|
|
196
|
+
props[:copy_status_description] = headers["x-ms-copy-status-description"]
|
|
197
|
+
|
|
198
|
+
props[:accept_ranges] = headers["Accept-Ranges"].to_i if headers["Accept-Ranges"]
|
|
199
|
+
|
|
200
|
+
props
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def self.block_list_to_xml(block_list)
|
|
204
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
|
|
205
|
+
xml.BlockList {
|
|
206
|
+
block_list.each { |block|
|
|
207
|
+
encoded_id = Base64.strict_encode64(block[0])
|
|
208
|
+
case block[1]
|
|
209
|
+
when :uncommitted
|
|
210
|
+
xml.Uncommitted encoded_id
|
|
211
|
+
when :committed
|
|
212
|
+
xml.Committed encoded_id
|
|
213
|
+
else
|
|
214
|
+
xml.Latest encoded_id
|
|
215
|
+
end
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
end
|
|
219
|
+
builder.to_xml
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def self.block_list_from_xml(xml)
|
|
223
|
+
xml = slopify(xml)
|
|
224
|
+
expect_node("BlockList", xml)
|
|
225
|
+
|
|
226
|
+
block_list = {
|
|
227
|
+
:committed => [],
|
|
228
|
+
:uncommitted => []
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if ((xml > "CommittedBlocks") > "Block").any?
|
|
232
|
+
if xml.CommittedBlocks.Block.count == 0
|
|
233
|
+
add_block(:committed, xml.CommittedBlocks.Block, block_list)
|
|
234
|
+
else
|
|
235
|
+
xml.CommittedBlocks.Block.each { |block_node|
|
|
236
|
+
add_block(:committed, block_node, block_list)
|
|
237
|
+
}
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
return block_list unless (xml > "UncommittedBlocks")
|
|
242
|
+
|
|
243
|
+
if ((xml > "UncommittedBlocks") > "Block").any?
|
|
244
|
+
if xml.UncommittedBlocks.Block.count == 0
|
|
245
|
+
add_block(:uncommitted, xml.UncommittedBlocks.Block, block_list)
|
|
246
|
+
else
|
|
247
|
+
xml.UncommittedBlocks.Block.each { |block_node|
|
|
248
|
+
add_block(:uncommitted, block_node, block_list)
|
|
249
|
+
}
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
block_list
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def self.add_block(type, block_node, block_list)
|
|
257
|
+
block = Block.new do |b|
|
|
258
|
+
b.name = Base64.strict_decode64(block_node.Name.text) if (block_node > "Name").any?
|
|
259
|
+
b.size = block_node.Size.text.to_i if (block_node > "Size").any?
|
|
260
|
+
b.type = type
|
|
261
|
+
end
|
|
262
|
+
block_list[type].push block
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def self.page_list_from_xml(xml)
|
|
266
|
+
xml = slopify(xml)
|
|
267
|
+
expect_node("PageList", xml)
|
|
268
|
+
|
|
269
|
+
page_list = []
|
|
270
|
+
|
|
271
|
+
return page_list unless (xml > "PageRange").any?
|
|
272
|
+
|
|
273
|
+
if xml.PageRange.count == 0
|
|
274
|
+
page_list.push [xml.PageRange.Start.text.to_i, xml.PageRange.End.text.to_i]
|
|
275
|
+
else
|
|
276
|
+
xml.PageRange.each { |page_range|
|
|
277
|
+
page_list.push [page_range.Start.text.to_i, page_range.End.text.to_i]
|
|
278
|
+
}
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
page_list
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# Copyright 2013 Microsoft Open Technologies, Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
module Azure
|
|
17
|
+
module CloudServiceManagement
|
|
18
|
+
class CloudService
|
|
19
|
+
def initialize
|
|
20
|
+
yield self if block_given?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_accessor :url
|
|
24
|
+
attr_accessor :name
|
|
25
|
+
attr_accessor :label
|
|
26
|
+
attr_accessor :description
|
|
27
|
+
attr_accessor :location
|
|
28
|
+
attr_accessor :affinity_group
|
|
29
|
+
attr_accessor :status
|
|
30
|
+
attr_accessor :date_created
|
|
31
|
+
attr_accessor :date_modified
|
|
32
|
+
attr_accessor :extended_properties
|
|
33
|
+
attr_accessor :default_winrm_certificate_thumbprint
|
|
34
|
+
attr_accessor :virtual_machines
|
|
35
|
+
attr_accessor :deployment_name
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
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/cloud_service_management/serialization'
|
|
16
|
+
|
|
17
|
+
module Azure
|
|
18
|
+
module CloudServiceManagement
|
|
19
|
+
class CloudServiceManagementService < BaseManagement::BaseManagementService
|
|
20
|
+
include Azure::Core::Utility
|
|
21
|
+
|
|
22
|
+
def initialize
|
|
23
|
+
super()
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Public: Creates a new cloud service in Microsoft Azure.
|
|
27
|
+
#
|
|
28
|
+
# ==== Attributes
|
|
29
|
+
#
|
|
30
|
+
# * +name+ - String. The name of the cloud service.
|
|
31
|
+
# * +options+ - Hash. Optional parameters.
|
|
32
|
+
#
|
|
33
|
+
# ==== Options
|
|
34
|
+
#
|
|
35
|
+
# Accepted key/value pairs in options parameter are:
|
|
36
|
+
# * +:label+ -String. The label for this cloud service.
|
|
37
|
+
# * +:description+ - String. A description for the hosted service. (optional)
|
|
38
|
+
# * +:location+ - String. The regional data center location where the
|
|
39
|
+
# cloud service will be created. Required if affinity group not
|
|
40
|
+
# specified (optional)
|
|
41
|
+
# * +:affinity_group_name - String. Name of the affinity group with
|
|
42
|
+
# which to assocate the cloud service. Required if location not
|
|
43
|
+
# specified (optional)
|
|
44
|
+
# * +:extended_properties+ - Hash. Key/Value pairs of extended
|
|
45
|
+
# properties to add to the cloud service. The key is used as the
|
|
46
|
+
# property name and the value as its value. (optional)
|
|
47
|
+
#
|
|
48
|
+
# See http://msdn.microsoft.com/en-us/library/azure/gg441304.aspx
|
|
49
|
+
#
|
|
50
|
+
# Returns None
|
|
51
|
+
def create_cloud_service(name, options = {})
|
|
52
|
+
Azure::Loggerx.error_with_exit 'Cloud service name is not valid ' unless name
|
|
53
|
+
if get_cloud_service(name)
|
|
54
|
+
Azure::Loggerx.warn "Cloud service #{name} already exists. Skipped..."
|
|
55
|
+
else
|
|
56
|
+
Azure::Loggerx.info "Creating cloud service #{name}."
|
|
57
|
+
request_path = '/services/hostedservices'
|
|
58
|
+
body = Serialization.cloud_services_to_xml(name, options)
|
|
59
|
+
request = BaseManagement::ManagementHttpRequest.new(:post, request_path, body)
|
|
60
|
+
request.call
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Public: Gets a list of hosted services available under the current subscription.
|
|
65
|
+
#
|
|
66
|
+
# Returns an array of Azure::CloudServiceManagement::CloudService objects
|
|
67
|
+
def list_cloud_services
|
|
68
|
+
request_path = '/services/hostedservices'
|
|
69
|
+
request = BaseManagement::ManagementHttpRequest.new(:get, request_path, nil)
|
|
70
|
+
response = request.call
|
|
71
|
+
Serialization.cloud_services_from_xml(response)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Public: Checks to see if the specified hosted service is available
|
|
75
|
+
#
|
|
76
|
+
# ==== Attributes
|
|
77
|
+
#
|
|
78
|
+
# * +name+ - String. Cloud service name.
|
|
79
|
+
#
|
|
80
|
+
# Returns: A boolean value indicating whether the cloud service exists.
|
|
81
|
+
# If true, the cloud service is available. If false, the cloud service
|
|
82
|
+
# does not exist.
|
|
83
|
+
def get_cloud_service(name)
|
|
84
|
+
list_cloud_services.select { |x| x.name.casecmp(name) == 0 }.first
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def get_cloud_service_properties(name)
|
|
88
|
+
request_path = "/services/hostedservices/#{name}?embed-detail=true"
|
|
89
|
+
request = BaseManagement::ManagementHttpRequest.new(:get, request_path)
|
|
90
|
+
response = request.call
|
|
91
|
+
Serialization.cloud_services_from_xml(response).first
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Public: Deletes the specified cloud service of given subscription id from Microsoft Azure.
|
|
95
|
+
#
|
|
96
|
+
# ==== Attributes
|
|
97
|
+
#
|
|
98
|
+
# * +name+ - String. Cloud service name.
|
|
99
|
+
#
|
|
100
|
+
# Returns: None
|
|
101
|
+
def delete_cloud_service(cloud_service_name)
|
|
102
|
+
request_path= "/services/hostedservices/#{cloud_service_name}"
|
|
103
|
+
request = BaseManagement::ManagementHttpRequest.new(:delete, request_path)
|
|
104
|
+
Azure::Loggerx.info "Deleting cloud service #{cloud_service_name}. \n"
|
|
105
|
+
request.call
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Public: Deletes the specified deployment.
|
|
109
|
+
#
|
|
110
|
+
# ==== Attributes
|
|
111
|
+
#
|
|
112
|
+
# * +cloud_service_name+ - String. Cloud service name.
|
|
113
|
+
# * +slot+ - String. 'production' or 'staging'. Optional parameters.
|
|
114
|
+
# Default if not specified is 'production'
|
|
115
|
+
#
|
|
116
|
+
# See http://msdn.microsoft.com/en-us/library/azure/ee460815.aspx
|
|
117
|
+
#
|
|
118
|
+
# Returns NONE
|
|
119
|
+
def delete_cloud_service_deployment(cloud_service_name, slot='production')
|
|
120
|
+
slot = 'production' unless slot
|
|
121
|
+
request_path= "/services/hostedservices/#{cloud_service_name}/deploymentslots/#{slot}"
|
|
122
|
+
request = BaseManagement::ManagementHttpRequest.new(:delete, request_path)
|
|
123
|
+
Azure::Loggerx.info "Deleting deployment of cloud service \"#{cloud_service_name}\" ..."
|
|
124
|
+
request.call
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def upload_certificate(cloud_service_name, ssh)
|
|
128
|
+
data = export_der(ssh[:cert], ssh[:key])
|
|
129
|
+
request_path= "/services/hostedservices/#{cloud_service_name}/certificates"
|
|
130
|
+
body = Serialization.add_certificate_to_xml(data)
|
|
131
|
+
Azure::Loggerx.info "Uploading certificate to cloud service #{cloud_service_name}..."
|
|
132
|
+
request = BaseManagement::ManagementHttpRequest.new(:post, request_path, body)
|
|
133
|
+
request.call
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|