azure 0.6.0 → 0.6.1
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 +11 -33
- data/ChangeLog.txt +20 -5
- data/Gemfile +15 -15
- data/README.md +541 -537
- data/Rakefile +129 -127
- data/azure.gemspec +43 -42
- data/lib/azure.rb +52 -51
- data/lib/azure/base_management/affinity_group.rb +32 -32
- data/lib/azure/base_management/base_management_service.rb +234 -234
- data/lib/azure/base_management/location.rb +27 -27
- data/lib/azure/base_management/management_http_request.rb +171 -148
- data/lib/azure/base_management/serialization.rb +129 -129
- data/lib/azure/base_management/sql_management_http_request.rb +45 -0
- 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 -31
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +134 -125
- data/lib/azure/cloud_service_management/serialization.rb +101 -63
- data/lib/azure/core.rb +39 -36
- 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 -184
- 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/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 +239 -239
- data/lib/azure/service/signed_identifier.rb +29 -29
- data/lib/azure/service/storage_service.rb +78 -78
- data/lib/azure/service/storage_service_properties.rb +31 -31
- 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/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 +160 -160
- data/lib/azure/service_bus/service_bus_service.rb +828 -828
- 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 -90
- data/lib/azure/sql_database_management/sql_database.rb +31 -31
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -202
- data/lib/azure/storage_management/serialization.rb +190 -50
- data/lib/azure/storage_management/storage_account.rb +40 -29
- data/lib/azure/storage_management/storage_management_service.rb +166 -99
- 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 +30 -30
- data/lib/azure/virtual_machine_image_management/serialization.rb +49 -49
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +27 -27
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +27 -27
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -66
- data/lib/azure/virtual_machine_management/serialization.rb +257 -247
- data/lib/azure/virtual_machine_management/virtual_machine.rb +41 -57
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +317 -304
- data/lib/azure/virtual_network_management/serialization.rb +186 -186
- data/lib/azure/virtual_network_management/virtual_network.rb +36 -36
- 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 -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 -15
- 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 -5
- data/test/fixtures/get_storage_account_error.xml +5 -0
- data/test/fixtures/get_storage_account_properties.xml +32 -0
- data/test/fixtures/get_storage_account_properties_new.xml +32 -0
- data/test/fixtures/http_error.xml +5 -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 -28
- data/test/fixtures/list_containers.xml +37 -37
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
- 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_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_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 +23 -23
- data/test/fixtures/update_storage_account.xml +16 -0
- data/test/fixtures/update_storage_error.xml +5 -0
- data/test/fixtures/updated_storage_accounts.xml +53 -0
- data/test/fixtures/virtual_machine.xml +108 -107
- 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/database/create_sql_server_firewall_test.rb +86 -86
- data/test/integration/database/create_sql_server_test.rb +53 -57
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -72
- data/test/integration/database/delete_sql_server_test.rb +58 -63
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -46
- data/test/integration/database/list_sql_servers_test.rb +44 -45
- data/test/integration/database/reset_password_sql_server_test.rb +55 -56
- 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/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 -0
- 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 -44
- data/test/integration/vm/VM_Create_test.rb +213 -235
- data/test/integration/vm/VM_Delete_test.rb +55 -55
- data/test/integration/vm/VM_List_test.rb +71 -71
- data/test/integration/vm/VM_ShutDown_test.rb +59 -59
- 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 +160 -160
- data/test/support/stubs.rb +42 -42
- data/test/support/virtual_machine_name_generator.rb +117 -127
- data/test/support/virtual_network_helper.rb +73 -73
- data/test/test_helper.rb +52 -52
- 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 -76
- 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 -95
- data/test/unit/database/sql_database_server_service_test.rb +288 -152
- data/test/unit/service/serialization_test.rb +501 -501
- data/test/unit/service/storage_service_test.rb +290 -290
- data/test/unit/storage_management/serialization_test.rb +232 -65
- data/test/unit/storage_management/storage_management_service_test.rb +233 -94
- data/test/unit/table/edmtype_test.rb +107 -107
- data/test/unit/virtual_machine_image_management/serialization_test.rb +34 -34
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +60 -60
- data/test/unit/virtual_machine_management/serialization_test.rb +119 -116
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +383 -386
- data/test/unit/vnet/serialization_test.rb +187 -187
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
- metadata +55 -23
|
@@ -1,57 +1,41 @@
|
|
|
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 VirtualMachineManagement
|
|
18
|
-
class VirtualMachine
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
attr_accessor :
|
|
25
|
-
attr_accessor :
|
|
26
|
-
attr_accessor :
|
|
27
|
-
attr_accessor :
|
|
28
|
-
attr_accessor :
|
|
29
|
-
attr_accessor :
|
|
30
|
-
attr_accessor :
|
|
31
|
-
attr_accessor :
|
|
32
|
-
attr_accessor :
|
|
33
|
-
attr_accessor :
|
|
34
|
-
attr_accessor :
|
|
35
|
-
attr_accessor :
|
|
36
|
-
attr_accessor :
|
|
37
|
-
attr_accessor :
|
|
38
|
-
attr_accessor :
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def cloud_service_name
|
|
44
|
-
@cloud_service_name ||= (random_string(@vm_name+'-service-') if @vm_name)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def storage_account_name
|
|
48
|
-
@storage_account_name ||= (random_string(@vm_name+'storage').gsub(/[^0-9a-z ]/i, '').downcase[0..23] if @vm_name)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def deployment_name
|
|
52
|
-
@deployment_name ||= @cloud_service_name
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
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
|
+
|
|
16
|
+
module Azure
|
|
17
|
+
module VirtualMachineManagement
|
|
18
|
+
class VirtualMachine
|
|
19
|
+
def initialize
|
|
20
|
+
yield self if block_given?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_accessor :cloud_service_name
|
|
24
|
+
attr_accessor :status
|
|
25
|
+
attr_accessor :ipaddress
|
|
26
|
+
attr_accessor :vm_name
|
|
27
|
+
attr_accessor :udp_endpoints
|
|
28
|
+
attr_accessor :hostname
|
|
29
|
+
attr_accessor :deployment_name
|
|
30
|
+
attr_accessor :deployment_status
|
|
31
|
+
attr_accessor :tcp_endpoints
|
|
32
|
+
attr_accessor :role_size
|
|
33
|
+
attr_accessor :vm_user
|
|
34
|
+
attr_accessor :image
|
|
35
|
+
attr_accessor :os_type
|
|
36
|
+
attr_accessor :disk_name
|
|
37
|
+
attr_accessor :virtual_network_name
|
|
38
|
+
attr_accessor :availability_set_name
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,304 +1,317 @@
|
|
|
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/virtual_machine_management/serialization'
|
|
16
|
-
include Azure::VirtualMachineImageManagement
|
|
17
|
-
|
|
18
|
-
module Azure
|
|
19
|
-
module VirtualMachineManagement
|
|
20
|
-
class VirtualMachineManagementService < BaseManagementService
|
|
21
|
-
|
|
22
|
-
def initialize
|
|
23
|
-
super()
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Public: Get a lists of virtual machines available under the current subscription.
|
|
27
|
-
#
|
|
28
|
-
# Returns an list of Azure::VirtualMachineManagement::VirtualMachine instances.
|
|
29
|
-
def list_virtual_machines
|
|
30
|
-
roles = []
|
|
31
|
-
cloud_service = Azure::CloudServiceManagementService.new
|
|
32
|
-
cloud_services = cloud_service.list_cloud_services
|
|
33
|
-
cloud_services.each do |cloud_service|
|
|
34
|
-
request_path = "/services/hostedservices/#{cloud_service.name}/deploymentslots/production"
|
|
35
|
-
request = ManagementHttpRequest.new(:get, request_path)
|
|
36
|
-
request.warn = true
|
|
37
|
-
response = request.call
|
|
38
|
-
roles << Serialization.virtual_machines_from_xml(response,cloud_service.name)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# Public:
|
|
57
|
-
#
|
|
58
|
-
# ==== Attributes
|
|
59
|
-
#
|
|
60
|
-
# * +
|
|
61
|
-
# * +
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
# * +:
|
|
80
|
-
# * +:
|
|
81
|
-
# * +:
|
|
82
|
-
#
|
|
83
|
-
# * +:
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
#
|
|
88
|
-
# * +:
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
93
|
-
# *
|
|
94
|
-
# *
|
|
95
|
-
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
options[:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
end
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
def
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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/virtual_machine_management/serialization'
|
|
16
|
+
include Azure::VirtualMachineImageManagement
|
|
17
|
+
|
|
18
|
+
module Azure
|
|
19
|
+
module VirtualMachineManagement
|
|
20
|
+
class VirtualMachineManagementService < BaseManagementService
|
|
21
|
+
|
|
22
|
+
def initialize
|
|
23
|
+
super()
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Public: Get a lists of virtual machines available under the current subscription.
|
|
27
|
+
#
|
|
28
|
+
# Returns an list of Azure::VirtualMachineManagement::VirtualMachine instances.
|
|
29
|
+
def list_virtual_machines
|
|
30
|
+
roles = []
|
|
31
|
+
cloud_service = Azure::CloudServiceManagementService.new
|
|
32
|
+
cloud_services = cloud_service.list_cloud_services
|
|
33
|
+
cloud_services.each do |cloud_service|
|
|
34
|
+
request_path = "/services/hostedservices/#{cloud_service.name}/deploymentslots/production"
|
|
35
|
+
request = ManagementHttpRequest.new(:get, request_path)
|
|
36
|
+
request.warn = true
|
|
37
|
+
response = request.call
|
|
38
|
+
roles << Serialization.virtual_machines_from_xml(response,cloud_service.name)
|
|
39
|
+
end
|
|
40
|
+
roles.flatten.compact
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Public: Gets a virtual machine based on the provided name and cloud service name.
|
|
44
|
+
#
|
|
45
|
+
# ==== Attributes
|
|
46
|
+
#
|
|
47
|
+
# * +name+ - String. Virtual machine name.
|
|
48
|
+
# * +cloud_service_name+ - String. Cloud service name.
|
|
49
|
+
#
|
|
50
|
+
# Returns an Azure::VirtualMachineManagement::VirtualMachine instance.
|
|
51
|
+
def get_virtual_machine(name, cloud_service_name)
|
|
52
|
+
server = list_virtual_machines.select {|x| x.vm_name == name && x.cloud_service_name == cloud_service_name}
|
|
53
|
+
server.first
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Public: Provisions a virtual machine based on the supplied configuration.
|
|
57
|
+
#
|
|
58
|
+
# ==== Attributes
|
|
59
|
+
#
|
|
60
|
+
# * +params+ - Hash. parameters.
|
|
61
|
+
# * +options+ - Hash. Optional parameters.
|
|
62
|
+
# * +add_role+ - true/false. Optional Parameter. Default is false
|
|
63
|
+
#
|
|
64
|
+
# ==== Params
|
|
65
|
+
#
|
|
66
|
+
# Accepted key/value pairs are:
|
|
67
|
+
# * +:vm_name+ - String. Name of virtual machine.
|
|
68
|
+
# * +:vm_user+ - String. User name for the virtual machine instance.
|
|
69
|
+
# * +:password+ - String. A description for the hosted service.
|
|
70
|
+
# * +:image+ - String. Name of the disk image to use to create the virtual machine.
|
|
71
|
+
# * +:location+ - String. The location where the virtual machine will be created.
|
|
72
|
+
# * +:affinity_group_name - String. The affinity group name to be used
|
|
73
|
+
# for the cloud service and the storage account if these do not exist.
|
|
74
|
+
#
|
|
75
|
+
# ==== Options
|
|
76
|
+
#
|
|
77
|
+
# Accepted key/value pairs are:
|
|
78
|
+
# * +:storage_account_name+ - String. Name of storage account.
|
|
79
|
+
# * +:cloud_service_name+ - String. Name of cloud service.
|
|
80
|
+
# * +:deployment_name+ - String. A name for the deployment.
|
|
81
|
+
# * +:tcp_endpoints+ - String. Specifies the internal port and external/public port separated by a colon.
|
|
82
|
+
# You can map multiple internal and external ports by separating them with a comma.
|
|
83
|
+
# * +:ssh_private_key_file+ - String. Path of private key file.
|
|
84
|
+
# * +:ssh_certificate_file+ - String. Path of certificate file.
|
|
85
|
+
# * +:ssh_port+ - Integer. Specifies the SSH port number.
|
|
86
|
+
# * +:vm_size+ - String. Specifies the size of the virtual machine instance.
|
|
87
|
+
# * +:winrm_transport+ - Array. Specifies WINRM transport protocol.
|
|
88
|
+
# * +:availability_set_name+ - String. Specifies the availability set name.
|
|
89
|
+
#
|
|
90
|
+
# ==== add_role
|
|
91
|
+
#
|
|
92
|
+
# Accepted values are:
|
|
93
|
+
# * +false+ - Will add a new deployment in a cloud service.
|
|
94
|
+
# * +true+ - Will add a new role to a cloud service. Atleast one
|
|
95
|
+
# deployment should exist before you can add a role.
|
|
96
|
+
#
|
|
97
|
+
# Returns Azure::VirtualMachineManagement::VirtualMachine objects of newly created instance.
|
|
98
|
+
#
|
|
99
|
+
# See:
|
|
100
|
+
# http://msdn.microsoft.com/en-us/library/windowsazure/jj157194.aspx
|
|
101
|
+
# http://msdn.microsoft.com/en-us/library/windowsazure/jj157186.aspx
|
|
102
|
+
def create_virtual_machine(params, options = {}, add_role = false)
|
|
103
|
+
options[:os_type] = get_os_type(params[:image])
|
|
104
|
+
validate_deployment_params(params, options)
|
|
105
|
+
options[:deployment_name] ||= options[:cloud_service_name]
|
|
106
|
+
|
|
107
|
+
unless add_role
|
|
108
|
+
Loggerx.info "Creating deploymnent..."
|
|
109
|
+
options[:cloud_service_name] ||= generate_cloud_service_name(params[:vm_name])
|
|
110
|
+
options[:storage_account_name] ||= generate_storage_account_name(params[:vm_name])
|
|
111
|
+
optionals = {}
|
|
112
|
+
if options[:virtual_network_name]
|
|
113
|
+
virtual_network_service = Azure::VirtualNetworkManagementService.new
|
|
114
|
+
virtual_networks = virtual_network_service.list_virtual_networks.select{|x| x.name == options[:virtual_network_name]}
|
|
115
|
+
if virtual_networks.empty?
|
|
116
|
+
Loggerx.error_with_exit "Virtual network #{options[:virtual_network_name]} doesn't exists"
|
|
117
|
+
else
|
|
118
|
+
optionals[:affinity_group_name] = virtual_networks.first.affinity_group
|
|
119
|
+
end
|
|
120
|
+
elsif options[:affinity_group_name]
|
|
121
|
+
optionals[:affinity_group_name] = options[:affinity_group_name]
|
|
122
|
+
else
|
|
123
|
+
optionals[:location] = params[:location]
|
|
124
|
+
end
|
|
125
|
+
cloud_service = Azure::CloudServiceManagementService.new
|
|
126
|
+
cloud_service.create_cloud_service(options[:cloud_service_name], optionals)
|
|
127
|
+
cloud_service.upload_certificate(options[:cloud_service_name],params[:certificate]) unless params[:certificate].empty?
|
|
128
|
+
Azure::StorageManagementService.new.create_storage_account(options[:storage_account_name], optionals)
|
|
129
|
+
body = Serialization.deployment_to_xml(params,options)
|
|
130
|
+
path = "/services/hostedservices/#{options[:cloud_service_name]}/deployments"
|
|
131
|
+
else
|
|
132
|
+
|
|
133
|
+
Loggerx.info "Deployment exists, adding role..."
|
|
134
|
+
body = Serialization.role_to_xml(params, options).to_xml
|
|
135
|
+
path = "/services/hostedservices/#{options[:cloud_service_name]}/deployments/#{options[:deployment_name]}/roles"
|
|
136
|
+
end
|
|
137
|
+
Loggerx.error 'Cloud service name is required for adding role.' unless options[:cloud_service_name]
|
|
138
|
+
Loggerx.error 'Storage account name is required for adding role.' unless options[:storage_account_name]
|
|
139
|
+
Loggerx.info "Deployment in progress..."
|
|
140
|
+
request = ManagementHttpRequest.new(:post, path, body)
|
|
141
|
+
request.call
|
|
142
|
+
get_virtual_machine(params[:vm_name], options[:cloud_service_name])
|
|
143
|
+
rescue Exception => e
|
|
144
|
+
e.message
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Public: Deletes the deployment, cloud service and disk.
|
|
148
|
+
#
|
|
149
|
+
# ==== Attributes
|
|
150
|
+
#
|
|
151
|
+
# * +vm_name+ - String. Virtual machine name.
|
|
152
|
+
# * +cloud_service_name+ - String. Cloud service name.
|
|
153
|
+
#
|
|
154
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx
|
|
155
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/jj157179.aspx
|
|
156
|
+
#
|
|
157
|
+
# Returns NONE
|
|
158
|
+
def delete_virtual_machine(vm_name, cloud_service_name)
|
|
159
|
+
vm = get_virtual_machine(vm_name,cloud_service_name)
|
|
160
|
+
if vm
|
|
161
|
+
cloud_service = Azure::CloudServiceManagementService.new
|
|
162
|
+
cloud_service.delete_cloud_service_deployment(cloud_service_name)
|
|
163
|
+
cloud_service.delete_cloud_service(cloud_service_name)
|
|
164
|
+
Loggerx.info "Waiting for disk to be released.\n"
|
|
165
|
+
sleep 60
|
|
166
|
+
disk_management_service = VirtualMachineDiskManagementService.new
|
|
167
|
+
disk_management_service.delete_virtual_machine_disk(vm.disk_name)
|
|
168
|
+
else
|
|
169
|
+
Loggerx.error "Cannot find virtual machine #{vm_name} under cloud service #{cloud_service_name}"
|
|
170
|
+
end
|
|
171
|
+
rescue
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Public: Shuts down the specified virtual machine.
|
|
175
|
+
#
|
|
176
|
+
# ==== Attributes
|
|
177
|
+
#
|
|
178
|
+
# * +name+ - String. Virtual machine name.
|
|
179
|
+
# * +cloud_service_name+ - String. Cloud service name.
|
|
180
|
+
#
|
|
181
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/jj157195.aspx
|
|
182
|
+
#
|
|
183
|
+
# Returns NONE
|
|
184
|
+
def shutdown_virtual_machine(vm_name, cloud_service_name)
|
|
185
|
+
vm = get_virtual_machine(vm_name, cloud_service_name)
|
|
186
|
+
if vm
|
|
187
|
+
if ['StoppedVM','StoppedDeallocated'].include?(vm.status)
|
|
188
|
+
Loggerx.error "Cannot perform the shutdown operation on a stopped virtual machine."
|
|
189
|
+
elsif vm.deployment_status == 'Running'
|
|
190
|
+
path = "/services/hostedservices/#{vm.cloud_service_name}/deployments/#{vm.deployment_name}/roleinstances/#{vm.vm_name}/Operations"
|
|
191
|
+
body = Serialization.shutdown_virtual_machine_to_xml
|
|
192
|
+
Loggerx.info "Shutting down virtual machine \"#{vm.vm_name}\" ..."
|
|
193
|
+
request = ManagementHttpRequest.new(:post, path, body)
|
|
194
|
+
request.call
|
|
195
|
+
else
|
|
196
|
+
Loggerx.error "Cannot perform the shutdown operation on a stopped deployment."
|
|
197
|
+
end
|
|
198
|
+
else
|
|
199
|
+
Loggerx.error "Cannot find virtual machine \"#{vm_name}\" under cloud service \"#{cloud_service_name}\". "
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Public: Starts the specified virtual machine.
|
|
204
|
+
#
|
|
205
|
+
# ==== Attributes
|
|
206
|
+
#
|
|
207
|
+
# * +name+ - String. Virtual machine name.
|
|
208
|
+
# * +cloud_service_name+ - String. Cloud service name.
|
|
209
|
+
#
|
|
210
|
+
# See http://msdn.microsoft.com/en-us/library/windowsazure/jj157189.aspx
|
|
211
|
+
#
|
|
212
|
+
# Returns NONE
|
|
213
|
+
def start_virtual_machine(vm_name, cloud_service_name)
|
|
214
|
+
vm = get_virtual_machine(vm_name, cloud_service_name)
|
|
215
|
+
if vm
|
|
216
|
+
if vm.status == 'ReadyRole'
|
|
217
|
+
Loggerx.error "Cannot perform the start operation on started virtual machine."
|
|
218
|
+
else
|
|
219
|
+
path = "/services/hostedservices/#{vm.cloud_service_name}/deployments/#{vm.deployment_name}/roleinstances/#{vm.vm_name}/Operations"
|
|
220
|
+
body = Serialization.start_virtual_machine_to_xml
|
|
221
|
+
Loggerx.info "Starting virtual machine \"#{vm.vm_name}\" ..."
|
|
222
|
+
request = ManagementHttpRequest.new(:post, path, body)
|
|
223
|
+
request.call
|
|
224
|
+
end
|
|
225
|
+
else
|
|
226
|
+
Loggerx.error "Cannot find virtual machine \"#{vm_name}\" under cloud service \"#{cloud_service_name}\"."
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
private
|
|
231
|
+
|
|
232
|
+
# Private: Gets the operating system type of an image.
|
|
233
|
+
#
|
|
234
|
+
# Returns Linux or Windows
|
|
235
|
+
def get_os_type(image_name)
|
|
236
|
+
image_service = Azure::VirtualMachineImageManagementService.new
|
|
237
|
+
image = image_service.list_virtual_machine_images.select{|x| x.name == image_name}.first
|
|
238
|
+
Loggerx.error_with_exit "The virtual machine image source is not valid." unless image
|
|
239
|
+
image.os_type
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def generate_cloud_service_name(vm_name)
|
|
243
|
+
random_string(vm_name+'-service-')
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def generate_storage_account_name(vm_name)
|
|
247
|
+
random_string(vm_name+'storage').gsub(/[^0-9a-z ]/i, '').downcase[0..23]
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def validate_deployment_params(params, options)
|
|
251
|
+
errors = []
|
|
252
|
+
params_keys = ["vm_name", "image", "location", "vm_user"]
|
|
253
|
+
if options[:os_type] == "Windows"
|
|
254
|
+
params_keys += ["password"]
|
|
255
|
+
end
|
|
256
|
+
options_keys = []
|
|
257
|
+
options_keys = ['private_key_file','certificate_file'] if certificate_required?(params, options)
|
|
258
|
+
|
|
259
|
+
params_keys.each do |key|
|
|
260
|
+
errors << key if params[key.to_sym].nil?
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
options_keys.each do |key|
|
|
264
|
+
errors << key if options[key.to_sym].nil?
|
|
265
|
+
end
|
|
266
|
+
validate_role_size(options[:vm_size])
|
|
267
|
+
validate_location(params[:location]) unless errors.include?("location")
|
|
268
|
+
if errors.empty?
|
|
269
|
+
params[:certificate]={}
|
|
270
|
+
if certificate_required?(params, options)
|
|
271
|
+
begin
|
|
272
|
+
params[:certificate][:key] = OpenSSL::PKey.read File.read(options[:private_key_file])
|
|
273
|
+
params[:certificate][:cert] = OpenSSL::X509::Certificate.new File.read(options[:certificate_file])
|
|
274
|
+
params[:certificate][:fingerprint] = export_fingerprint(params[:certificate][:cert])
|
|
275
|
+
rescue Exception =>e
|
|
276
|
+
Loggerx.error_with_exit e.message
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
else
|
|
280
|
+
Loggerx.error_with_exit "You did not provide a valid '#{errors.uniq.join(", ")}' value."
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def certificate_required?(params, options)
|
|
285
|
+
if options[:os_type] == 'Linux'
|
|
286
|
+
(params[:password].nil? or (!options[:certificate_file].nil? && !options[:private_key_file].nil?))
|
|
287
|
+
else
|
|
288
|
+
winrm_with_https(options)
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def winrm_with_https(options)
|
|
293
|
+
if options[:os_type] == 'Windows'
|
|
294
|
+
options[:winrm_transport] && options[:winrm_transport].include?('https') && options[:certificate_file] && options[:private_key_file]
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def validate_role_size(vm_size)
|
|
299
|
+
valid_role_sizes = ['ExtraSmall', 'Small', 'Medium', 'Large', 'ExtraLarge', 'A6', 'A7']
|
|
300
|
+
if vm_size && !valid_role_sizes.include?(vm_size)
|
|
301
|
+
Loggerx.error_with_exit "Value '#{vm_size}' specified for parameter 'vm_size' is invalid. Allowed values are 'ExtraSmall,Small,Medium,Large,ExtraLarge,A6,A7'"
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def validate_location(location_name)
|
|
306
|
+
locations = Azure::BaseManagementService.new.list_locations
|
|
307
|
+
location = locations.select{|loc| loc.name.downcase == location_name.downcase}.first
|
|
308
|
+
if location.nil?
|
|
309
|
+
Loggerx.error_with_exit "Value '#{location_name}' specified for parameter 'location' is invalid. Allowed values are #{locations.collect(&:name).join(',')}"
|
|
310
|
+
elsif !location.available_services.include?("PersistentVMRole")
|
|
311
|
+
Loggerx.error_with_exit "Persistentvmrole not enabled for \"#{location.name}\". Try different location"
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|