knife-azure 1.9.0 → 2.0.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/azure/azure_interface.rb +2 -3
  3. data/lib/azure/custom_errors.rb +1 -1
  4. data/lib/azure/helpers.rb +1 -1
  5. data/lib/azure/resource_management/ARM_deployment_template.rb +157 -162
  6. data/lib/azure/resource_management/ARM_interface.rb +72 -73
  7. data/lib/azure/resource_management/vnet_config.rb +11 -10
  8. data/lib/azure/resource_management/windows_credentials.rb +19 -19
  9. data/lib/azure/service_management/ASM_interface.rb +6 -5
  10. data/lib/azure/service_management/ag.rb +11 -11
  11. data/lib/azure/service_management/certificate.rb +7 -5
  12. data/lib/azure/service_management/connection.rb +10 -10
  13. data/lib/azure/service_management/deploy.rb +12 -14
  14. data/lib/azure/service_management/disk.rb +4 -2
  15. data/lib/azure/service_management/host.rb +7 -4
  16. data/lib/azure/service_management/image.rb +4 -4
  17. data/lib/azure/service_management/loadbalancer.rb +2 -2
  18. data/lib/azure/service_management/rest.rb +9 -8
  19. data/lib/azure/service_management/role.rb +67 -70
  20. data/lib/azure/service_management/storageaccount.rb +5 -3
  21. data/lib/azure/service_management/utility.rb +1 -1
  22. data/lib/azure/service_management/vnet.rb +1 -1
  23. data/lib/chef/knife/azure_ag_create.rb +13 -13
  24. data/lib/chef/knife/azure_ag_list.rb +1 -1
  25. data/lib/chef/knife/azure_base.rb +49 -66
  26. data/lib/chef/knife/azure_image_list.rb +6 -6
  27. data/lib/chef/knife/azure_internal-lb_create.rb +14 -14
  28. data/lib/chef/knife/azure_internal-lb_list.rb +1 -1
  29. data/lib/chef/knife/azure_server_create.rb +233 -268
  30. data/lib/chef/knife/azure_server_delete.rb +31 -31
  31. data/lib/chef/knife/azure_server_list.rb +1 -1
  32. data/lib/chef/knife/azure_server_show.rb +1 -1
  33. data/lib/chef/knife/azure_vnet_create.rb +15 -19
  34. data/lib/chef/knife/azure_vnet_list.rb +1 -1
  35. data/lib/chef/knife/azurerm_base.rb +39 -28
  36. data/lib/chef/knife/azurerm_server_create.rb +112 -177
  37. data/lib/chef/knife/azurerm_server_delete.rb +13 -13
  38. data/lib/chef/knife/azurerm_server_list.rb +1 -1
  39. data/lib/chef/knife/azurerm_server_show.rb +1 -1
  40. data/lib/chef/knife/bootstrap/bootstrapper.rb +34 -238
  41. data/lib/chef/knife/bootstrap/common_bootstrap_options.rb +77 -76
  42. data/lib/chef/knife/bootstrap_azure.rb +56 -33
  43. data/lib/chef/knife/bootstrap_azurerm.rb +46 -29
  44. data/lib/knife-azure/version.rb +18 -1
  45. metadata +28 -16
  46. data/lib/chef/knife/bootstrap/bootstrap_options.rb +0 -105
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Barry Davis (barryd@jetstreamsoftware.com)
3
- # Copyright:: Copyright 2010-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,9 +26,9 @@ module Azure
26
26
  # force_load should be true when there is something in local cache and we want to reload
27
27
  # first call is always load.
28
28
  def load(force_load = false)
29
- if not @azure_storage_accounts || force_load
29
+ unless @azure_storage_accounts || force_load
30
30
  @azure_storage_accounts = begin
31
- azure_storage_accounts = Hash.new
31
+ azure_storage_accounts = {}
32
32
  responseXML = @connection.query_azure("storageservices")
33
33
  servicesXML = responseXML.css("StorageServices StorageService")
34
34
  servicesXML.each do |serviceXML|
@@ -48,6 +48,7 @@ module Azure
48
48
  # first look up local cache if we have already loaded list.
49
49
  def exists?(name)
50
50
  return @azure_storage_accounts.key?(name) if @azure_storage_accounts
51
+
51
52
  exists_on_cloud?(name)
52
53
  end
53
54
 
@@ -71,6 +72,7 @@ module Azure
71
72
  def clear_unattached
