kitchen-azurerm 1.11.0 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kitchen/driver/azure_credentials.rb +22 -20
- data/lib/kitchen/driver/azurerm.rb +40 -35
- data/lib/kitchen/driver/azurerm_version.rb +1 -1
- metadata +19 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 167f2bd145bfcc198c78d11302f0fa2ca94a068f4a66a74137969664c4017249
|
4
|
+
data.tar.gz: b997820c2f205904e1c66e57cbefbd052314bddc309fc625c6619e511621804f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295cf6b29eefdded3df9f0211a40c70e3619eb34162bd261e828dce635ffcc9c653ca4b9a2931d701dc82cec134b71dc1035161860f5f905633303f71eb36ab4
|
7
|
+
data.tar.gz: 0215f092fb461968d8b678291ffab9ad58d30390276195f82d61b189a240818f7cc0f3e2b76774d5910ab27b24deb71a4c7acbfb09f5911d2e73bf14224cd9bc
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require "inifile"
|
2
|
+
|
2
3
|
require "kitchen/logging"
|
3
|
-
autoload :
|
4
|
+
autoload :MsRest2, "ms_rest2"
|
5
|
+
autoload :MsRestAzure2, "ms_rest_azure2"
|
4
6
|
|
5
7
|
module Kitchen
|
6
8
|
module Driver
|
@@ -37,8 +39,8 @@ module Kitchen
|
|
37
39
|
#
|
38
40
|
def azure_options
|
39
41
|
options = { tenant_id: tenant_id!,
|
40
|
-
subscription_id
|
41
|
-
credentials: ::
|
42
|
+
subscription_id:,
|
43
|
+
credentials: ::MsRest2::TokenCredentials.new(token_provider),
|
42
44
|
active_directory_settings: ad_settings,
|
43
45
|
base_url: endpoint_settings.resource_manager_endpoint_url }
|
44
46
|
options[:client_id] = client_id if client_id
|
@@ -87,7 +89,7 @@ module Kitchen
|
|
87
89
|
|
88
90
|
# Retrieve a token based upon the preferred authentication method.
|
89
91
|
#
|
90
|
-
# @return [::
|
92
|
+
# @return [::MsRest2::TokenProvider] A new token provider object.
|
91
93
|
def token_provider
|
92
94
|
# Login with a credentials file or setting the environment variables
|
93
95
|
#
|
@@ -95,63 +97,63 @@ module Kitchen
|
|
95
97
|
#
|
96
98
|
# SPN with client_id, client_secret and tenant_id
|
97
99
|
if client_id && client_secret && tenant_id
|
98
|
-
::
|
100
|
+
::MsRestAzure2::ApplicationTokenProvider.new(tenant_id, client_id, client_secret, ad_settings)
|
99
101
|
# Login with a Managed Service Identity.
|
100
102
|
#
|
101
103
|
# Typically used with a Managed Service Identity when you have a particular object registered in a tenant.
|
102
104
|
#
|
103
105
|
# MSI with client_id and tenant_id (aka User Assigned Identity).
|
104
106
|
elsif client_id && tenant_id
|
105
|
-
::
|
107
|
+
::MsRestAzure2::MSITokenProvider.new(50342, ad_settings, { client_id: })
|
106
108
|
# Default approach to inheriting existing object permissions (application or device this code is running on).
|
107
109
|
#
|
108
110
|
# Typically used when you want to inherit the permissions of the system you're running on that are in a tenant.
|
109
111
|
#
|
110
112
|
# MSI with just tenant_id (aka System Assigned Identity).
|
111
113
|
elsif tenant_id
|
112
|
-
::
|
114
|
+
::MsRestAzure2::MSITokenProvider.new(50342, ad_settings)
|
113
115
|
# Login using the Azure CLI
|
114
116
|
#
|
115
117
|
# Typically used when you want to rely upon `az login` as your preferred authentication method.
|
116
118
|
else
|
117
119
|
warn("Using tenant id set through `az login`.")
|
118
|
-
::
|
120
|
+
::MsRestAzure2::AzureCliTokenProvider.new(ad_settings)
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
122
124
|
#
|
123
|
-
# Retrieves a [
|
125
|
+
# Retrieves a [MsRestAzure2::ActiveDirectoryServiceSettings] object representing the AD settings for the given cloud.
|
124
126
|
#
|
125
|
-
# @return [
|
127
|
+
# @return [MsRestAzure2::ActiveDirectoryServiceSettings] Settings to be used for subsequent requests
|
126
128
|
#
|
127
129
|
def ad_settings
|
128
130
|
case environment.downcase
|
129
131
|
when "azureusgovernment"
|
130
|
-
::
|
132
|
+
::MsRestAzure2::ActiveDirectoryServiceSettings.get_azure_us_government_settings
|
131
133
|
when "azurechina"
|
132
|
-
::
|
134
|
+
::MsRestAzure2::ActiveDirectoryServiceSettings.get_azure_china_settings
|
133
135
|
when "azuregermancloud"
|
134
|
-
::
|
136
|
+
::MsRestAzure2::ActiveDirectoryServiceSettings.get_azure_german_settings
|
135
137
|
when "azure"
|
136
|
-
::
|
138
|
+
::MsRestAzure2::ActiveDirectoryServiceSettings.get_azure_settings
|
137
139
|
end
|
138
140
|
end
|
139
141
|
|
140
142
|
#
|
141
|
-
# Retrieves a [
|
143
|
+
# Retrieves a [MsRestAzure2::AzureEnvironment] object representing endpoint settings for the given cloud.
|
142
144
|
#
|
143
|
-
# @return [
|
145
|
+
# @return [MsRestAzure2::AzureEnvironment] Settings to be used for subsequent requests
|
144
146
|
#
|
145
147
|
def endpoint_settings
|
146
148
|
case environment.downcase
|
147
149
|
when "azureusgovernment"
|
148
|
-
::
|
150
|
+
::MsRestAzure2::AzureEnvironments::AzureUSGovernment
|
149
151
|
when "azurechina"
|
150
|
-
::
|
152
|
+
::MsRestAzure2::AzureEnvironments::AzureChinaCloud
|
151
153
|
when "azuregermancloud"
|
152
|
-
::
|
154
|
+
::MsRestAzure2::AzureEnvironments::AzureGermanCloud
|
153
155
|
when "azure"
|
154
|
-
::
|
156
|
+
::MsRestAzure2::AzureEnvironments::AzureCloud
|
155
157
|
end
|
156
158
|
end
|
157
159
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require "kitchen"
|
2
2
|
|
3
|
-
autoload :
|
3
|
+
autoload :MsRestAzure2, "ms_rest_azure2"
|
4
4
|
require_relative "azure_credentials"
|
5
5
|
require "securerandom" unless defined?(SecureRandom)
|
6
6
|
module Azure
|
7
|
-
autoload :
|
8
|
-
autoload :
|
7
|
+
autoload :Resources2, "azure_mgmt_resources2"
|
8
|
+
autoload :Network2, "azure_mgmt_network2"
|
9
9
|
end
|
10
10
|
require "base64" unless defined?(Base64)
|
11
11
|
autoload :SSHKey, "sshkey"
|
@@ -21,7 +21,7 @@ module Kitchen
|
|
21
21
|
# Azurerm
|
22
22
|
# Create a new resource group object and set the location and tags attributes then return it.
|
23
23
|
#
|
24
|
-
# @return [::Azure::
|
24
|
+
# @return [::Azure::Resources2::Profiles::Latest::Mgmt::Models::ResourceGroup] A new resource group object.
|
25
25
|
class Azurerm < Kitchen::Driver::Base
|
26
26
|
attr_accessor :resource_management_client
|
27
27
|
attr_accessor :network_management_client
|
@@ -84,6 +84,11 @@ module Kitchen
|
|
84
84
|
SecureRandom.base64(25)
|
85
85
|
end
|
86
86
|
|
87
|
+
# This prefix MUST be no longer than 3 characters
|
88
|
+
default_config(:vm_prefix) do |_config|
|
89
|
+
"tk-"
|
90
|
+
end
|
91
|
+
|
87
92
|
default_config :vm_name, nil
|
88
93
|
|
89
94
|
default_config :store_deployment_credentials_in_state, true
|
@@ -298,13 +303,13 @@ module Kitchen
|
|
298
303
|
environment: config[:azure_environment]).azure_options
|
299
304
|
|
300
305
|
debug "Azure environment: #{config[:azure_environment]}"
|
301
|
-
@resource_management_client = ::Azure::
|
306
|
+
@resource_management_client = ::Azure::Resources2::Profiles::Latest::Mgmt::Client.new(options)
|
302
307
|
|
303
308
|
# Create Resource Group
|
304
309
|
begin
|
305
310
|
info "Creating Resource Group: #{state[:azure_resource_group_name]}"
|
306
311
|
create_resource_group(state[:azure_resource_group_name], get_resource_group)
|
307
|
-
rescue ::
|
312
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
308
313
|
error operation_error.body
|
309
314
|
raise operation_error
|
310
315
|
end
|
@@ -333,7 +338,7 @@ module Kitchen
|
|
333
338
|
create_deployment_async(state[:azure_resource_group_name], post_deployment_name, post_deployment(config[:post_deployment_template], config[:post_deployment_parameters])).value!
|
334
339
|
follow_deployment_until_end_state(state[:azure_resource_group_name], post_deployment_name)
|
335
340
|
end
|
336
|
-
rescue ::
|
341
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
337
342
|
rest_error = operation_error.body["error"]
|
338
343
|
deployment_active = rest_error["code"] == "DeploymentActive"
|
339
344
|
if deployment_active
|
@@ -345,7 +350,7 @@ module Kitchen
|
|
345
350
|
end
|
346
351
|
end
|
347
352
|
|
348
|
-
@network_management_client = ::Azure::
|
353
|
+
@network_management_client = ::Azure::Network2::Profiles::Latest::Mgmt::Client.new(options)
|
349
354
|
|
350
355
|
if config[:vnet_id] == "" || config[:public_ip]
|
351
356
|
# Retrieve the public IP from the resource group:
|
@@ -379,7 +384,7 @@ module Kitchen
|
|
379
384
|
# @return [Hash] Updated Hash of state values.
|
380
385
|
def validate_state(state = {})
|
381
386
|
state[:uuid] = SecureRandom.hex(8) unless existing_state_value?(state, :uuid)
|
382
|
-
state[:vm_name] = config[:vm_name] || "
|
387
|
+
state[:vm_name] = config[:vm_name] || "#{config[:vm_prefix]}#{state[:uuid][0..11]}" unless existing_state_value?(state, :vm_name)
|
383
388
|
state[:server_id] = "vm#{state[:uuid]}" unless existing_state_value?(state, :server_id)
|
384
389
|
state[:azure_resource_group_name] = azure_resource_group_name unless existing_state_value?(state, :azure_resource_group_name)
|
385
390
|
%i{subscription_id azure_environment use_managed_disks}.each do |config_element|
|
@@ -464,9 +469,9 @@ module Kitchen
|
|
464
469
|
|
465
470
|
def pre_deployment(pre_deployment_template_filename, pre_deployment_parameters)
|
466
471
|
pre_deployment_template = ::File.read(pre_deployment_template_filename)
|
467
|
-
pre_deployment = ::Azure::
|
468
|
-
pre_deployment.properties = ::Azure::
|
469
|
-
pre_deployment.properties.mode = ::Azure::
|
472
|
+
pre_deployment = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::Deployment.new
|
473
|
+
pre_deployment.properties = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentProperties.new
|
474
|
+
pre_deployment.properties.mode = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentMode::Incremental
|
470
475
|
pre_deployment.properties.template = JSON.parse(pre_deployment_template)
|
471
476
|
pre_deployment.properties.parameters = parameters_in_values_format(pre_deployment_parameters)
|
472
477
|
debug(pre_deployment.properties.template)
|
@@ -475,9 +480,9 @@ module Kitchen
|
|
475
480
|
|
476
481
|
def deployment(parameters)
|
477
482
|
template = template_for_transport_name
|
478
|
-
deployment = ::Azure::
|
479
|
-
deployment.properties = ::Azure::
|
480
|
-
deployment.properties.mode = ::Azure::
|
483
|
+
deployment = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::Deployment.new
|
484
|
+
deployment.properties = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentProperties.new
|
485
|
+
deployment.properties.mode = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentMode::Incremental
|
481
486
|
deployment.properties.template = JSON.parse(template)
|
482
487
|
deployment.properties.parameters = parameters_in_values_format(parameters)
|
483
488
|
debug(JSON.pretty_generate(deployment.properties.template))
|
@@ -486,9 +491,9 @@ module Kitchen
|
|
486
491
|
|
487
492
|
def post_deployment(post_deployment_template_filename, post_deployment_parameters)
|
488
493
|
post_deployment_template = ::File.read(post_deployment_template_filename)
|
489
|
-
post_deployment = ::Azure::
|
490
|
-
post_deployment.properties = ::Azure::
|
491
|
-
post_deployment.properties.mode = ::Azure::
|
494
|
+
post_deployment = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::Deployment.new
|
495
|
+
post_deployment.properties = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentProperties.new
|
496
|
+
post_deployment.properties.mode = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentMode::Incremental
|
492
497
|
post_deployment.properties.template = JSON.parse(post_deployment_template)
|
493
498
|
post_deployment.properties.parameters = parameters_in_values_format(post_deployment_parameters)
|
494
499
|
debug(post_deployment.properties.template)
|
@@ -497,9 +502,9 @@ module Kitchen
|
|
497
502
|
|
498
503
|
def empty_deployment
|
499
504
|
template = virtual_machine_deployment_template_file("empty.erb", nil)
|
500
|
-
empty_deployment = ::Azure::
|
501
|
-
empty_deployment.properties = ::Azure::
|
502
|
-
empty_deployment.properties.mode = ::Azure::
|
505
|
+
empty_deployment = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::Deployment.new
|
506
|
+
empty_deployment.properties = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentProperties.new
|
507
|
+
empty_deployment.properties.mode = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::DeploymentMode::Complete
|
503
508
|
empty_deployment.properties.template = JSON.parse(template)
|
504
509
|
debug(JSON.pretty_generate(empty_deployment.properties.template))
|
505
510
|
empty_deployment
|
@@ -570,7 +575,7 @@ module Kitchen
|
|
570
575
|
# Setup our authentication components for the SDK
|
571
576
|
options = Kitchen::Driver::AzureCredentials.new(subscription_id: state[:subscription_id],
|
572
577
|
environment: state[:azure_environment]).azure_options
|
573
|
-
@resource_management_client = ::Azure::
|
578
|
+
@resource_management_client = ::Azure::Resources2::Profiles::Latest::Mgmt::Client.new(options)
|
574
579
|
|
575
580
|
# If we don't have any instances, let's check to see if the user wants to delete a resource group and if so let's delete!
|
576
581
|
if state[:server_id].nil? && state[:azure_resource_group_name].nil? && !config[:explicit_resource_group_name].nil? && config[:destroy_explicit_resource_group]
|
@@ -581,7 +586,7 @@ module Kitchen
|
|
581
586
|
delete_resource_group_async(config[:explicit_resource_group_name])
|
582
587
|
info "Destroy operation accepted and will continue in the background."
|
583
588
|
return
|
584
|
-
rescue ::
|
589
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
585
590
|
error operation_error.body
|
586
591
|
raise operation_error
|
587
592
|
end
|
@@ -614,12 +619,12 @@ module Kitchen
|
|
614
619
|
resource_group.tags = {}
|
615
620
|
create_resource_group(state[:azure_resource_group_name], resource_group) unless config[:destroy_explicit_resource_group_tags] == false
|
616
621
|
warn 'The "destroy_explicit_resource_group_tags" setting value is set to "true". The tags on the resource group will be removed.' unless config[:destroy_explicit_resource_group_tags] == false
|
617
|
-
rescue ::
|
622
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
618
623
|
error operation_error.body
|
619
624
|
raise operation_error
|
620
625
|
end
|
621
626
|
|
622
|
-
rescue ::
|
627
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
623
628
|
error operation_error.body
|
624
629
|
raise operation_error
|
625
630
|
end
|
@@ -639,7 +644,7 @@ module Kitchen
|
|
639
644
|
info "Destroy operation accepted and will continue in the background."
|
640
645
|
# Remove resource group name from driver state
|
641
646
|
state.delete(:azure_resource_group_name)
|
642
|
-
rescue ::
|
647
|
+
rescue ::MsRestAzure2::AzureOperationError => operation_error
|
643
648
|
error operation_error.body
|
644
649
|
raise operation_error
|
645
650
|
end
|
@@ -741,10 +746,10 @@ module Kitchen
|
|
741
746
|
|
742
747
|
def virtual_machine_deployment_template
|
743
748
|
if config[:vnet_id] == ""
|
744
|
-
virtual_machine_deployment_template_file("public.erb", vm_tags: vm_tag_string(config[:vm_tags]), use_managed_disks: config[:use_managed_disks], image_url: config[:image_url], storage_account_type: config[:storage_account_type], existing_storage_account_blob_url: config[:existing_storage_account_blob_url], image_id: config[:image_id], existing_storage_account_container: config[:existing_storage_account_container], custom_data: config[:custom_data], os_disk_size_gb: config[:os_disk_size_gb], data_disks_for_vm_json
|
749
|
+
virtual_machine_deployment_template_file("public.erb", vm_tags: vm_tag_string(config[:vm_tags]), use_managed_disks: config[:use_managed_disks], image_url: config[:image_url], storage_account_type: config[:storage_account_type], existing_storage_account_blob_url: config[:existing_storage_account_blob_url], image_id: config[:image_id], existing_storage_account_container: config[:existing_storage_account_container], custom_data: config[:custom_data], os_disk_size_gb: config[:os_disk_size_gb], data_disks_for_vm_json:, use_ephemeral_osdisk: config[:use_ephemeral_osdisk], ssh_key: instance.transport[:ssh_key], plan_json:)
|
745
750
|
else
|
746
751
|
info "Using custom vnet: #{config[:vnet_id]}"
|
747
|
-
virtual_machine_deployment_template_file("internal.erb", vnet_id: config[:vnet_id], subnet_id: config[:subnet_id], public_ip: config[:public_ip], vm_tags: vm_tag_string(config[:vm_tags]), use_managed_disks: config[:use_managed_disks], image_url: config[:image_url], storage_account_type: config[:storage_account_type], existing_storage_account_blob_url: config[:existing_storage_account_blob_url], image_id: config[:image_id], existing_storage_account_container: config[:existing_storage_account_container], custom_data: config[:custom_data], os_disk_size_gb: config[:os_disk_size_gb], data_disks_for_vm_json
|
752
|
+
virtual_machine_deployment_template_file("internal.erb", vnet_id: config[:vnet_id], subnet_id: config[:subnet_id], public_ip: config[:public_ip], vm_tags: vm_tag_string(config[:vm_tags]), use_managed_disks: config[:use_managed_disks], image_url: config[:image_url], storage_account_type: config[:storage_account_type], existing_storage_account_blob_url: config[:existing_storage_account_blob_url], image_id: config[:image_id], existing_storage_account_container: config[:existing_storage_account_container], custom_data: config[:custom_data], os_disk_size_gb: config[:os_disk_size_gb], data_disks_for_vm_json:, use_ephemeral_osdisk: config[:use_ephemeral_osdisk], ssh_key: instance.transport[:ssh_key], public_ip_sku: config[:public_ip_sku], plan_json:)
|
748
753
|
end
|
749
754
|
end
|
750
755
|
|
@@ -769,13 +774,13 @@ module Kitchen
|
|
769
774
|
def resource_manager_endpoint_url(azure_environment)
|
770
775
|
case azure_environment.downcase
|
771
776
|
when "azureusgovernment"
|
772
|
-
|
777
|
+
MsRestAzure2::AzureEnvironments::AzureUSGovernment.resource_manager_endpoint_url
|
773
778
|
when "azurechina"
|
774
|
-
|
779
|
+
MsRestAzure2::AzureEnvironments::AzureChinaCloud.resource_manager_endpoint_url
|
775
780
|
when "azuregermancloud"
|
776
|
-
|
781
|
+
MsRestAzure2::AzureEnvironments::AzureGermanCloud.resource_manager_endpoint_url
|
777
782
|
when "azure"
|
778
|
-
|
783
|
+
MsRestAzure2::AzureEnvironments::AzureCloud.resource_manager_endpoint_url
|
779
784
|
end
|
780
785
|
end
|
781
786
|
|
@@ -798,9 +803,9 @@ module Kitchen
|
|
798
803
|
|
799
804
|
# Create a new resource group object and set the location and tags attributes then return it.
|
800
805
|
#
|
801
|
-
# @return [::Azure::
|
806
|
+
# @return [::Azure::Resources2::Profiles::Latest::Mgmt::Models::ResourceGroup] A new resource group object.
|
802
807
|
def get_resource_group
|
803
|
-
resource_group = ::Azure::
|
808
|
+
resource_group = ::Azure::Resources2::Profiles::Latest::Mgmt::Models::ResourceGroup.new
|
804
809
|
resource_group.location = config[:location]
|
805
810
|
resource_group.tags = config[:resource_group_tags]
|
806
811
|
resource_group
|
@@ -868,7 +873,7 @@ module Kitchen
|
|
868
873
|
def get_network_interface(resource_group_name, network_interface_name)
|
869
874
|
retries = config[:azure_api_retries]
|
870
875
|
begin
|
871
|
-
network_interfaces = ::Azure::
|
876
|
+
network_interfaces = ::Azure::Network2::Profiles::Latest::Mgmt::NetworkInterfaces.new(network_management_client)
|
872
877
|
network_interfaces.get(resource_group_name, network_interface_name)
|
873
878
|
rescue Faraday::TimeoutError, Faraday::ClientError => exception
|
874
879
|
send_exception_message(exception, "while fetching network interface '#{network_interface_name}' for resource group '#{resource_group_name}'. #{retries} retries left.")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-azurerm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Preston
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: azure_mgmt_network2
|
@@ -16,28 +16,40 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.0.1
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.1
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: 1.0.1
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.1
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: azure_mgmt_resources2
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
39
|
+
version: 1.0.1
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.0.1
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
47
|
- - "~>"
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
49
|
+
version: 1.0.1
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.0.1
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: inifile
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
143
|
- !ruby/object:Gem::Version
|
132
144
|
version: '0'
|
133
145
|
requirements: []
|
134
|
-
rubygems_version: 3.
|
146
|
+
rubygems_version: 3.4.10
|
135
147
|
signing_key:
|
136
148
|
specification_version: 4
|
137
149
|
summary: Test Kitchen driver for Azure Resource Manager.
|