knife-azure 1.8.7 → 1.9.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 +4 -4
- data/lib/azure/azure_interface.rb +79 -81
- data/lib/azure/custom_errors.rb +34 -35
- data/lib/azure/helpers.rb +43 -44
- data/lib/azure/resource_management/ARM_deployment_template.rb +679 -678
- data/lib/azure/resource_management/ARM_interface.rb +513 -515
- data/lib/azure/resource_management/vnet_config.rb +43 -43
- data/lib/azure/resource_management/windows_credentials.rb +181 -184
- data/lib/azure/service_management/ASM_interface.rb +309 -317
- data/lib/azure/service_management/ag.rb +16 -16
- data/lib/azure/service_management/certificate.rb +30 -31
- data/lib/azure/service_management/connection.rb +31 -31
- data/lib/azure/service_management/deploy.rb +40 -38
- data/lib/azure/service_management/disk.rb +14 -10
- data/lib/azure/service_management/host.rb +28 -24
- data/lib/azure/service_management/image.rb +23 -22
- data/lib/azure/service_management/loadbalancer.rb +12 -12
- data/lib/azure/service_management/rest.rb +20 -19
- data/lib/azure/service_management/role.rb +274 -273
- data/lib/azure/service_management/storageaccount.rb +29 -25
- data/lib/azure/service_management/utility.rb +6 -7
- data/lib/azure/service_management/vnet.rb +44 -44
- data/lib/chef/knife/azure_ag_create.rb +18 -18
- data/lib/chef/knife/azure_ag_list.rb +3 -3
- data/lib/chef/knife/azure_base.rb +56 -56
- data/lib/chef/knife/azure_image_list.rb +8 -10
- data/lib/chef/knife/azure_internal-lb_create.rb +15 -15
- data/lib/chef/knife/azure_internal-lb_list.rb +3 -3
- data/lib/chef/knife/azure_server_create.rb +49 -50
- data/lib/chef/knife/azure_server_delete.rb +22 -24
- data/lib/chef/knife/azure_server_list.rb +4 -4
- data/lib/chef/knife/azure_server_show.rb +5 -5
- data/lib/chef/knife/azure_vnet_create.rb +17 -17
- data/lib/chef/knife/azure_vnet_list.rb +3 -3
- data/lib/chef/knife/azurerm_base.rb +58 -60
- data/lib/chef/knife/azurerm_server_create.rb +23 -22
- data/lib/chef/knife/azurerm_server_delete.rb +30 -34
- data/lib/chef/knife/azurerm_server_list.rb +42 -42
- data/lib/chef/knife/azurerm_server_show.rb +1 -1
- data/lib/chef/knife/bootstrap/bootstrap_options.rb +7 -8
- data/lib/chef/knife/bootstrap/bootstrapper.rb +65 -65
- data/lib/chef/knife/bootstrap/common_bootstrap_options.rb +3 -4
- data/lib/chef/knife/bootstrap_azure.rb +13 -13
- data/lib/chef/knife/bootstrap_azurerm.rb +106 -106
- data/lib/knife-azure/version.rb +2 -2
- metadata +43 -76
- data/lib/azure/resource_management/ARM_base.rb +0 -29
@@ -1,8 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Barry Davis (barryd@jetstreamsoftware.com)
|
3
|
-
# Author:: Seth Chisamore (<schisamo@
|
4
|
-
# Author:: Adam Jacob (<adam@
|
5
|
-
# Copyright:: Copyright
|
3
|
+
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
4
|
+
# Author:: Adam Jacob (<adam@chef.io>)
|
5
|
+
# Copyright:: Copyright 2010-2018 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");
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require File.expand_path(
|
21
|
+
require File.expand_path("../azure_base", __FILE__)
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Knife
|
@@ -1,8 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Barry Davis (barryd@jetstreamsoftware.com)
|
3
|
-
# Author:: Seth Chisamore (<schisamo@
|
4
|
-
# Author:: Adam Jacob (<adam@
|
5
|
-
# Copyright:: Copyright
|
3
|
+
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
4
|
+
# Author:: Adam Jacob (<adam@chef.io>)
|
5
|
+
# Copyright:: Copyright 2010-2018 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");
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# limitations under the License.
|
19
19
|
#
|
20
20
|
|
21
|
-
require File.expand_path(
|
21
|
+
require File.expand_path("../azure_base", __FILE__)
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Knife
|
@@ -26,7 +26,7 @@ class Chef
|
|
26
26
|
|
27
27
|
include Knife::AzureBase
|
28
28
|
|
29
|
-
banner "knife azure server show SERVER [SERVER]"
|
29
|
+
banner "knife azure server show SERVER [SERVER]"
|
30
30
|
|
31
31
|
def run
|
32
32
|
$stdout.sync = true
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Jeff Mendoza (jeffmendoza@live.com)
|
3
|
-
# Copyright:: Copyright
|
3
|
+
# Copyright:: Copyright 2013-2018 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");
|
@@ -16,41 +16,41 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require File.expand_path(
|
19
|
+
require File.expand_path("../azure_base", __FILE__)
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
class Knife
|
23
23
|
class AzureVnetCreate < Knife
|
24
24
|
include Knife::AzureBase
|
25
25
|
|
26
|
-
banner
|
26
|
+
banner "knife azure vnet create (options)"
|
27
27
|
|
28
28
|
option :azure_network_name,
|
29
|
-
:short =>
|
30
|
-
:long =>
|
29
|
+
:short => "-n NETWORK_NAME",
|
30
|
+
:long => "--azure-network-name NETWORK_NAME",
|
31
31
|
:description =>
|
32
|
-
|
32
|
+
"Specifies the name of the virtual network to create."
|
33
33
|
|
34
34
|
option :azure_affinity_group,
|
35
|
-
:short =>
|
36
|
-
:long =>
|
35
|
+
:short => "-a GROUP",
|
36
|
+
:long => "--azure-affinity-group GROUP",
|
37
37
|
:description =>
|
38
|
-
|
38
|
+
"Specifies the affinity group to associate with the vnet."
|
39
39
|
|
40
40
|
option :azure_address_space,
|
41
|
-
:long =>
|
41
|
+
:long => "--azure-address-space CIDR",
|
42
42
|
:description =>
|
43
|
-
|
43
|
+
"Specifies the address space of the vnet using CIDR notation."
|
44
44
|
|
45
45
|
option :azure_subnet_name,
|
46
|
-
:long =>
|
46
|
+
:long => "--azure-subnet-name CIDR",
|
47
47
|
:description =>
|
48
|
-
|
48
|
+
"Specifies the Subnet Name."
|
49
49
|
|
50
50
|
def run
|
51
51
|
$stdout.sync = true
|
52
52
|
|
53
|
-
Chef::Log.info(
|
53
|
+
Chef::Log.info("validating...")
|
54
54
|
validate_asm_keys!(:azure_network_name, :azure_affinity_group, :azure_address_space)
|
55
55
|
|
56
56
|
params = {
|
@@ -62,9 +62,9 @@ class Chef
|
|
62
62
|
|
63
63
|
rsp = service.create_vnet(params)
|
64
64
|
print "\n"
|
65
|
-
if rsp.at_css(
|
66
|
-
if rsp.at_css(
|
67
|
-
puts
|
65
|
+
if rsp.at_css("Status").nil?
|
66
|
+
if rsp.at_css("Code").nil? || rsp.at_css("Message").nil?
|
67
|
+
puts "Unknown Error. try -VV"
|
68
68
|
else
|
69
69
|
puts "#{rsp.at_css('Code').content}: "\
|
70
70
|
"#{rsp.at_css('Message').content}"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Jeff Mendoza (jeffmendoza@live.com)
|
3
|
-
# Copyright:: Copyright
|
3
|
+
# Copyright:: Copyright 2013-2018 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");
|
@@ -16,14 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require File.expand_path(
|
19
|
+
require File.expand_path("../azure_base", __FILE__)
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
class Knife
|
23
23
|
class AzureVnetList < Knife
|
24
24
|
include Knife::AzureBase
|
25
25
|
|
26
|
-
banner
|
26
|
+
banner "knife azure vnet list (options)"
|
27
27
|
|
28
28
|
def run
|
29
29
|
$stdout.sync = true
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
#
|
2
2
|
# Author:: Aliasgar Batterywala (aliasgar.batterywala@clogeny.com)
|
3
3
|
#
|
4
4
|
# Copyright:: Copyright 2009-2018, Chef Software Inc.
|
@@ -17,12 +17,12 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
20
|
+
require "chef/knife"
|
21
|
+
require "azure/resource_management/ARM_interface"
|
22
|
+
require "mixlib/shellout"
|
23
|
+
require "chef/mixin/shell_out"
|
24
|
+
require "time"
|
25
|
+
require "json"
|
26
26
|
|
27
27
|
class Chef
|
28
28
|
class Knife
|
@@ -34,15 +34,15 @@ class Chef
|
|
34
34
|
XPLAT_VERSION_WITH_WCM_DEPRECATED ||= "0.10.5"
|
35
35
|
|
36
36
|
if Chef::Platform.windows?
|
37
|
-
require
|
37
|
+
require "azure/resource_management/windows_credentials"
|
38
38
|
include Azure::ARM::WindowsCredentials
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.included(includer)
|
42
42
|
includer.class_eval do
|
43
43
|
deps do
|
44
|
-
require
|
45
|
-
require
|
44
|
+
require "readline"
|
45
|
+
require "chef/json_compat"
|
46
46
|
end
|
47
47
|
|
48
48
|
option :azure_resource_group_name,
|
@@ -64,7 +64,7 @@ class Chef
|
|
64
64
|
|
65
65
|
def locate_config_value(key)
|
66
66
|
key = key.to_sym
|
67
|
-
config[key] || Chef::Config[:knife][key]
|
67
|
+
config[key] || Chef::Config[:knife][key] || default_config[key]
|
68
68
|
end
|
69
69
|
|
70
70
|
# validates ARM mandatory keys
|
@@ -84,14 +84,14 @@ class Chef
|
|
84
84
|
errors << "You did not provide a valid '#{pretty_key(k)}' value. Please set knife[:#{k}] in your knife.rb."
|
85
85
|
end
|
86
86
|
end
|
87
|
-
if errors.each{|e| ui.error(e)}.any?
|
87
|
+
if errors.each { |e| ui.error(e) }.any?
|
88
88
|
exit 1
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
92
|
def authentication_details
|
93
93
|
if is_azure_cred?
|
94
|
-
return {:azure_tenant_id => locate_config_value(:azure_tenant_id), :azure_client_id => locate_config_value(:azure_client_id), :azure_client_secret => locate_config_value(:azure_client_secret)}
|
94
|
+
return { :azure_tenant_id => locate_config_value(:azure_tenant_id), :azure_client_id => locate_config_value(:azure_client_id), :azure_client_secret => locate_config_value(:azure_client_secret) }
|
95
95
|
elsif Chef::Platform.windows?
|
96
96
|
token_details = token_details_for_windows()
|
97
97
|
else
|
@@ -102,9 +102,9 @@ class Chef
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def get_azure_cli_version
|
105
|
-
if @azure_version
|
105
|
+
if @azure_version != ""
|
106
106
|
get_version = shell_out!("azure -v || az -v | grep azure-cli", { returns: [0] }).stdout
|
107
|
-
@azure_version = get_version.gsub(/[^0-9.]/,
|
107
|
+
@azure_version = get_version.gsub(/[^0-9.]/, "")
|
108
108
|
end
|
109
109
|
@azure_prefix = @azure_version.to_i < 2 ? "azure" : "az"
|
110
110
|
@azure_version
|
@@ -123,10 +123,10 @@ class Chef
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def token_details_from_accessToken_file
|
126
|
-
home_dir = File.expand_path(
|
127
|
-
file = File.read(home_dir +
|
126
|
+
home_dir = File.expand_path("~")
|
127
|
+
file = File.read(home_dir + "/.azure/accessTokens.json")
|
128
128
|
file = JSON.parse(file)
|
129
|
-
token_details = {:tokentype => file[-1]["tokenType"], :user => file[-1]["userId"], :token => file[-1]["accessToken"], :clientid => file[-1]["_clientId"], :expiry_time => file[-1]["expiresOn"], :refreshtoken => file[-1]["refreshToken"]}
|
129
|
+
token_details = { :tokentype => file[-1]["tokenType"], :user => file[-1]["userId"], :token => file[-1]["accessToken"], :clientid => file[-1]["_clientId"], :expiry_time => file[-1]["expiresOn"], :refreshtoken => file[-1]["refreshToken"] }
|
130
130
|
token_details
|
131
131
|
end
|
132
132
|
|
@@ -148,13 +148,11 @@ class Chef
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def azure_authentication
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
raise_azure_status
|
157
|
-
end
|
151
|
+
ui.log("Authenticating...")
|
152
|
+
Mixlib::ShellOut.new("#{@azure_prefix} vm show 'knifetest@resourcegroup' testvm", :timeout => 30).run_command
|
153
|
+
rescue Mixlib::ShellOut::CommandTimeout
|
154
|
+
rescue Exception
|
155
|
+
raise_azure_status
|
158
156
|
end
|
159
157
|
|
160
158
|
def check_token_validity(token_details)
|
@@ -176,18 +174,18 @@ class Chef
|
|
176
174
|
raise login_message
|
177
175
|
end
|
178
176
|
else
|
179
|
-
home_dir = File.expand_path(
|
180
|
-
if !File.
|
177
|
+
home_dir = File.expand_path("~")
|
178
|
+
if !File.exist?(home_dir + "/.azure/accessTokens.json") || File.size?(home_dir + "/.azure/accessTokens.json") <= 2
|
181
179
|
raise login_message
|
182
180
|
end
|
183
181
|
end
|
184
182
|
end
|
185
183
|
|
186
184
|
def parse_publish_settings_file(filename)
|
187
|
-
require
|
188
|
-
require
|
189
|
-
require
|
190
|
-
require
|
185
|
+
require "nokogiri"
|
186
|
+
require "base64"
|
187
|
+
require "openssl"
|
188
|
+
require "uri"
|
191
189
|
begin
|
192
190
|
doc = Nokogiri::XML(File.open(find_file(filename)))
|
193
191
|
profile = doc.at_css("PublishProfile")
|
@@ -204,7 +202,7 @@ class Chef
|
|
204
202
|
end
|
205
203
|
Chef::Config[:knife][:azure_mgmt_cert] = management_cert.certificate.to_pem + management_cert.key.to_pem
|
206
204
|
Chef::Config[:knife][:azure_subscription_id] = doc.at_css("Subscription").attribute("Id").value
|
207
|
-
rescue=> error
|
205
|
+
rescue => error
|
208
206
|
puts "#{error.class} and #{error.message}"
|
209
207
|
exit 1
|
210
208
|
end
|
@@ -217,10 +215,10 @@ class Chef
|
|
217
215
|
file = name
|
218
216
|
elsif config_dir && File.exist?(File.join(config_dir, name))
|
219
217
|
file = File.join(config_dir, name)
|
220
|
-
elsif File.exist?(File.join(ENV[
|
221
|
-
file = File.join(ENV[
|
218
|
+
elsif File.exist?(File.join(ENV["HOME"], ".chef", name))
|
219
|
+
file = File.join(ENV["HOME"], ".chef", name)
|
222
220
|
else
|
223
|
-
ui.error(
|
221
|
+
ui.error("Unable to find file - " + name)
|
224
222
|
exit 1
|
225
223
|
end
|
226
224
|
file
|
@@ -228,37 +226,37 @@ class Chef
|
|
228
226
|
|
229
227
|
def msg_server_summary(server)
|
230
228
|
puts "\n\n"
|
231
|
-
if server.provisioningstate ==
|
229
|
+
if server.provisioningstate == "Succeeded"
|
232
230
|
Chef::Log.info("Server creation went successfull.")
|
233
231
|
puts "\nServer Details are:\n"
|
234
232
|
|
235
|
-
msg_pair(
|
236
|
-
msg_pair(
|
237
|
-
msg_pair(
|
233
|
+
msg_pair("Server ID", server.id)
|
234
|
+
msg_pair("Server Name", server.name)
|
235
|
+
msg_pair("Server Public IP Address", server.publicipaddress)
|
238
236
|
if is_image_windows?
|
239
|
-
msg_pair(
|
237
|
+
msg_pair("Server RDP Port", server.rdpport)
|
240
238
|
else
|
241
|
-
msg_pair(
|
239
|
+
msg_pair("Server SSH Port", server.sshport)
|
242
240
|
end
|
243
|
-
msg_pair(
|
244
|
-
msg_pair(
|
245
|
-
msg_pair(
|
241
|
+
msg_pair("Server Location", server.locationname)
|
242
|
+
msg_pair("Server OS Type", server.ostype)
|
243
|
+
msg_pair("Server Provisioning State", server.provisioningstate)
|
246
244
|
else
|
247
245
|
Chef::Log.info("Server Creation Failed.")
|
248
246
|
end
|
249
247
|
|
250
248
|
puts "\n\n"
|
251
249
|
|
252
|
-
if server.resources.provisioning_state ==
|
250
|
+
if server.resources.provisioning_state == "Succeeded"
|
253
251
|
Chef::Log.info("Server Extension creation went successfull.")
|
254
252
|
puts "\nServer Extension Details are:\n"
|
255
253
|
|
256
|
-
msg_pair(
|
257
|
-
msg_pair(
|
258
|
-
msg_pair(
|
259
|
-
msg_pair(
|
260
|
-
msg_pair(
|
261
|
-
msg_pair(
|
254
|
+
msg_pair("Server Extension ID", server.resources.id)
|
255
|
+
msg_pair("Server Extension Name", server.resources.name)
|
256
|
+
msg_pair("Server Extension Publisher", server.resources.publisher)
|
257
|
+
msg_pair("Server Extension Type", server.resources.type)
|
258
|
+
msg_pair("Server Extension Type Handler Version", server.resources.type_handler_version)
|
259
|
+
msg_pair("Server Extension Provisioning State", server.resources.provisioning_state)
|
262
260
|
else
|
263
261
|
Chef::Log.info("Server Extension Creation Failed.")
|
264
262
|
end
|
@@ -270,16 +268,16 @@ class Chef
|
|
270
268
|
raise ArgumentError, "When --azure-vnet-subnet-name is specified, the --azure-vnet-name must also be specified."
|
271
269
|
end
|
272
270
|
|
273
|
-
if locate_config_value(:azure_vnet_subnet_name) ==
|
274
|
-
raise ArgumentError,
|
271
|
+
if locate_config_value(:azure_vnet_subnet_name) == "GatewaySubnet"
|
272
|
+
raise ArgumentError, "GatewaySubnet cannot be used as the name for --azure-vnet-subnet-name option. GatewaySubnet can only be used for virtual network gateways."
|
275
273
|
end
|
276
274
|
|
277
|
-
if locate_config_value(:node_ssl_verify_mode) &&
|
275
|
+
if locate_config_value(:node_ssl_verify_mode) && !%w{none peer}.include?(locate_config_value(:node_ssl_verify_mode))
|
278
276
|
raise ArgumentError, "Invalid value '#{locate_config_value(:node_ssl_verify_mode)}' for --node-ssl-verify-mode. Use Valid values i.e 'none', 'peer'."
|
279
277
|
end
|
280
278
|
|
281
279
|
if is_image_windows?
|
282
|
-
if locate_config_value(:winrm_user).nil? ||
|
280
|
+
if locate_config_value(:winrm_user).nil? || locate_config_value(:winrm_password).nil?
|
283
281
|
raise ArgumentError, "Please provide --winrm-user and --winrm-password options for Windows option."
|
284
282
|
end
|
285
283
|
end
|
@@ -307,19 +305,19 @@ class Chef
|
|
307
305
|
end
|
308
306
|
|
309
307
|
config[:ohai_hints] = format_ohai_hints(locate_config_value(:ohai_hints))
|
310
|
-
validate_ohai_hints if ! locate_config_value(:ohai_hints).casecmp(
|
308
|
+
validate_ohai_hints if ! locate_config_value(:ohai_hints).casecmp("default").zero?
|
311
309
|
end
|
312
310
|
|
313
|
-
|
311
|
+
private
|
314
312
|
|
315
|
-
def msg_pair(label, value, color
|
313
|
+
def msg_pair(label, value, color = :cyan)
|
316
314
|
if value && !value.to_s.empty?
|
317
315
|
puts "#{ui.color(label, color)}: #{value}"
|
318
316
|
end
|
319
317
|
end
|
320
318
|
|
321
319
|
def pretty_key(key)
|
322
|
-
key.to_s.
|
320
|
+
key.to_s.tr("_", " ").gsub(/\w+/) { |w| (w =~ /(ssh)|(aws)/i) ? w.upcase : w.capitalize }
|
323
321
|
end
|
324
322
|
|
325
323
|
def is_image_windows?
|
@@ -340,7 +338,7 @@ class Chef
|
|
340
338
|
end
|
341
339
|
|
342
340
|
def is_WCM_env_var_set?
|
343
|
-
ENV[
|
341
|
+
ENV["AZURE_USE_SECURE_TOKEN_STORAGE"].nil? ? false : true
|
344
342
|
end
|
345
343
|
|
346
344
|
def raise_azure_status
|
@@ -17,10 +17,10 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
20
|
+
require "chef/knife/azurerm_base"
|
21
|
+
require "securerandom"
|
22
|
+
require "chef/knife/bootstrap/common_bootstrap_options"
|
23
|
+
require "chef/knife/bootstrap/bootstrapper"
|
24
24
|
|
25
25
|
class Chef
|
26
26
|
class Knife
|
@@ -83,7 +83,7 @@ class Chef
|
|
83
83
|
Standard_GRS (Standard Geo-redundant storage)
|
84
84
|
Standard_RAGRS (Standard Read access geo-redundant storage)
|
85
85
|
Premium_LRS (Premium Locally-redundant storage)",
|
86
|
-
:default =>
|
86
|
+
:default => "Standard_GRS"
|
87
87
|
|
88
88
|
option :azure_vm_name,
|
89
89
|
:long => "--azure-vm-name NAME",
|
@@ -121,7 +121,7 @@ class Chef
|
|
121
121
|
:long => "--azure-image-reference-version VERSION",
|
122
122
|
:description => "Optional. Specifies the version of the image used to create the virtual machine.
|
123
123
|
Default value is 'latest'",
|
124
|
-
:default =>
|
124
|
+
:default => "latest"
|
125
125
|
|
126
126
|
option :azure_image_os_type,
|
127
127
|
:long => "--azure-image-os-type OSTYPE",
|
@@ -130,8 +130,9 @@ class Chef
|
|
130
130
|
option :azure_vm_size,
|
131
131
|
:short => "-z SIZE",
|
132
132
|
:long => "--azure-vm-size SIZE",
|
133
|
-
:description => "Optional. Size of virtual machine
|
134
|
-
|
133
|
+
:description => "Optional. Size of virtual machine. Default is Standard_A1_v2.
|
134
|
+
Eg: Standard_A2, Standard_F2, Standard_G1 etc.",
|
135
|
+
:default => "Standard_A1_v2",
|
135
136
|
:proc => Proc.new { |si| Chef::Config[:knife][:azure_vm_size] = si }
|
136
137
|
|
137
138
|
option :azure_availability_set,
|
@@ -188,7 +189,7 @@ class Chef
|
|
188
189
|
Supported values are: vm_name, public_fqdn and platform.
|
189
190
|
User can pass any comma separated combination of these values like 'vm_name,public_fqdn'.
|
190
191
|
Default value is 'default' which corresponds to the supported values list mentioned here.",
|
191
|
-
:default =>
|
192
|
+
:default => "default"
|
192
193
|
|
193
194
|
def run
|
194
195
|
$stdout.sync = true
|
@@ -241,12 +242,12 @@ class Chef
|
|
241
242
|
|
242
243
|
# We assign azure_vm_name to chef_node_name If node name is nill because storage account name is combination of hash value and node name.
|
243
244
|
config[:chef_node_name] ||= locate_config_value(:azure_vm_name)
|
244
|
-
|
245
|
+
|
245
246
|
server_def[:azure_storage_account] = locate_config_value(:azure_vm_name) if server_def[:azure_storage_account].nil?
|
246
|
-
server_def[:azure_storage_account] = server_def[:azure_storage_account].gsub(/[!@#$%^&*()_-]/,
|
247
|
+
server_def[:azure_storage_account] = server_def[:azure_storage_account].gsub(/[!@#$%^&*()_-]/, "")
|
247
248
|
|
248
249
|
server_def[:azure_os_disk_name] = locate_config_value(:azure_vm_name) if server_def[:azure_os_disk_name].nil?
|
249
|
-
server_def[:azure_os_disk_name] = server_def[:azure_os_disk_name].gsub(/[!@#$%^&*()_-]/,
|
250
|
+
server_def[:azure_os_disk_name] = server_def[:azure_os_disk_name].gsub(/[!@#$%^&*()_-]/, "")
|
250
251
|
|
251
252
|
server_def[:azure_vnet_name] = locate_config_value(:azure_vm_name) if server_def[:azure_vnet_name].nil?
|
252
253
|
server_def[:azure_vnet_subnet_name] = locate_config_value(:azure_vm_name) if locate_config_value(:azure_vnet_subnet_name).nil?
|
@@ -274,16 +275,16 @@ class Chef
|
|
274
275
|
end
|
275
276
|
|
276
277
|
def supported_ohai_hints
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
278
|
+
%w{
|
279
|
+
vm_name
|
280
|
+
public_fqdn
|
281
|
+
platform
|
282
|
+
}
|
282
283
|
end
|
283
284
|
|
284
285
|
def format_ohai_hints(ohai_hints)
|
285
|
-
ohai_hints = ohai_hints.split(
|
286
|
-
ohai_hints.join(
|
286
|
+
ohai_hints = ohai_hints.split(",").each { |hint| hint.strip! }
|
287
|
+
ohai_hints.join(",")
|
287
288
|
end
|
288
289
|
|
289
290
|
def is_supported_ohai_hint?(hint)
|
@@ -291,7 +292,7 @@ class Chef
|
|
291
292
|
end
|
292
293
|
|
293
294
|
def validate_ohai_hints
|
294
|
-
hint_values = locate_config_value(:ohai_hints).split(
|
295
|
+
hint_values = locate_config_value(:ohai_hints).split(",")
|
295
296
|
hint_values.each do |hint|
|
296
297
|
if ! is_supported_ohai_hint?(hint)
|
297
298
|
raise ArgumentError, "Ohai Hint name #{hint} passed is not supported. Please run the command help to see the list of supported values."
|
@@ -332,7 +333,7 @@ class Chef
|
|
332
333
|
when "windows"
|
333
334
|
set_os_image("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter")
|
334
335
|
else
|
335
|
-
raise ArgumentError,
|
336
|
+
raise ArgumentError, "Invalid value of --azure-image-os-type. Accepted values ubuntu|centos|windows"
|
336
337
|
end
|
337
338
|
else
|
338
339
|
validate_arm_keys!(:azure_image_os_type) unless is_image_os_type?
|
@@ -360,7 +361,7 @@ class Chef
|
|
360
361
|
end
|
361
362
|
|
362
363
|
def validate_publisher_and_offer
|
363
|
-
if
|
364
|
+
if locate_config_value(:azure_image_reference_publisher) || locate_config_value(:azure_image_reference_offer)
|
364
365
|
# if azure_image_os_type is given and any of the other image reference parameters like publisher or offer are also given,
|
365
366
|
# raise error
|
366
367
|
raise ArgumentError, 'Please specify either --azure-image-os-type OR --azure-image-os-type with --azure-image-reference-sku or 4 image reference parameters i.e.
|