72
73
  all.each do |storage|
73
74
  next unless storage.attached == false
75
+
74
76
  @connection.query_azure("storageaccounts/" + storage.name, "delete")
75
77
  end
76
78
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Barry Davis (barryd@jetstreamsoftware.com)
3
- # Copyright:: Copyright 2010-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Jeff Mendoza (jeffmendoza@live.com)
3
- # Copyright:: Copyright 2013-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Jeff Mendoza (jeffmendoza@live.com)
3
- # Copyright:: Copyright 2013-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,18 +26,18 @@ class Chef
26
26
  banner "knife azure ag create (options)"
27
27
 
28
28
  option :azure_affinity_group,
29
- :short => "-a GROUP",
30
- :long => "--azure-affinity-group GROUP",
31
- :description => "Specifies new affinity group name."
29
+ short: "-a GROUP",
30
+ long: "--azure-affinity-group GROUP",
31
+ description: "Specifies new affinity group name."
32
32
 
33
33
  option :azure_ag_desc,
34
- :long => "--azure-ag-desc DESC",
35
- :description => "Optional. Description for new affinity group."
34
+ long: "--azure-ag-desc DESC",
35
+ description: "Optional. Description for new affinity group."
36
36
 
37
37
  option :azure_service_location,
38
- :short => "-m LOCATION",
39
- :long => "--azure-service-location LOCATION",
40
- :description => "Specifies the geographic location - the name of "\
38
+ short: "-m LOCATION",
39
+ long: "--azure-service-location LOCATION",
40
+ description: "Specifies the geographic location - the name of "\
41
41
  "the data center location that is valid for your "\
42
42
  "subscription. Eg: West US, East US, "\
43
43
  "East Asia, Southeast Asia, North Europe, West Europe"
@@ -47,7 +47,7 @@ class Chef
47
47
 
48
48
  Chef::Log.info("validating...")
49
49
  validate_asm_keys!(:azure_affinity_group,
50
- :azure_service_location)
50
+ :azure_service_location)
51
51
 
