knife 17.3.13 → 17.3.48
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/core/bootstrap_context.rb +4 -4
- data/lib/chef/knife/core/windows_bootstrap_context.rb +2 -2
- data/lib/chef/knife/ssh.rb +29 -17
- data/lib/chef/knife/supermarket_unshare.rb +2 -1
- data/lib/chef/knife/version.rb +1 -1
- data/spec/integration/cookbook_download_spec.rb +1 -1
- data/spec/unit/knife/core/bootstrap_context_spec.rb +6 -6
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +4 -4
- data/spec/unit/knife/ssh_spec.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31ea76674fe3c36ffd7530564334f6984f1b95cff36f966eb4aa31a51b8fc4cc
|
4
|
+
data.tar.gz: 88a1f4d1335f549e881c9142171f0ee831bb8a6848de85808d136da9d083cc53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18745c29c6a2c249d6ed67eef2d961f3175e4f2f124ba368caed230f2df4c037e58ba14666ca1bae726addc10fd14ae5658be654cc2cb506afc9e4cafe5afb9b
|
7
|
+
data.tar.gz: 63e4f77b325ba95b279d698885a8b92814938ab2c196b5da79ed36a570dc4f0a8ac26c8c56291686f02530cd8e51fb82f2d58f3cd4da13649c7afe271421728a
|
@@ -171,12 +171,12 @@ class Chef
|
|
171
171
|
client_rb << "fips true\n"
|
172
172
|
end
|
173
173
|
|
174
|
-
unless chef_config[:
|
175
|
-
client_rb << "file_cache_path \"#{chef_config[:
|
174
|
+
unless chef_config[:unix_bootstrap_file_cache_path].nil?
|
175
|
+
client_rb << "file_cache_path \"#{chef_config[:unix_bootstrap_file_cache_path]}\"\n"
|
176
176
|
end
|
177
177
|
|
178
|
-
unless chef_config[:
|
179
|
-
client_rb << "file_backup_path \"#{chef_config[:
|
178
|
+
unless chef_config[:unix_bootstrap_file_backup_path].nil?
|
179
|
+
client_rb << "file_backup_path \"#{chef_config[:unix_bootstrap_file_backup_path]}\"\n"
|
180
180
|
end
|
181
181
|
|
182
182
|
client_rb
|
@@ -71,8 +71,8 @@ class Chef
|
|
71
71
|
client_rb = <<~CONFIG
|
72
72
|
chef_server_url "#{chef_config[:chef_server_url]}"
|
73
73
|
validation_client_name "#{chef_config[:validation_client_name]}"
|
74
|
-
file_cache_path "#{ChefConfig::PathHelper.escapepath(
|
75
|
-
file_backup_path "#{ChefConfig::PathHelper.escapepath(
|
74
|
+
file_cache_path "#{ChefConfig::PathHelper.escapepath(chef_config[:windows_bootstrap_file_cache_path] || "")}"
|
75
|
+
file_backup_path "#{ChefConfig::PathHelper.escapepath(chef_config[:windows_bootstrap_file_backup_path] || "")}"
|
76
76
|
cache_options ({:path => "#{ChefConfig::PathHelper.escapepath(ChefConfig::Config.etc_chef_dir(windows: true))}\\\\cache\\\\checksums", :skip_expires => true})
|
77
77
|
CONFIG
|
78
78
|
|
data/lib/chef/knife/ssh.rb
CHANGED
@@ -134,6 +134,18 @@ class Chef
|
|
134
134
|
boolean: true,
|
135
135
|
default: false
|
136
136
|
|
137
|
+
option :pty,
|
138
|
+
long: "--[no-]pty",
|
139
|
+
description: "Request a PTY, enabled by default.",
|
140
|
+
boolean: true,
|
141
|
+
default: true
|
142
|
+
|
143
|
+
option :require_pty,
|
144
|
+
long: "--[no-]require-pty",
|
145
|
+
description: "Raise exception if a PTY cannot be acquired, disabled by default.",
|
146
|
+
boolean: true,
|
147
|
+
default: false
|
148
|
+
|
137
149
|
def session
|
138
150
|
ssh_error_handler = Proc.new do |server|
|
139
151
|
if config[:on_error]
|
@@ -353,26 +365,26 @@ class Chef
|
|
353
365
|
ui.msg(str)
|
354
366
|
end
|
355
367
|
|
356
|
-
|
368
|
+
# @param command [String] the command to run
|
369
|
+
# @param session_list [???] list of sessions, one per node
|
370
|
+
#
|
371
|
+
def ssh_command(command, session_list = session)
|
372
|
+
stderr = ""
|
357
373
|
exit_status = 0
|
358
|
-
subsession ||= session
|
359
374
|
command = fixup_sudo(command)
|
360
375
|
command.force_encoding("binary") if command.respond_to?(:force_encoding)
|
361
|
-
|
362
|
-
open_session(subsession, command)
|
363
|
-
rescue => e
|
364
|
-
open_session(subsession, command, true)
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
def open_session(subsession, command, pty = false)
|
369
|
-
stderr = ""
|
370
|
-
exit_status = 0
|
371
|
-
subsession.open_channel do |chan|
|
376
|
+
session_list.open_channel do |chan|
|
372
377
|
if config[:on_error] && exit_status != 0
|
373
378
|
chan.close
|
374
379
|
else
|
375
|
-
|
380
|
+
if config[:pty]
|
381
|
+
chan.request_pty do |ch, success|
|
382
|
+
unless success
|
383
|
+
ui.warn("Failed to obtain a PTY from #{ch.connection.host}")
|
384
|
+
raise ArgumentError, "Request for PTY failed" if config[:require_pty]
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
376
388
|
chan.exec command do |ch, success|
|
377
389
|
raise ArgumentError, "Cannot execute #{command}" unless success
|
378
390
|
|
@@ -383,13 +395,11 @@ class Chef
|
|
383
395
|
ichannel.send_data("#{get_password}\n")
|
384
396
|
end
|
385
397
|
end
|
386
|
-
|
387
398
|
ch.on_extended_data do |_, _type, data|
|
388
|
-
raise ArgumentError if data.eql?("sudo: no tty present and no askpass program specified\n")
|
399
|
+
raise ArgumentError, "No PTY present. If a PTY is required use --require-pty" if data.eql?("sudo: no tty present and no askpass program specified\n")
|
389
400
|
|
390
401
|
stderr += data
|
391
402
|
end
|
392
|
-
|
393
403
|
ch.on_request "exit-status" do |ichannel, data|
|
394
404
|
exit_status = [exit_status, data.read_long].max
|
395
405
|
end
|
@@ -398,6 +408,8 @@ class Chef
|
|
398
408
|
end
|
399
409
|
session.loop
|
400
410
|
exit_status
|
411
|
+
ensure
|
412
|
+
session_list.close
|
401
413
|
end
|
402
414
|
|
403
415
|
def get_password
|
@@ -50,7 +50,8 @@ class Chef
|
|
50
50
|
rescue Net::HTTPClientException => e
|
51
51
|
raise e unless /Forbidden/.match?(e.message)
|
52
52
|
|
53
|
-
ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it."
|
53
|
+
ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it & #{config[:supermarket_site]} must allow maintainers to unshare cookbooks."
|
54
|
+
ui.warn "The default supermarket #{default_config[:supermarket_site]} does not allow maintainers to unshare cookbooks."
|
54
55
|
exit 1
|
55
56
|
end
|
56
57
|
|
data/lib/chef/knife/version.rb
CHANGED
@@ -80,16 +80,16 @@ describe Chef::Knife::Core::BootstrapContext do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
describe "when
|
84
|
-
let(:chef_config) { {
|
85
|
-
it "sets
|
83
|
+
describe "when unix_bootstrap_file_cache_path is set" do
|
84
|
+
let(:chef_config) { { unix_bootstrap_file_cache_path: "/home/opscode/cache" } }
|
85
|
+
it "sets unix_bootstrap_file_cache_path in the generated config file" do
|
86
86
|
expect(bootstrap_context.config_content).to include("file_cache_path \"/home/opscode/cache\"")
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
describe "when
|
91
|
-
let(:chef_config) { {
|
92
|
-
it "sets
|
90
|
+
describe "when unix_bootstrap_file_backup_path is set" do
|
91
|
+
let(:chef_config) { { unix_bootstrap_file_backup_path: "/home/opscode/backup" } }
|
92
|
+
it "sets unix_bootstrap_file_backup_path in the generated config file" do
|
93
93
|
expect(bootstrap_context.config_content).to include("file_backup_path \"/home/opscode/backup\"")
|
94
94
|
end
|
95
95
|
end
|
@@ -154,8 +154,8 @@ describe Chef::Knife::Core::WindowsBootstrapContext do
|
|
154
154
|
config_log_location: STDOUT,
|
155
155
|
chef_server_url: "http://chef.example.com:4444",
|
156
156
|
validation_client_name: "chef-validator-testing",
|
157
|
-
|
158
|
-
|
157
|
+
windows_bootstrap_file_cache_path: "c:/chef/cache",
|
158
|
+
windows_bootstrap_file_backup_path: "c:/chef/backup",
|
159
159
|
cache_options: ({ path: "c:/chef/cache/checksums", skip_expires: true })
|
160
160
|
)
|
161
161
|
)
|
@@ -165,8 +165,8 @@ describe Chef::Knife::Core::WindowsBootstrapContext do
|
|
165
165
|
expected = <<~EXPECTED
|
166
166
|
echo.chef_server_url "http://chef.example.com:4444"
|
167
167
|
echo.validation_client_name "chef-validator-testing"
|
168
|
-
echo.file_cache_path "
|
169
|
-
echo.file_backup_path "
|
168
|
+
echo.file_cache_path "c:/chef/cache"
|
169
|
+
echo.file_backup_path "c:/chef/backup"
|
170
170
|
echo.cache_options ^({:path =^> "C:\\\\chef\\\\cache\\\\checksums", :skip_expires =^> true}^)
|
171
171
|
echo.# Using default node name ^(fqdn^)
|
172
172
|
echo.log_level :auto
|
data/spec/unit/knife/ssh_spec.rb
CHANGED
@@ -289,7 +289,7 @@ describe Chef::Knife::Ssh do
|
|
289
289
|
let(:execution_channel2) { double(:execution_channel, on_data: nil, on_extended_data: nil) }
|
290
290
|
let(:session_channel2) { double(:session_channel, request_pty: nil) }
|
291
291
|
|
292
|
-
let(:session) { double(:session, loop: nil) }
|
292
|
+
let(:session) { double(:session, loop: nil, close: nil) }
|
293
293
|
|
294
294
|
let(:command) { "false" }
|
295
295
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 17.3.
|
4
|
+
version: 17.3.48
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -1149,7 +1149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1149
1149
|
- !ruby/object:Gem::Version
|
1150
1150
|
version: '0'
|
1151
1151
|
requirements: []
|
1152
|
-
rubygems_version: 3.2.
|
1152
|
+
rubygems_version: 3.2.22
|
1153
1153
|
signing_key:
|
1154
1154
|
specification_version: 4
|
1155
1155
|
summary: The knife CLI for Chef Infra.
|