knife-windows 3.0.16 → 4.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chef/knife/bootstrap_windows_ssh.rb +3 -4
- data/lib/chef/knife/helpers/bootstrap_windows_base.rb +14 -21
- data/lib/chef/knife/helpers/winrm_base.rb +10 -23
- data/lib/chef/knife/helpers/winrm_knife_base.rb +23 -22
- data/lib/chef/knife/windows_cert_generate.rb +3 -3
- data/lib/chef/knife/windows_listener_create.rb +1 -1
- data/lib/chef/knife/winrm.rb +1 -3
- data/lib/knife-windows/version.rb +1 -1
- data/spec/spec_helper.rb +16 -1
- data/spec/unit/knife/winrm_spec.rb +7 -9
- data/spec/unit/knife/wsman_test_spec.rb +2 -1
- metadata +5 -18
- data/lib/chef/knife/helpers/knife_windows_base.rb +0 -34
- data/spec/assets/win_template_rendered_with_bootstrap_install_command.txt +0 -220
- data/spec/assets/win_template_rendered_with_bootstrap_install_command_on_13_client.txt +0 -220
- data/spec/assets/win_template_rendered_without_bootstrap_install_command.txt +0 -332
- data/spec/assets/win_template_rendered_without_bootstrap_install_command_on_12_5_client.txt +0 -332
- data/spec/assets/win_template_rendered_without_bootstrap_install_command_on_13_client.txt +0 -332
- data/spec/assets/win_template_unrendered.txt +0 -246
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac2b46b0151ca71c6c81e0d3596d931ae6b0f0d8854d62e042dea80124484eaf
|
4
|
+
data.tar.gz: 62ed4aea58642c7963c7538099e74ca9f37764c951c546eaedf15d544978143b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4401141da0bd90233bb91fbd73dfab433db23b932cdd344a9c33b65706813a01d907a2cca364a5a9ff792f118cf3590b2c9bb03ffab7c3b9882ee8801a829ae
|
7
|
+
data.tar.gz: 9bc68889c0fede227babb39ffc07858c65299837271bfc980a698d03a6b7d4da04d6a5edc6ba462d6bf7726a347327f5323cbbd820415a108dbdaf684f5f3326
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -42,13 +42,12 @@ class Chef
|
|
42
42
|
short: "-p PORT",
|
43
43
|
long: "--ssh-port PORT",
|
44
44
|
description: "The ssh port",
|
45
|
-
proc: Proc.new { |key|
|
45
|
+
proc: Proc.new { |key| key.strip }
|
46
46
|
|
47
47
|
option :ssh_gateway,
|
48
48
|
short: "-G GATEWAY",
|
49
49
|
long: "--ssh-gateway GATEWAY",
|
50
|
-
description: "The ssh gateway"
|
51
|
-
proc: Proc.new { |key| Chef::Config[:knife][:ssh_gateway] = key }
|
50
|
+
description: "The ssh gateway"
|
52
51
|
|
53
52
|
option :forward_agent,
|
54
53
|
short: "-A",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -17,15 +17,11 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require "chef/knife"
|
20
|
-
require_relative "knife_windows_base"
|
21
20
|
require "chef/util/path_helper"
|
22
21
|
|
23
22
|
class Chef
|
24
23
|
class Knife
|
25
24
|
module BootstrapWindowsBase
|
26
|
-
|
27
|
-
include Chef::Knife::KnifeWindowsBase
|
28
|
-
|
29
25
|
# :nodoc:
|
30
26
|
# Would prefer to do this in a rational way, but can't be done b/c of
|
31
27
|
# Mixlib::CLI's design :(
|
@@ -43,23 +39,19 @@ class Chef
|
|
43
39
|
|
44
40
|
option :bootstrap_version,
|
45
41
|
long: "--bootstrap-version VERSION",
|
46
|
-
description: "The version of Chef to install"
|
47
|
-
proc: Proc.new { |v| Chef::Config[:knife][:bootstrap_version] = v }
|
42
|
+
description: "The version of Chef to install"
|
48
43
|
|
49
44
|
option :bootstrap_proxy,
|
50
45
|
long: "--bootstrap-proxy PROXY_URL",
|
51
|
-
description: "The proxy server for the node being bootstrapped"
|
52
|
-
proc: Proc.new { |p| Chef::Config[:knife][:bootstrap_proxy] = p }
|
46
|
+
description: "The proxy server for the node being bootstrapped"
|
53
47
|
|
54
48
|
option :bootstrap_no_proxy,
|
55
49
|
long: "--bootstrap-no-proxy [NO_PROXY_URL|NO_PROXY_IP]",
|
56
|
-
description: "Do not proxy locations for the node being bootstrapped; this option is used internally by Opscode"
|
57
|
-
proc: Proc.new { |np| Chef::Config[:knife][:bootstrap_no_proxy] = np }
|
50
|
+
description: "Do not proxy locations for the node being bootstrapped; this option is used internally by Opscode"
|
58
51
|
|
59
52
|
option :bootstrap_install_command,
|
60
53
|
long: "--bootstrap-install-command COMMANDS",
|
61
|
-
description: "Custom command to install chef-client"
|
62
|
-
proc: Proc.new { |ic| Chef::Config[:knife][:bootstrap_install_command] = ic }
|
54
|
+
description: "Custom command to install chef-client"
|
63
55
|
|
64
56
|
option :bootstrap_template,
|
65
57
|
short: "-t TEMPLATE",
|
@@ -76,10 +68,11 @@ class Chef
|
|
76
68
|
option :hint,
|
77
69
|
long: "--hint HINT_NAME[=HINT_FILE]",
|
78
70
|
description: "Specify Ohai Hint to be set on the bootstrap target. Use multiple --hint options to specify multiple hints.",
|
79
|
-
proc: Proc.new { |h|
|
80
|
-
|
71
|
+
proc: Proc.new { |h, accumulator|
|
72
|
+
accumulator ||= {}
|
81
73
|
name, path = h.split("=")
|
82
|
-
|
74
|
+
accumulator[name] = path ? Chef::JSONCompat.parse(::File.read(path)) : {}
|
75
|
+
accumulator
|
83
76
|
}
|
84
77
|
|
85
78
|
option :first_boot_attributes,
|
@@ -151,12 +144,12 @@ class Chef
|
|
151
144
|
option :bootstrap_vault_item,
|
152
145
|
long: "--bootstrap-vault-item VAULT_ITEM",
|
153
146
|
description: 'A single vault and item to update as "vault:item"',
|
154
|
-
proc: Proc.new { |i|
|
147
|
+
proc: Proc.new { |i, accumulator|
|
155
148
|
(vault, item) = i.split(/:/)
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
149
|
+
accumulator ||= {}
|
150
|
+
accumulator[vault] ||= []
|
151
|
+
accumulator[vault].push(item)
|
152
|
+
accumulator
|
160
153
|
}
|
161
154
|
|
162
155
|
option :policy_name,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -42,14 +42,12 @@ class Chef
|
|
42
42
|
short: "-x USERNAME",
|
43
43
|
long: "--winrm-user USERNAME",
|
44
44
|
description: "The WinRM username",
|
45
|
-
default: "Administrator"
|
46
|
-
proc: Proc.new { |key| Chef::Config[:knife][:winrm_user] = key }
|
45
|
+
default: "Administrator"
|
47
46
|
|
48
47
|
option :winrm_password,
|
49
48
|
short: "-P PASSWORD",
|
50
49
|
long: "--winrm-password PASSWORD",
|
51
|
-
description: "The WinRM password"
|
52
|
-
proc: Proc.new { |key| Chef::Config[:knife][:winrm_password] = key }
|
50
|
+
description: "The WinRM password"
|
53
51
|
|
54
52
|
option :winrm_shell,
|
55
53
|
long: "--winrm-shell SHELL",
|
@@ -61,42 +59,32 @@ class Chef
|
|
61
59
|
short: "-w TRANSPORT",
|
62
60
|
long: "--winrm-transport TRANSPORT",
|
63
61
|
description: "The WinRM transport type. Valid choices are [ssl, plaintext]",
|
64
|
-
default: "plaintext"
|
65
|
-
proc: Proc.new { |transport|
|
66
|
-
Chef::Config[:knife][:winrm_port] = "5986" if transport == "ssl"
|
67
|
-
Chef::Config[:knife][:winrm_transport] = transport
|
68
|
-
}
|
62
|
+
default: "plaintext"
|
69
63
|
|
70
64
|
option :winrm_port,
|
71
65
|
short: "-p PORT",
|
72
66
|
long: "--winrm-port PORT",
|
73
|
-
description: "The WinRM port, by default this is '5985' for 'plaintext' and '5986' for 'ssl' winrm transport"
|
74
|
-
default: "5985",
|
75
|
-
proc: Proc.new { |key| Chef::Config[:knife][:winrm_port] = key }
|
67
|
+
description: "The WinRM port, by default this is '5985' for 'plaintext' and '5986' for 'ssl' winrm transport"
|
76
68
|
|
77
69
|
option :kerberos_keytab_file,
|
78
70
|
short: "-T KEYTAB_FILE",
|
79
71
|
long: "--keytab-file KEYTAB_FILE",
|
80
|
-
description: "The Kerberos keytab file used for authentication"
|
81
|
-
proc: Proc.new { |keytab| Chef::Config[:knife][:kerberos_keytab_file] = keytab }
|
72
|
+
description: "The Kerberos keytab file used for authentication"
|
82
73
|
|
83
74
|
option :kerberos_realm,
|
84
75
|
short: "-R KERBEROS_REALM",
|
85
76
|
long: "--kerberos-realm KERBEROS_REALM",
|
86
|
-
description: "The Kerberos realm used for authentication"
|
87
|
-
proc: Proc.new { |realm| Chef::Config[:knife][:kerberos_realm] = realm }
|
77
|
+
description: "The Kerberos realm used for authentication"
|
88
78
|
|
89
79
|
option :kerberos_service,
|
90
80
|
short: "-S KERBEROS_SERVICE",
|
91
81
|
long: "--kerberos-service KERBEROS_SERVICE",
|
92
|
-
description: "The Kerberos service used for authentication"
|
93
|
-
proc: Proc.new { |service| Chef::Config[:knife][:kerberos_service] = service }
|
82
|
+
description: "The Kerberos service used for authentication"
|
94
83
|
|
95
84
|
option :ca_trust_file,
|
96
85
|
short: "-f CA_TRUST_FILE",
|
97
86
|
long: "--ca-trust-file CA_TRUST_FILE",
|
98
|
-
description: "The Certificate Authority (CA) trust file used for SSL transport"
|
99
|
-
proc: Proc.new { |trust| Chef::Config[:knife][:ca_trust_file] = trust }
|
87
|
+
description: "The Certificate Authority (CA) trust file used for SSL transport"
|
100
88
|
|
101
89
|
option :winrm_ssl_verify_mode,
|
102
90
|
long: "--winrm-ssl-verify-mode SSL_VERIFY_MODE",
|
@@ -111,8 +99,7 @@ class Chef
|
|
111
99
|
option :winrm_authentication_protocol,
|
112
100
|
long: "--winrm-authentication-protocol AUTHENTICATION_PROTOCOL",
|
113
101
|
description: "The authentication protocol used during WinRM communication. The supported protocols are #{WINRM_AUTH_PROTOCOL_LIST.join(",")}. Default is 'negotiate'.",
|
114
|
-
default: "negotiate"
|
115
|
-
proc: Proc.new { |protocol| Chef::Config[:knife][:winrm_authentication_protocol] = protocol }
|
102
|
+
default: "negotiate"
|
116
103
|
|
117
104
|
option :session_timeout,
|
118
105
|
long: "--session-timeout Minutes",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Steven Murawski (<smurawski@chef.io)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -19,7 +19,7 @@
|
|
19
19
|
require "chef/knife"
|
20
20
|
require_relative "winrm_base"
|
21
21
|
require_relative "winrm_shared_options"
|
22
|
-
require_relative "
|
22
|
+
require_relative "winrm_session"
|
23
23
|
|
24
24
|
class Chef
|
25
25
|
class Knife
|
@@ -39,10 +39,9 @@ class Chef
|
|
39
39
|
|
40
40
|
include Chef::Knife::WinrmBase
|
41
41
|
include Chef::Knife::WinrmSharedOptions
|
42
|
-
include Chef::Knife::KnifeWindowsBase
|
43
42
|
|
44
43
|
def validate_winrm_options!
|
45
|
-
winrm_auth_protocol =
|
44
|
+
winrm_auth_protocol = config[:winrm_authentication_protocol]
|
46
45
|
|
47
46
|
unless Chef::Knife::WinrmBase::WINRM_AUTH_PROTOCOL_LIST.include?(winrm_auth_protocol)
|
48
47
|
ui.error "Invalid value '#{winrm_auth_protocol}' for --winrm-authentication-protocol option."
|
@@ -120,7 +119,7 @@ class Chef
|
|
120
119
|
@session_results = []
|
121
120
|
queue = Queue.new
|
122
121
|
@winrm_sessions.each { |s| queue << s }
|
123
|
-
num_sessions =
|
122
|
+
num_sessions = config[:concurrency]
|
124
123
|
num_targets = @winrm_sessions.length
|
125
124
|
num_sessions = (num_sessions.nil? || num_sessions == 0) ? num_targets : [num_sessions, num_targets].min
|
126
125
|
|
@@ -146,7 +145,7 @@ class Chef
|
|
146
145
|
if authorization_error?(e)
|
147
146
|
unless config[:suppress_auth_failure]
|
148
147
|
# Display errors if the caller hasn't opted to retry
|
149
|
-
ui.error "Failed to authenticate to #{s.host} as #{
|
148
|
+
ui.error "Failed to authenticate to #{s.host} as #{config[:winrm_user]}"
|
150
149
|
ui.info "Response: #{e.message}"
|
151
150
|
ui.info get_failed_authentication_hint
|
152
151
|
raise e
|
@@ -202,33 +201,35 @@ class Chef
|
|
202
201
|
end
|
203
202
|
|
204
203
|
def resolve_session_options
|
204
|
+
config[:winrm_port] ||= ( config[:winrm_transport] == "ssl" ) ? "5986" : "5985"
|
205
|
+
|
205
206
|
@session_opts = {
|
206
207
|
user: resolve_winrm_user,
|
207
|
-
password:
|
208
|
-
port:
|
208
|
+
password: config[:winrm_password],
|
209
|
+
port: config[:winrm_port],
|
209
210
|
operation_timeout: resolve_winrm_session_timeout,
|
210
211
|
basic_auth_only: resolve_winrm_basic_auth,
|
211
212
|
disable_sspi: resolve_winrm_disable_sspi,
|
212
213
|
transport: resolve_winrm_transport,
|
213
214
|
no_ssl_peer_verification: resolve_no_ssl_peer_verification,
|
214
215
|
ssl_peer_fingerprint: resolve_ssl_peer_fingerprint,
|
215
|
-
shell:
|
216
|
-
codepage:
|
216
|
+
shell: config[:winrm_shell],
|
217
|
+
codepage: config[:winrm_codepage],
|
217
218
|
}
|
218
219
|
|
219
220
|
if @session_opts[:user] && (not @session_opts[:password])
|
220
|
-
@session_opts[:password] =
|
221
|
+
@session_opts[:password] = config[:winrm_password] = get_password
|
221
222
|
end
|
222
223
|
|
223
224
|
if @session_opts[:transport] == :kerberos
|
224
225
|
@session_opts.merge!(resolve_winrm_kerberos_options)
|
225
226
|
end
|
226
227
|
|
227
|
-
@session_opts[:ca_trust_path] =
|
228
|
+
@session_opts[:ca_trust_path] = config[:ca_trust_file] if config[:ca_trust_file]
|
228
229
|
end
|
229
230
|
|
230
231
|
def resolve_winrm_user
|
231
|
-
user =
|
232
|
+
user = config[:winrm_user]
|
232
233
|
|
233
234
|
# Prefixing with '.\' when using negotiate
|
234
235
|
# to auth user against local machine domain
|
@@ -244,23 +245,23 @@ class Chef
|
|
244
245
|
|
245
246
|
def resolve_winrm_session_timeout
|
246
247
|
# 30 min (Default) OperationTimeout for long bootstraps fix for KNIFE_WINDOWS-8
|
247
|
-
|
248
|
+
config[:session_timeout].to_i * 60 if config[:session_timeout]
|
248
249
|
end
|
249
250
|
|
250
251
|
def resolve_winrm_basic_auth
|
251
|
-
|
252
|
+
config[:winrm_authentication_protocol] == "basic"
|
252
253
|
end
|
253
254
|
|
254
255
|
def resolve_winrm_kerberos_options
|
255
256
|
kerberos_opts = {}
|
256
|
-
kerberos_opts[:keytab] =
|
257
|
-
kerberos_opts[:realm] =
|
258
|
-
kerberos_opts[:service] =
|
257
|
+
kerberos_opts[:keytab] = config[:kerberos_keytab_file] if config[:kerberos_keytab_file]
|
258
|
+
kerberos_opts[:realm] = config[:kerberos_realm] if config[:kerberos_realm]
|
259
|
+
kerberos_opts[:service] = config[:kerberos_service] if config[:kerberos_service]
|
259
260
|
kerberos_opts
|
260
261
|
end
|
261
262
|
|
262
263
|
def resolve_winrm_transport
|
263
|
-
transport =
|
264
|
+
transport = config[:winrm_transport].to_sym
|
264
265
|
if config.any? { |k, v| k.to_s =~ /kerberos/ && !v.nil? }
|
265
266
|
transport = :kerberos
|
266
267
|
elsif transport != :ssl && negotiate_auth?
|
@@ -271,11 +272,11 @@ class Chef
|
|
271
272
|
end
|
272
273
|
|
273
274
|
def resolve_no_ssl_peer_verification
|
274
|
-
|
275
|
+
config[:ca_trust_file].nil? && config[:winrm_ssl_verify_mode] == :verify_none && resolve_winrm_transport == :ssl
|
275
276
|
end
|
276
277
|
|
277
278
|
def resolve_ssl_peer_fingerprint
|
278
|
-
|
279
|
+
config[:ssl_peer_fingerprint]
|
279
280
|
end
|
280
281
|
|
281
282
|
def resolve_winrm_disable_sspi
|
@@ -287,7 +288,7 @@ class Chef
|
|
287
288
|
end
|
288
289
|
|
289
290
|
def negotiate_auth?
|
290
|
-
|
291
|
+
config[:winrm_authentication_protocol] == "negotiate"
|
291
292
|
end
|
292
293
|
|
293
294
|
def warn_no_ssl_peer_verification
|
@@ -27,8 +27,8 @@ class Chef
|
|
27
27
|
banner "knife windows cert generate FILE_PATH (options)"
|
28
28
|
|
29
29
|
deps do
|
30
|
-
require "openssl"
|
31
|
-
require "socket"
|
30
|
+
require "openssl" unless defined?(OpenSSL)
|
31
|
+
require "socket" unless defined?(Socket)
|
32
32
|
end
|
33
33
|
|
34
34
|
option :hostname,
|
@@ -98,7 +98,7 @@ class Chef
|
|
98
98
|
cert.add_extension(ef.create_extension("subjectKeyIdentifier", "hash", false))
|
99
99
|
cert.add_extension(ef.create_extension("authorityKeyIdentifier", "keyid:always", false))
|
100
100
|
cert.add_extension(ef.create_extension("extendedKeyUsage", "1.3.6.1.5.5.7.3.1", false))
|
101
|
-
cert.sign(rsa_key, OpenSSL::Digest
|
101
|
+
cert.sign(rsa_key, OpenSSL::Digest.new("SHA1"))
|
102
102
|
@thumbprint = OpenSSL::Digest::SHA1.new(cert.to_der)
|
103
103
|
cert
|
104
104
|
end
|
data/lib/chef/knife/winrm.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Seth Chisamore (<schisamo@chef.io>)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -18,14 +18,12 @@
|
|
18
18
|
|
19
19
|
require "chef/knife"
|
20
20
|
require_relative "helpers/winrm_knife_base" # WinrmCommandSharedFunctions
|
21
|
-
require_relative "helpers/knife_windows_base"
|
22
21
|
|
23
22
|
class Chef
|
24
23
|
class Knife
|
25
24
|
class Winrm < Knife
|
26
25
|
|
27
26
|
include Chef::Knife::WinrmCommandSharedFunctions
|
28
|
-
include Chef::Knife::KnifeWindowsBase
|
29
27
|
|
30
28
|
deps do
|
31
29
|
require_relative "windows_cert_generate"
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
# Author:: Adam Edwards (<adamed@chef.io>)
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -22,7 +22,22 @@ def sample_data(file_name)
|
|
22
22
|
File.read(file)
|
23
23
|
end
|
24
24
|
|
25
|
+
class UnexpectedSystemExit < RuntimeError
|
26
|
+
def self.from(system_exit)
|
27
|
+
new(system_exit.message).tap { |e| e.set_backtrace(system_exit.backtrace) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
25
31
|
RSpec.configure do |config|
|
32
|
+
config.raise_on_warning = true
|
33
|
+
config.raise_errors_for_deprecations!
|
26
34
|
config.run_all_when_everything_filtered = true
|
27
35
|
config.filter_run focus: true
|
36
|
+
config.around(:example) do |ex|
|
37
|
+
begin
|
38
|
+
ex.run
|
39
|
+
rescue SystemExit => e
|
40
|
+
raise UnexpectedSystemExit.from(e)
|
41
|
+
end
|
42
|
+
end
|
28
43
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Bryan McLellan <btm@chef.io>
|
3
|
-
# Copyright:: Copyright (c)
|
3
|
+
# Copyright:: Copyright (c) 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");
|
@@ -250,7 +250,7 @@ describe Chef::Knife::Winrm do
|
|
250
250
|
end
|
251
251
|
|
252
252
|
it "sets the user specified winrm port" do
|
253
|
-
|
253
|
+
winrm_command_http.config[:knife] = { winrm_port: "5988" }
|
254
254
|
expect(Chef::Knife::WinrmSession).to receive(:new).with(hash_including(transport: :plaintext)).and_call_original
|
255
255
|
expect(WinRM::Connection).to receive(:new).with(hash_including(transport: :plaintext)).and_return(winrm_connection)
|
256
256
|
winrm_command_http.configure_chef
|
@@ -269,7 +269,7 @@ describe Chef::Knife::Winrm do
|
|
269
269
|
let(:winrm_command_https) { Chef::Knife::Winrm.new(["-m", "localhost", "-x", "testuser", "-P", "testpassword", "--winrm-transport", "ssl", "echo helloworld"]) }
|
270
270
|
|
271
271
|
it "uses the https uri scheme if the ssl transport is specified" do
|
272
|
-
|
272
|
+
winrm_command_http.config[:winrm_transport] = "ssl"
|
273
273
|
expect(Chef::Knife::WinrmSession).to receive(:new).with(hash_including(transport: :ssl)).and_call_original
|
274
274
|
expect(WinRM::Connection).to receive(:new).with(hash_including(endpoint: "https://localhost:5986/wsman")).and_return(winrm_connection)
|
275
275
|
winrm_command_https.configure_chef
|
@@ -277,7 +277,7 @@ describe Chef::Knife::Winrm do
|
|
277
277
|
end
|
278
278
|
|
279
279
|
it "uses the winrm port '5986' by default for ssl transport" do
|
280
|
-
|
280
|
+
winrm_command_http.config[:winrm_transport] = "ssl"
|
281
281
|
expect(Chef::Knife::WinrmSession).to receive(:new).with(hash_including(transport: :ssl)).and_call_original
|
282
282
|
expect(WinRM::Connection).to receive(:new).with(hash_including(endpoint: "https://localhost:5986/wsman")).and_return(winrm_connection)
|
283
283
|
winrm_command_https.configure_chef
|
@@ -361,8 +361,8 @@ describe Chef::Knife::Winrm do
|
|
361
361
|
|
362
362
|
before(:each) do
|
363
363
|
allow(Chef::Knife::WinrmSession).to receive(:new).and_return(session)
|
364
|
-
Chef::Config[:knife] = { winrm_transport: "plaintext" }
|
365
364
|
@winrm = Chef::Knife::Winrm.new(["-m", "localhost", "-x", "testuser", "-P", "testpassword", "--winrm-authentication-protocol", "basic", "echo helloworld"])
|
365
|
+
@winrm.config[:winrm_transport] = "plaintext"
|
366
366
|
end
|
367
367
|
|
368
368
|
it "returns with 0 if the command succeeds" do
|
@@ -375,7 +375,6 @@ describe Chef::Knife::Winrm do
|
|
375
375
|
command_status = 510
|
376
376
|
|
377
377
|
@winrm.config[:returns] = "0"
|
378
|
-
Chef::Config[:knife][:returns] = [0]
|
379
378
|
|
380
379
|
allow(@winrm).to receive(:relay_winrm_command)
|
381
380
|
allow(@winrm.ui).to receive(:error)
|
@@ -386,7 +385,6 @@ describe Chef::Knife::Winrm do
|
|
386
385
|
it "exits with non-zero status if the command fails and returns config is set to 0" do
|
387
386
|
command_status = 1
|
388
387
|
@winrm.config[:returns] = "0,53"
|
389
|
-
Chef::Config[:knife][:returns] = [0, 53]
|
390
388
|
allow(@winrm).to receive(:relay_winrm_command).and_return(command_status)
|
391
389
|
allow(@winrm.ui).to receive(:error)
|
392
390
|
allow(session).to receive(:exit_code).and_return(command_status)
|
@@ -395,7 +393,7 @@ describe Chef::Knife::Winrm do
|
|
395
393
|
|
396
394
|
it "exits with a zero status if the command returns an expected non-zero status" do
|
397
395
|
command_status = 53
|
398
|
-
|
396
|
+
@winrm.config[:returns] = "0,53"
|
399
397
|
allow(@winrm).to receive(:relay_winrm_command).and_return(command_status)
|
400
398
|
allow(session).to receive(:exit_codes).and_return({ "thishost" => command_status })
|
401
399
|
exit_code = @winrm.run
|
@@ -448,7 +446,7 @@ describe Chef::Knife::Winrm do
|
|
448
446
|
|
449
447
|
context "when winrm_authentication_protocol specified" do
|
450
448
|
before do
|
451
|
-
|
449
|
+
@winrm.config[:winrm_transport] = "plaintext"
|
452
450
|
allow(@winrm).to receive(:relay_winrm_command).and_return(0)
|
453
451
|
end
|
454
452
|
|