52
52
  params = {
53
53
  azure_ag_name: locate_config_value(:azure_affinity_group),
@@ -61,11 +61,11 @@ class Chef
61
61
  if rsp.at_css("Code").nil? || rsp.at_css("Message").nil?
62
62
  puts "Unknown Error. try -VV"
63
63
  else
64
- puts "#{rsp.at_css('Code').content}: "\
65
- "#{rsp.at_css('Message').content}"
64
+ puts "#{rsp.at_css("Code").content}: "\
65
+ "#{rsp.at_css("Message").content}"
66
66
  end
67
67
  else
68
- puts "Creation status: #{rsp.at_css('Status').content}"
68
+ puts "Creation status: #{rsp.at_css("Status").content}"
69
69
  end
70
70
  end
71
71
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Jeff Mendoza (jeffmendoza@live.com)
3
- # Copyright:: Copyright 2013-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,7 +1,6 @@
1
-
2
1
  # Author:: Barry Davis (barryd@jetstreamsoftware.com)
3
2
  # Author:: Seth Chisamore (<schisamo@chef.io>)
4
- # Copyright:: Copyright 2011-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
5
4
  # License:: Apache License, Version 2.0
6
5
  #
7
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,67 +22,65 @@ require "azure/service_management/ASM_interface"
23
22
  class Chef
24
23
  class Knife
25
24
  module AzureBase
26
-
27
25
  # :nodoc:
28
26
  # Would prefer to do this in a rational way, but can't be done b/c of
29
27
  # Mixlib::CLI's design :(
30
28
  def self.included(includer)
31
29
  includer.class_eval do
32
-
33
30
  deps do
34
31
  require "readline"
35
32
  require "chef/json_compat"
36
33
  end
37
34
 
38
35
  option :azure_subscription_id,
39
- :short => "-S ID",
40
- :long => "--azure-subscription-id ID",
41
- :description => "Your Azure subscription ID",
42
- :proc => Proc.new { |key| Chef::Config[:knife][:azure_subscription_id] = key }
36
+ short: "-S ID",
37
+ long: "--azure-subscription-id ID",
38
+ description: "Your Azure subscription ID",
39
+ proc: proc { |key| Chef::Config[:knife][:azure_subscription_id] = key }
43
40
 
44
41
  option :azure_mgmt_cert,
45
- :short => "-p FILENAME",
46
- :long => "--azure-mgmt-cert FILENAME",
47
- :description => "Your Azure PEM file name",
48
- :proc => Proc.new { |key| Chef::Config[:knife][:azure_mgmt_cert] = key }
42
+ short: "-p FILENAME",
43
+ long: "--azure-mgmt-cert FILENAME",
44
+ description: "Your Azure PEM file name",
45
+ proc: proc { |key| Chef::Config[:knife][:azure_mgmt_cert] = key }
49
46
 
50
47
  option :azure_api_host_name,
51
- :short => "-H HOSTNAME",
52
- :long => "--azure-api-host-name HOSTNAME",
53
- :description => "Your Azure host name",
54
- :proc => Proc.new { |key| Chef::Config[:knife][:azure_api_host_name] = key }
48
+ short: "-H HOSTNAME",
49
+ long: "--azure-api-host-name HOSTNAME",
50
+ description: "Your Azure host name",
51
+ proc: proc { |key| Chef::Config[:knife][:azure_api_host_name] = key }
55
52
 
56
53
  option :verify_ssl_cert,
57
- :long => "--verify-ssl-cert",
58
- :description => "Verify SSL Certificates for communication over HTTPS",
59
- :boolean => true,
60
- :default => false
54
+ long: "--verify-ssl-cert",
55
+ description: "Verify SSL Certificates for communication over HTTPS",
56
+ boolean: true,
57
+ default: false
61
58
 
62
59
  option :azure_publish_settings_file,
63
- :long => "--azure-publish-settings-file FILENAME",
64
- :description => "Your Azure Publish Settings File",
65
- :proc => Proc.new { |key| Chef::Config[:knife][:azure_publish_settings_file] = key }
60
+ long: "--azure-publish-settings-file FILENAME",
61
+ description: "Your Azure Publish Settings File",
62
+ proc: proc { |key| Chef::Config[:knife][:azure_publish_settings_file] = key }
66
63
  end
67
64
  end
68
65
 
69
66
  def is_image_windows?
70
67
  images = service.list_images
71
68
  target_image = images.select { |i| i.name == locate_config_value(:azure_source_image) }
72
- unless target_image[0].nil?
73
- return target_image[0].os == "Windows"
74
- else
75
- ui.error("Invalid image. Use the command \"knife azure image list\" to verify the image name")
69
+ if target_image[0].nil?
70
+ ui.error('Invalid image. Use the command "knife azure image list" to verify the image name')
76
71
  exit 1
72
+ else
73
+ return target_image[0].os == "Windows"
77
74
  end
78
75
  end
79
76
 
80
77
  def service
81
78
  @service ||= begin
82
79
  service = Azure::ServiceManagement::ASMInterface.new(
83
- :azure_subscription_id => locate_config_value(:azure_subscription_id),
84
- :azure_mgmt_cert => locate_config_value(:azure_mgmt_cert),
85
- :azure_api_host_name => locate_config_value(:azure_api_host_name),
86
- :verify_ssl_cert => locate_config_value(:verify_ssl_cert)
80
+ azure_subscription_id: locate_config_value(:azure_subscription_id),
81
+ azure_mgmt_cert: locate_config_value(:azure_mgmt_cert),
82
+ azure_api_host_name: locate_config_value(:azure_api_host_name),
83
+ verify_ssl_cert: locate_config_value(:verify_ssl_cert)
87
84
  )
88
85
  end
89
86
  @service.ui = ui
@@ -120,19 +117,14 @@ class Chef
120
117
  end
121
118
 
122
119
  def pretty_key(key)
123
- key.to_s.tr("_", " ").gsub(/\w+/) { |w| (w =~ /(ssh)|(aws)/i) ? w.upcase : w.capitalize }
120
+ key.to_s.tr("_", " ").gsub(/\w+/) { |w| w =~ /(ssh)|(aws)/i ? w.upcase : w.capitalize }
124
121
  end
125
122
 
126
123
  # validate command pre-requisites (cli options)
127
- # (locate_config_value(:winrm_password).length <= 6 && locate_config_value(:winrm_password).length >= 72)
124
+ # (locate_config_value(:connection_password).length <= 6 && locate_config_value(:connection_password).length >= 72)
128
125
  def validate_params!
129
- if locate_config_value(:winrm_password) && !locate_config_value(:winrm_password).strip.size.between?(6, 72)
130
- ui.error("The supplied password must be 6-72 characters long and meet password complexity requirements")
131
- exit 1
132
- end
133
-
134
- if locate_config_value(:ssh_password) && !locate_config_value(:ssh_password).empty? && !locate_config_value(:ssh_password).strip.size.between?(6, 72)
135
- ui.error("The supplied ssh password must be 6-72 characters long and meet password complexity requirements")
126
+ if locate_config_value(:connection_password) && !locate_config_value(:connection_password).length.between?(6, 72)
127
+ ui.error("The supplied connection password must be 6-72 characters long and meet password complexity requirements")
136
128
  exit 1
137
129
  end
138
130
 
@@ -141,20 +133,12 @@ class Chef
141
133
  exit 1
142
134
  end
143
135
 
144
- if locate_config_value(:azure_service_location) && locate_config_value(:azure_affinity_group)
145
- ui.error("Cannot specify both --azure-service-location and --azure-affinity-group, use one or the other.")
146
- exit 1
147
- elsif locate_config_value(:azure_service_location).nil? && locate_config_value(:azure_affinity_group).nil?
148
- ui.error("Must specify either --azure-service-location or --azure-affinity-group.")
149
- exit 1
150
- end
151
-
152
- if locate_config_value(:winrm_authentication_protocol) && ! %w{basic negotiate kerberos}.include?(locate_config_value(:winrm_authentication_protocol).downcase)
153
- ui.error("Invalid value for --winrm-authentication-protocol option. Use valid protocol values i.e [basic, negotiate, kerberos]")
136
+ unless !!locate_config_value(:azure_service_location) ^ !!locate_config_value(:azure_affinity_group)
137
+ ui.error("Specify either --azure-service-location or --azure-affinity-group")
154
138
  exit 1
155
139
  end
156
140
 
157
- if !(service.valid_image?(locate_config_value(:azure_source_image)))
141
+ unless service.valid_image?(locate_config_value(:azure_source_image))
158
142
  ui.error("Image '#{locate_config_value(:azure_source_image)}' is invalid")
159
143
  exit 1
160
144
  end
@@ -167,17 +151,17 @@ class Chef
167
151
  end
168
152
  end
169
153
 
170
- if locate_config_value(:winrm_transport) == "ssl" && locate_config_value(:thumbprint).nil? && ( locate_config_value(:winrm_ssl_verify_mode).nil? || locate_config_value(:winrm_ssl_verify_mode) == :verify_peer )
171
- ui.error("The SSL transport was specified without the --thumbprint option. Specify a thumbprint, or alternatively set the --winrm-ssl-verify-mode option to 'verify_none' to skip verification.")
154
+ if locate_config_value(:winrm_ssl) && locate_config_value(:thumbprint).nil? && locate_config_value(:winrm_no_verify_cert).nil?
155
+ ui.error("The SSL transport was specified without the --thumbprint option. Specify a thumbprint, or alternatively set the --winrm-no-verify-cert option to skip verification.")
172
156
  exit 1
173
157
  end
174
158
 
175
- if locate_config_value(:extended_logs) && locate_config_value(:bootstrap_protocol) != "cloud-api"
159
+ if locate_config_value(:extended_logs) && locate_config_value(:connection_protocol) != "cloud-api"
176
160
  ui.error("--extended-logs option only works with --bootstrap-protocol cloud-api")
177
161
  exit 1
178
162
  end
179
163
 
180
- if locate_config_value(:bootstrap_protocol) == "cloud-api" && locate_config_value(:azure_vm_name).nil? && locate_config_value(:azure_dns_name).nil?
164
+ if locate_config_value(:connection_protocol) == "cloud-api" && locate_config_value(:azure_vm_name).nil? && locate_config_value(:azure_dns_name).nil?
181
165
  ui.error("Specifying the DNS name using --azure-dns-name or VM name using --azure-vm-name option is required with --bootstrap-protocol cloud-api")
182
166
  exit 1
183
167
  end
@@ -187,7 +171,7 @@ class Chef
187
171
  raise ArgumentError, "The daemon option is only supported for Windows nodes."
188
172
  end
189
173
 
190
- unless locate_config_value(:bootstrap_protocol) == "cloud-api"
174
+ unless locate_config_value(:connection_protocol) == "cloud-api"
191
175
  raise ArgumentError, "The --daemon option requires the use of --bootstrap-protocol cloud-api"
192
176
  end
193
177
 
@@ -205,17 +189,15 @@ class Chef
205
189
  errors << "You did not provide a valid '#{pretty_key(k)}' value. Please set knife[:#{k}] in your knife.rb or pass as an option."
206
190
  end
207
191
  end
208
- if errors.each { |e| ui.error(e) }.any?
209
- exit 1
210
- end
192
+ exit 1 if errors.each { |e| ui.error(e) }.any?
211
193
  end
212
194
 
213
195
  # validate ASM mandatory keys
214
196
  def validate_asm_keys!(*keys)
215
- mandatory_keys = [:azure_subscription_id, :azure_mgmt_cert, :azure_api_host_name]
197
+ mandatory_keys = %i{azure_subscription_id azure_mgmt_cert azure_api_host_name}
216
198
  keys.concat(mandatory_keys)
217
199
 
218
- if !locate_config_value(:azure_mgmt_cert).nil?
200
+ unless locate_config_value(:azure_mgmt_cert).nil?
219
201
  config[:azure_mgmt_cert] = File.read find_file(locate_config_value(:azure_mgmt_cert))
220
202
  end
221
203
 
@@ -239,7 +221,7 @@ class Chef
239
221
  doc = Nokogiri::XML(File.open(find_file(filename)))
240
222
  profile = doc.at_css("PublishProfile")
241
223
  subscription = profile.at_css("Subscription")
242
- #check given PublishSettings XML file format.Currently PublishSettings file have two different XML format
224
+ # check given PublishSettings XML file format.Currently PublishSettings file have two different XML format
243
225
  if profile.attribute("SchemaVersion").nil?
244
226
  management_cert = OpenSSL::PKCS12.new(Base64.decode64(profile.attribute("ManagementCertificate").value))
245
227
  Chef::Config[:knife][:azure_api_host_name] = URI(profile.attribute("Url").value).host
@@ -268,7 +250,7 @@ class Chef
268
250
  azure_profile = File.read(File.expand_path(filename))
269
251
  azure_profile = JSON.parse(azure_profile)
270
252
  default_subscription = get_default_subscription(azure_profile)
271
- if default_subscription.has_key?("id") && default_subscription.has_key?("managementCertificate") && default_subscription.has_key?("managementEndpointUrl")
253
+ if default_subscription.key?("id") && default_subscription.key?("managementCertificate") && default_subscription.key?("managementEndpointUrl")
272
254
 
273
255
  Chef::Config[:knife][:azure_subscription_id] = default_subscription["id"]
274
256
  mgmt_key = OpenSSL::PKey::RSA.new(default_subscription["managementCertificate"]["key"]).to_pem
@@ -285,7 +267,7 @@ class Chef
285
267
  first_subscription_as_default = nil
286
268
  azure_profile["subscriptions"].each do |subscription|
287
269
  if subscription["isDefault"]
288
- Chef::Log.info("Default subscription \'#{subscription['name']}\'' selected.")
270
+ Chef::Log.info("Default subscription \'#{subscription["name"]}\'' selected.")
289
271
  return subscription
290
272
  end
291
273
 
@@ -293,7 +275,7 @@ class Chef
293
275
  end
294
276
 
295
277
  if first_subscription_as_default
296
- Chef::Log.info("First subscription \'#{subscription['name']}\' selected as default.")
278
+ Chef::Log.info("First subscription \'#{subscription["name"]}\' selected as default.")
297
279
  else
298
280
  Chef::Log.info("No subscriptions found.")
299
281
  exit 1
@@ -352,6 +334,7 @@ class Chef
352
334
 
353
335
  def fetch_substatus(extension)
354
336
  return nil if extension.at_css("ExtensionSettingStatus SubStatusList SubStatus").nil?
337
+
355
338
  substatus_list_xml = extension.css("ExtensionSettingStatus SubStatusList SubStatus")
356
339
  substatus_list_xml.each do |substatus|
357
340
  if substatus.at_css("Name").text == "Chef Client run logs"
@@ -398,7 +381,7 @@ class Chef
398
381
  ## unavailability of the substatus field indicates that chef-client run is not completed yet on the server ##
399
382
  fetch_process_wait_time = ((Time.now - fetch_process_start_time) / 60).round
400
383
  if fetch_process_wait_time <= fetch_process_wait_timeout ## wait for maximum 30 minutes until chef-client run logs becomes available ##
401
- print "#{ui.color('.', :bold)}"
384
+ print "#{ui.color(".", :bold)}"
402
385
  sleep 30
403
386
  fetch_chef_client_logs(fetch_process_start_time, fetch_process_wait_timeout)
404
387
  else
@@ -2,7 +2,7 @@
2
2
  # Author:: Barry Davis (barryd@jetstreamsoftware.com)
3
3
  # Author:: Seth Chisamore (<schisamo@chef.io>)
4
4
  # Author:: Adam Jacob (<adam@chef.io>)
5
- # Copyright:: Copyright 2010-2018 Chef Software, Inc.
5
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,10 +29,10 @@ class Chef
29
29
  banner "knife azure image list (options)"
30
30
 
31
31
  option :show_all_fields,
32
- :long => "--full",
33
- :default => false,
34
- :boolean => true,
35
- :description => "Show all the fields of the images"
32
+ long: "--full",
33
+ default: false,
34
+ boolean: true,
35
+ description: "Show all the fields of the images"
36
36
 
37
37
  def run
38
38
  $stdout.sync = true
@@ -43,7 +43,7 @@ class Chef
43
43
  image_labels = !locate_config_value(:show_all_fields) ? %w{Name OS Location} : %w{Name Category Label OS Location}
44
44
  image_list = image_labels.map { |label| ui.color(label, :bold) }
45
45
 
46
- image_items = image_labels.map { |item| item.downcase }
46
+ image_items = image_labels.map(&:downcase)
47
47
  items.each do |image|
48
48
  image_items.each { |item| image_list << image.send(item).to_s }
49
49
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Aiman Alsari (aiman.alsari@gmail.com)
3
- # Copyright:: Copyright 2013-2018 Chef Software, Inc.
3
+ # Copyright:: Copyright 2010-2019, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,22 +26,22 @@ class Chef
26
26
  banner "knife azure internal lb create (options)"
27
27
 
28
28
  option :azure_load_balancer,
29
- :short => "-n NAME",
30
- :long => "--azure-load-balancer NAME",
31
- :description => "Required. Specifies new load balancer name."
29
+ short: "-n NAME",
30
+ long: "--azure-load-balancer NAME",
31
+ description: "Required. Specifies new load balancer name."
32
32
 
33
33
  option :azure_lb_static_vip,
34
- :long => "--azure-lb-static-vip VIP",
35
- :description => "Optional. The Virtual IP that will be used for the load balancer."
34
+ long: "--azure-lb-static-vip VIP",
35
+ description: "Optional. The Virtual IP that will be used for the load balancer."
36
36
 
37
37
  option :azure_subnet_name,
38
- :long => "--azure-subnet-name SUBNET_NAME",
39
- :description => "Required if static VIP is set. Specifies the subnet name "\
38
+ long: "--azure-subnet-name SUBNET_NAME",
39
+ description: "Required if static VIP is set. Specifies the subnet name "\
40
40
  "the load balancer is located in."
41
41
 
42
42
  option :azure_dns_name,
43
- :long => "--azure-dns-name DNS_NAME",
44
- :description => "The DNS prefix name that will be used to add this load balancer to. This must be an existing service/deployment."
43
+ long: "--azure-dns-name DNS_NAME",
44
+ description: "The DNS prefix name that will be used to add this load balancer to. This must be an existing service/deployment."
45
45
 
46
46
  def run
47
47
  $stdout.sync = true
@@ -53,7 +53,7 @@ class Chef
53
53
  azure_load_balancer: locate_config_value(:azure_load_balancer),
54
54
  azure_lb_static_vip: locate_config_value(:azure_lb_static_vip),
55
55
  azure_subnet_name: locate_config_value(:azure_subnet_name),
56
- azure_dns_name: locate_config_value(:azure_dns_name)
56
+ azure_dns_name: locate_config_value(:azure_dns_name),
57
57
  }
58
58
 
59
59
  rsp = service.create_internal_lb(params)
@@ -62,11 +62,11 @@ class Chef
62
62
  if rsp.at_css("Code").nil? || rsp.at_css("Message").nil?
63
63
  puts "Unknown Error. try -VV"
64
64
  else
65
- puts "#{rsp.at_css('Code').content}: "\
66
- "#{rsp.at_css('Message').content}"
65
+ puts "#{rsp.at_css("Code").content}: "\
66
+ "#{rsp.at_css("Message").content}"
67
67
  end
68
68
  else
69
- puts "Creation status: #{rsp.at_css('Status').content}"
69
+ puts "Creation status: #{rsp.at_css("Status").content}"
70
70
  end
71
71
  end
72
72
  end