chef-apply 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +31 -33
- data/Rakefile +2 -2
- data/lib/chef_apply/action/base.rb +2 -2
- data/lib/chef_apply/action/generate_temp_cookbook.rb +4 -4
- data/lib/chef_apply/action/install_chef/base.rb +1 -1
- data/lib/chef_apply/action/install_chef/windows.rb +1 -1
- data/lib/chef_apply/action/reporter.rb +1 -1
- data/lib/chef_apply/cli.rb +9 -3
- data/lib/chef_apply/cli/validation.rb +1 -1
- data/lib/chef_apply/config.rb +1 -1
- data/lib/chef_apply/minimum_chef_version.rb +4 -4
- data/lib/chef_apply/target_host.rb +7 -7
- data/lib/chef_apply/telemeter.rb +3 -3
- data/lib/chef_apply/temp_cookbook.rb +1 -1
- data/lib/chef_apply/text/error_translation.rb +1 -1
- data/lib/chef_apply/ui/error_printer.rb +1 -1
- data/lib/chef_apply/ui/plain_text_element.rb +1 -1
- data/lib/chef_apply/version.rb +1 -1
- data/spec/integration/spec_helper.rb +2 -2
- data/spec/spec_helper.rb +4 -4
- data/spec/unit/action/converge_target_spec.rb +2 -2
- data/spec/unit/cli/validation_spec.rb +1 -1
- data/spec/unit/cli_spec.rb +2 -2
- data/spec/unit/minimum_chef_version_spec.rb +3 -3
- data/spec/unit/startup_spec.rb +12 -12
- data/spec/unit/target_host_spec.rb +10 -10
- data/spec/unit/target_resolver_spec.rb +3 -3
- data/spec/unit/telemeter_spec.rb +9 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3452a6c94fdf5d7605ec66ca32cc4a08127a4ff7eb9c471e7aff1748b68c66a5
|
4
|
+
data.tar.gz: d2d7543d20acaa3f03311f6ef9c68f80bb216c8056c36371618adbbfb7281cc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd7642f35d6a960c4f461afac548807bbffe395ef2d6e8d922938f5a6c3045c01ede76ed35b70fde10aa0faf19fc4ae333597b3f9c795888aa8cb53119367af0
|
7
|
+
data.tar.gz: 48765499c4ccf446475cdc80f8f078a5398c22e1244f364ebb51177a8cffbfd443ae8dae85b3cbe62f1f1b024ca201281c024acf85ff479e3ac68285f8e59070
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
chef-apply (0.2.
|
4
|
+
chef-apply (0.2.4)
|
5
5
|
chef (>= 14.0)
|
6
6
|
chef-dk (>= 3.0)
|
7
7
|
chef-telemetry
|
@@ -21,13 +21,13 @@ GEM
|
|
21
21
|
addressable (2.5.2)
|
22
22
|
public_suffix (>= 2.0.2, < 4.0)
|
23
23
|
ast (2.4.0)
|
24
|
-
aws-sdk (2.11.
|
25
|
-
aws-sdk-resources (= 2.11.
|
26
|
-
aws-sdk-core (2.11.
|
24
|
+
aws-sdk (2.11.178)
|
25
|
+
aws-sdk-resources (= 2.11.178)
|
26
|
+
aws-sdk-core (2.11.178)
|
27
27
|
aws-sigv4 (~> 1.0)
|
28
28
|
jmespath (~> 1.0)
|
29
|
-
aws-sdk-resources (2.11.
|
30
|
-
aws-sdk-core (= 2.11.
|
29
|
+
aws-sdk-resources (2.11.178)
|
30
|
+
aws-sdk-core (= 2.11.178)
|
31
31
|
aws-sigv4 (1.0.3)
|
32
32
|
azure_graph_rbac (0.17.0)
|
33
33
|
ms_rest_azure (~> 0.11.0)
|
@@ -39,10 +39,10 @@ GEM
|
|
39
39
|
debug_inspector (>= 0.0.1)
|
40
40
|
builder (3.2.3)
|
41
41
|
byebug (10.0.2)
|
42
|
-
chef (14.
|
42
|
+
chef (14.7.17)
|
43
43
|
addressable
|
44
44
|
bundler (>= 1.10)
|
45
|
-
chef-config (= 14.
|
45
|
+
chef-config (= 14.7.17)
|
46
46
|
chef-zero (>= 13.0)
|
47
47
|
diff-lcs (~> 1.2, >= 1.2.4)
|
48
48
|
erubis (~> 2.7)
|
@@ -50,12 +50,11 @@ GEM
|
|
50
50
|
ffi-yajl (~> 2.2)
|
51
51
|
highline (~> 1.6, >= 1.6.9)
|
52
52
|
iniparse (~> 1.4)
|
53
|
-
iso8601 (~> 0.9.1)
|
54
53
|
mixlib-archive (~> 0.4)
|
55
54
|
mixlib-authentication (~> 2.1)
|
56
55
|
mixlib-cli (~> 1.7)
|
57
56
|
mixlib-log (~> 2.0, >= 2.0.3)
|
58
|
-
mixlib-shellout (~> 2.
|
57
|
+
mixlib-shellout (~> 2.4)
|
59
58
|
net-sftp (~> 2.1, >= 2.1.2)
|
60
59
|
net-ssh (~> 4.2)
|
61
60
|
net-ssh-multi (~> 1.2, >= 1.2.1)
|
@@ -70,13 +69,13 @@ GEM
|
|
70
69
|
specinfra (~> 2.10)
|
71
70
|
syslog-logger (~> 1.6)
|
72
71
|
uuidtools (~> 2.1.5)
|
73
|
-
chef-config (14.
|
72
|
+
chef-config (14.7.17)
|
74
73
|
addressable
|
75
74
|
fuzzyurl
|
76
75
|
mixlib-config (>= 2.2.12, < 3.0)
|
77
76
|
mixlib-shellout (~> 2.0)
|
78
77
|
tomlrb (~> 1.2)
|
79
|
-
chef-dk (3.
|
78
|
+
chef-dk (3.5.13)
|
80
79
|
addressable (>= 2.3.5, < 2.6)
|
81
80
|
chef (~> 14.0)
|
82
81
|
chef-provisioning (~> 2.0)
|
@@ -103,20 +102,20 @@ GEM
|
|
103
102
|
concurrent-ruby (~> 1.0)
|
104
103
|
ffi-yajl (~> 2.2)
|
105
104
|
http (~> 2.2)
|
106
|
-
chef-zero (14.0.
|
105
|
+
chef-zero (14.0.11)
|
107
106
|
ffi-yajl (~> 2.2)
|
108
107
|
hashie (>= 2.0, < 4.0)
|
109
108
|
mixlib-log (~> 2.0)
|
110
|
-
rack (~> 2.0)
|
109
|
+
rack (~> 2.0, >= 2.0.6)
|
111
110
|
uuidtools (~> 2.1)
|
112
|
-
cheffish (14.0.
|
111
|
+
cheffish (14.0.4)
|
113
112
|
chef-zero (~> 14.0)
|
114
113
|
net-ssh
|
115
|
-
chefstyle (0.
|
114
|
+
chefstyle (0.11.0)
|
116
115
|
rubocop (= 0.55.0)
|
117
116
|
citrus (3.0.2)
|
118
117
|
coderay (1.1.2)
|
119
|
-
concurrent-ruby (1.
|
118
|
+
concurrent-ruby (1.1.3)
|
120
119
|
cookbook-omnifetch (0.8.0)
|
121
120
|
mixlib-archive (~> 0.4)
|
122
121
|
debug_inspector (0.0.3)
|
@@ -132,7 +131,7 @@ GEM
|
|
132
131
|
equatable (0.5.0)
|
133
132
|
erubis (2.7.0)
|
134
133
|
excon (0.62.0)
|
135
|
-
faraday (0.15.
|
134
|
+
faraday (0.15.4)
|
136
135
|
multipart-post (>= 1.2, < 3)
|
137
136
|
faraday-cookie_jar (0.0.6)
|
138
137
|
faraday (>= 0.7.4)
|
@@ -175,7 +174,6 @@ GEM
|
|
175
174
|
inifile (3.0.0)
|
176
175
|
iniparse (1.4.4)
|
177
176
|
ipaddress (0.8.3)
|
178
|
-
iso8601 (0.9.1)
|
179
177
|
jmespath (1.4.0)
|
180
178
|
json (2.1.0)
|
181
179
|
jwt (2.1.0)
|
@@ -185,11 +183,11 @@ GEM
|
|
185
183
|
little-plugger (~> 1.1)
|
186
184
|
multi_json (~> 1.10)
|
187
185
|
memoist (0.16.0)
|
188
|
-
method_source (0.9.
|
186
|
+
method_source (0.9.2)
|
189
187
|
mime-types (3.2.2)
|
190
188
|
mime-types-data (~> 3.2015)
|
191
189
|
mime-types-data (3.2018.0812)
|
192
|
-
minitar (0.
|
190
|
+
minitar (0.7)
|
193
191
|
mixlib-archive (0.4.18)
|
194
192
|
mixlib-log
|
195
193
|
mixlib-authentication (2.1.1)
|
@@ -242,7 +240,7 @@ GEM
|
|
242
240
|
os (1.0.0)
|
243
241
|
paint (1.0.1)
|
244
242
|
parallel (1.12.1)
|
245
|
-
parser (2.5.
|
243
|
+
parser (2.5.3.0)
|
246
244
|
ast (~> 2.4.0)
|
247
245
|
pastel (0.7.2)
|
248
246
|
equatable (~> 0.5.0)
|
@@ -250,20 +248,20 @@ GEM
|
|
250
248
|
plist (3.4.0)
|
251
249
|
powerpack (0.1.2)
|
252
250
|
proxifier (1.0.3)
|
253
|
-
pry (0.
|
251
|
+
pry (0.12.2)
|
254
252
|
coderay (~> 1.1.0)
|
255
253
|
method_source (~> 0.9.0)
|
256
254
|
pry-byebug (3.6.0)
|
257
255
|
byebug (~> 10.0)
|
258
256
|
pry (~> 0.10)
|
259
|
-
pry-stack_explorer (0.4.9.
|
257
|
+
pry-stack_explorer (0.4.9.3)
|
260
258
|
binding_of_caller (>= 0.7)
|
261
259
|
pry (>= 0.9.11)
|
262
260
|
public_suffix (3.0.3)
|
263
|
-
r18n-core (3.
|
264
|
-
r18n-desktop (3.
|
265
|
-
r18n-core (= 3.
|
266
|
-
rack (2.0.
|
261
|
+
r18n-core (3.2.0)
|
262
|
+
r18n-desktop (3.2.0)
|
263
|
+
r18n-core (= 3.2.0)
|
264
|
+
rack (2.0.6)
|
267
265
|
rainbow (3.0.0)
|
268
266
|
rake (12.3.1)
|
269
267
|
representable (3.0.4)
|
@@ -297,7 +295,7 @@ GEM
|
|
297
295
|
rainbow (>= 2.2.2, < 4.0)
|
298
296
|
ruby-progressbar (~> 1.7)
|
299
297
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
300
|
-
ruby-progressbar (1.
|
298
|
+
ruby-progressbar (1.10.0)
|
301
299
|
rubyntlm (0.6.2)
|
302
300
|
rubyzip (1.2.2)
|
303
301
|
semverse (2.0.0)
|
@@ -320,19 +318,19 @@ GEM
|
|
320
318
|
solve (4.0.0)
|
321
319
|
molinillo (~> 0.6)
|
322
320
|
semverse (>= 1.1, < 3.0)
|
323
|
-
specinfra (2.76.
|
321
|
+
specinfra (2.76.3)
|
324
322
|
net-scp
|
325
323
|
net-ssh (>= 2.7)
|
326
324
|
net-telnet (= 0.1.1)
|
327
325
|
sfl
|
328
326
|
syslog-logger (1.6.8)
|
329
327
|
systemu (2.6.5)
|
330
|
-
thor (0.20.
|
328
|
+
thor (0.20.3)
|
331
329
|
timeliness (0.3.8)
|
332
330
|
toml-rb (1.1.2)
|
333
331
|
citrus (~> 3.0, > 3.0)
|
334
332
|
tomlrb (1.2.7)
|
335
|
-
train (1.5.
|
333
|
+
train (1.5.6)
|
336
334
|
aws-sdk (~> 2)
|
337
335
|
azure_graph_rbac (~> 0.16)
|
338
336
|
azure_mgmt_key_vault (~> 0.17)
|
@@ -392,4 +390,4 @@ DEPENDENCIES
|
|
392
390
|
simplecov
|
393
391
|
|
394
392
|
BUNDLED WITH
|
395
|
-
1.
|
393
|
+
1.17.1
|
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
require "bundler/gem_tasks"
|
19
19
|
|
20
|
-
task :
|
20
|
+
task default: [:spec, :style]
|
21
21
|
|
22
22
|
require "rspec/core/rake_task"
|
23
23
|
RSpec::Core::RakeTask.new(:spec)
|
@@ -29,4 +29,4 @@ RuboCop::RakeTask.new(:chefstyle) do |t|
|
|
29
29
|
t.options = %w{--display-cop-names}
|
30
30
|
end
|
31
31
|
|
32
|
-
task :
|
32
|
+
task style: :chefstyle
|
@@ -63,8 +63,8 @@ module ChefApply
|
|
63
63
|
delete_folder: {
|
64
64
|
windows: "Remove-Item -Recurse -Force –Path",
|
65
65
|
other: "rm -rf",
|
66
|
-
}
|
67
|
-
}
|
66
|
+
},
|
67
|
+
}.freeze
|
68
68
|
|
69
69
|
# TODO - I'd like to consider PATH_MAPPING in action::base
|
70
70
|
# to platform subclasses/mixins for target_host. This way our 'target host'
|
@@ -24,11 +24,11 @@ module ChefApply::Action
|
|
24
24
|
attr_reader :generated_cookbook
|
25
25
|
|
26
26
|
def self.from_options(opts)
|
27
|
-
if opts.
|
27
|
+
if opts.key?(:recipe_spec)
|
28
28
|
GenerateCookbookFromRecipe.new(opts)
|
29
|
-
elsif opts.
|
30
|
-
opts.
|
31
|
-
opts.
|
29
|
+
elsif opts.key?(:resource_name) &&
|
30
|
+
opts.key?(:resource_type) &&
|
31
|
+
opts.key?(:resource_properties)
|
32
32
|
GenerateCookbookFromResource.new(opts)
|
33
33
|
else
|
34
34
|
raise MissingOptions.new(opts)
|
@@ -28,7 +28,7 @@ module ChefApply
|
|
28
28
|
Chef::Log.info("Creating run report")
|
29
29
|
end
|
30
30
|
|
31
|
-
#ensure start time and end time are output in the json properly in the event activesupport happens to be on the system
|
31
|
+
# ensure start time and end time are output in the json properly in the event activesupport happens to be on the system
|
32
32
|
run_data = data
|
33
33
|
run_data[:start_time] = run_data[:start_time].to_s
|
34
34
|
run_data[:end_time] = run_data[:end_time].to_s
|
data/lib/chef_apply/cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
#p
|
2
|
+
# p
|
3
3
|
# Copyright:: Copyright (c) 2018 Chef Software Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
@@ -137,10 +137,12 @@ module ChefApply
|
|
137
137
|
@temp_cookbook = generate_temp_cookbook(arguments, reporter)
|
138
138
|
end
|
139
139
|
UI::Terminal.render_job("...", job)
|
140
|
+
handle_failed_job(job)
|
140
141
|
job = UI::Terminal::Job.new("", nil) do |reporter|
|
141
142
|
@archive_file_location = generate_local_policy(reporter)
|
142
143
|
end
|
143
144
|
UI::Terminal.render_job("...", job)
|
145
|
+
handle_failed_job(job)
|
144
146
|
end
|
145
147
|
|
146
148
|
def render_converge(target_hosts)
|
@@ -154,7 +156,7 @@ module ChefApply
|
|
154
156
|
end
|
155
157
|
header = TS.converge.header(target_hosts.length, temp_cookbook.descriptor, temp_cookbook.from)
|
156
158
|
UI::Terminal.render_parallel_jobs(header, jobs)
|
157
|
-
|
159
|
+
handle_failed_jobs(jobs)
|
158
160
|
end
|
159
161
|
|
160
162
|
# Accepts a target_host and establishes the connection to that host
|
@@ -286,7 +288,7 @@ module ChefApply
|
|
286
288
|
# job to avoid interrupting other jobs in process. This function
|
287
289
|
# collects them and raises directly (in the case of just one job in the list)
|
288
290
|
# or raises a MultiJobFailure (when more than one job was being run)
|
289
|
-
def
|
291
|
+
def handle_failed_jobs(jobs)
|
290
292
|
failed_jobs = jobs.select { |j| !j.exception.nil? }
|
291
293
|
return if failed_jobs.empty?
|
292
294
|
if jobs.length == 1
|
@@ -297,6 +299,10 @@ module ChefApply
|
|
297
299
|
raise ChefApply::MultiJobFailure.new(failed_jobs)
|
298
300
|
end
|
299
301
|
|
302
|
+
def handle_failed_job(job)
|
303
|
+
raise job.exception unless job.exception.nil?
|
304
|
+
end
|
305
|
+
|
300
306
|
# A handler for common action messages
|
301
307
|
def handle_message(message, data, reporter)
|
302
308
|
if message == :error # data[0] = exception
|
data/lib/chef_apply/config.rb
CHANGED
@@ -25,7 +25,7 @@ require "chef-config/workstation_config_loader"
|
|
25
25
|
module ChefApply
|
26
26
|
class Config
|
27
27
|
WS_BASE_PATH = File.join(Dir.home, ".chef-workstation/")
|
28
|
-
SUPPORTED_PROTOCOLS = %w{ssh winrm}
|
28
|
+
SUPPORTED_PROTOCOLS = %w{ssh winrm}.freeze
|
29
29
|
|
30
30
|
class << self
|
31
31
|
@custom_location = nil
|
@@ -23,13 +23,13 @@ module ChefApply
|
|
23
23
|
CONSTRAINTS = {
|
24
24
|
windows: {
|
25
25
|
13 => Gem::Version.new("13.10.4"),
|
26
|
-
14 => Gem::Version.new("14.4.22")
|
26
|
+
14 => Gem::Version.new("14.4.22"),
|
27
27
|
},
|
28
28
|
linux: {
|
29
29
|
13 => Gem::Version.new("13.10.4"),
|
30
|
-
14 => Gem::Version.new("14.1.1")
|
31
|
-
}
|
32
|
-
}
|
30
|
+
14 => Gem::Version.new("14.1.1"),
|
31
|
+
},
|
32
|
+
}.freeze
|
33
33
|
|
34
34
|
def self.check!(target, check_only)
|
35
35
|
begin
|
@@ -24,7 +24,7 @@ module ChefApply
|
|
24
24
|
# These values may exist in .ssh/config but will be ignored by train
|
25
25
|
# in favor of its defaults unless we specify them explicitly.
|
26
26
|
# See #apply_ssh_config
|
27
|
-
SSH_CONFIG_OVERRIDE_KEYS = [:user, :port, :proxy]
|
27
|
+
SSH_CONFIG_OVERRIDE_KEYS = [:user, :port, :proxy].freeze
|
28
28
|
|
29
29
|
def self.instance_for_url(target, opts = {})
|
30
30
|
opts = { target: @url }
|
@@ -52,13 +52,13 @@ module ChefApply
|
|
52
52
|
connection_retries: 2,
|
53
53
|
connection_retry_sleep: 0.15,
|
54
54
|
logger: ChefApply::Log }
|
55
|
-
if opts_in.
|
55
|
+
if opts_in.key? :ssl
|
56
56
|
connection_opts[:ssl] = opts_in[:ssl]
|
57
57
|
connection_opts[:self_signed] = (opts_in[:ssl_verify] === false ? true : false)
|
58
58
|
end
|
59
59
|
|
60
60
|
[:sudo_password, :sudo, :sudo_command, :password, :user].each do |key|
|
61
|
-
connection_opts[key] = opts_in[key] if opts_in.
|
61
|
+
connection_opts[key] = opts_in[key] if opts_in.key? key
|
62
62
|
end
|
63
63
|
|
64
64
|
Train.target_config(connection_opts)
|
@@ -73,7 +73,7 @@ module ChefApply
|
|
73
73
|
# been explicitly given.
|
74
74
|
host_cfg = ssh_config_for_host(config[:host])
|
75
75
|
SSH_CONFIG_OVERRIDE_KEYS.each do |key|
|
76
|
-
if host_cfg.
|
76
|
+
if host_cfg.key?(key) && opts_in[key].nil?
|
77
77
|
config[key] = host_cfg[key]
|
78
78
|
end
|
79
79
|
end
|
@@ -166,8 +166,8 @@ module ChefApply
|
|
166
166
|
# on a virtualbox windows vm:
|
167
167
|
# (over winrm) Get-WmiObject Win32_Product | Where {$_.Name -match 'Chef Client'}
|
168
168
|
windows: "c:\\opscode\\chef\\version-manifest.json",
|
169
|
-
linux: "/opt/chef/version-manifest.json"
|
170
|
-
}
|
169
|
+
linux: "/opt/chef/version-manifest.json",
|
170
|
+
}.freeze
|
171
171
|
|
172
172
|
def get_chef_version_manifest
|
173
173
|
path = MANIFEST_PATHS[base_os()]
|
@@ -207,7 +207,7 @@ module ChefApply
|
|
207
207
|
"(Join-Path $parent $name);" +
|
208
208
|
"$tmp.FullName"
|
209
209
|
|
210
|
-
MKTMP_LINUX_CMD = "d=$(mktemp -d -p${TMPDIR:-/tmp} chef_XXXXXX); echo $d"
|
210
|
+
MKTMP_LINUX_CMD = "d=$(mktemp -d -p${TMPDIR:-/tmp} chef_XXXXXX); echo $d".freeze
|
211
211
|
|
212
212
|
# Create temporary dir and return the path.
|
213
213
|
# This will also set ownership to the connecting user instead of default of
|
data/lib/chef_apply/telemeter.rb
CHANGED
@@ -33,7 +33,7 @@ module ChefApply
|
|
33
33
|
# a main 'timed_capture', and it would be good to see ordering within nested calls.
|
34
34
|
class Telemeter
|
35
35
|
include Singleton
|
36
|
-
DEFAULT_INSTALLATION_GUID = "00000000-0000-0000-0000-000000000000"
|
36
|
+
DEFAULT_INSTALLATION_GUID = "00000000-0000-0000-0000-000000000000".freeze
|
37
37
|
|
38
38
|
class << self
|
39
39
|
extend Forwardable
|
@@ -102,8 +102,8 @@ module ChefApply
|
|
102
102
|
installation_id: installation_id,
|
103
103
|
run_timestamp: run_timestamp,
|
104
104
|
host_platform: host_platform,
|
105
|
-
event_data: data
|
106
|
-
}
|
105
|
+
event_data: data,
|
106
|
+
},
|
107
107
|
}
|
108
108
|
end
|
109
109
|
|
@@ -95,7 +95,7 @@ module ChefApply
|
|
95
95
|
{
|
96
96
|
name: m.name,
|
97
97
|
recipe_name: File.basename(existing_recipe_path, File.extname(existing_recipe_path)),
|
98
|
-
path: File.expand_path(File.join(metadata, "../"))
|
98
|
+
path: File.expand_path(File.join(metadata, "../")),
|
99
99
|
}
|
100
100
|
else
|
101
101
|
nil
|
@@ -18,7 +18,7 @@
|
|
18
18
|
module ChefApply
|
19
19
|
module Text
|
20
20
|
class ErrorTranslation
|
21
|
-
ATTRIBUTES = :decorations, :header, :footer, :stack, :log
|
21
|
+
ATTRIBUTES = [:decorations, :header, :footer, :stack, :log].freeze
|
22
22
|
attr_reader :message, *ATTRIBUTES
|
23
23
|
|
24
24
|
def initialize(id, params: [])
|
@@ -32,7 +32,7 @@ module ChefApply
|
|
32
32
|
# Some of this is particular to our usage -
|
33
33
|
# prefix does not cause a text update, but does
|
34
34
|
# change the prefix for future messages.
|
35
|
-
if params.
|
35
|
+
if params.key?(:prefix)
|
36
36
|
@format = @orig_format.gsub(":prefix", params[:prefix])
|
37
37
|
return
|
38
38
|
end
|
data/lib/chef_apply/version.rb
CHANGED
@@ -50,6 +50,6 @@ def fixture_content(name)
|
|
50
50
|
# Replace $VERSION if present - this is updated automatically, so we can't include
|
51
51
|
# the literal version value in the fixture without
|
52
52
|
# having expeditor update it there too...
|
53
|
-
content.gsub("$VERSION", ChefApply::VERSION)
|
54
|
-
gsub("$HOME", Dir.home)
|
53
|
+
content.gsub("$VERSION", ChefApply::VERSION)
|
54
|
+
.gsub("$HOME", Dir.home)
|
55
55
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -73,13 +73,13 @@ def assert_string_lookup(key, retval = "testvalue")
|
|
73
73
|
# we need to add this individually instead of using
|
74
74
|
# `receive_messages`, which doesn't appear to give a way to
|
75
75
|
# guarantee ordering
|
76
|
-
expect(ChefApply::Text).to receive(top_level_method)
|
77
|
-
and_return(tmock)
|
76
|
+
expect(ChefApply::Text).to receive(top_level_method)
|
77
|
+
.and_return(tmock)
|
78
78
|
call_seq.each do |m|
|
79
79
|
expect(tmock).to receive(m).ordered.and_return(tmock)
|
80
80
|
end
|
81
|
-
expect(tmock).to receive(terminal_method)
|
82
|
-
ordered.and_return(retval)
|
81
|
+
expect(tmock).to receive(terminal_method)
|
82
|
+
.ordered.and_return(retval)
|
83
83
|
subject.call
|
84
84
|
end
|
85
85
|
end
|
@@ -299,8 +299,8 @@ RSpec.describe ChefApply::Action::ConvergeTarget do
|
|
299
299
|
let(:report_result) { double("report result", exit_status: 0, stdout: '{ "exception": "thing" }') }
|
300
300
|
let(:exception_mapper) { double("mapper") }
|
301
301
|
before do
|
302
|
-
expect(ChefApply::Errors::CCRFailureMapper).to receive(:new)
|
303
|
-
and_return exception_mapper
|
302
|
+
expect(ChefApply::Errors::CCRFailureMapper).to receive(:new)
|
303
|
+
.and_return exception_mapper
|
304
304
|
end
|
305
305
|
|
306
306
|
it "reports back failure and reads the remote report" do
|
@@ -69,7 +69,7 @@ RSpec.describe ChefApply::CLI::Validation do
|
|
69
69
|
"key5" => "0777",
|
70
70
|
"key6" => "https://some.website",
|
71
71
|
"key7" => "num1and2digit",
|
72
|
-
"key_8" => "underscore"
|
72
|
+
"key_8" => "underscore",
|
73
73
|
}
|
74
74
|
expect(subject.properties_from_string(provided)).to eq(expected)
|
75
75
|
end
|
data/spec/unit/cli_spec.rb
CHANGED
@@ -160,8 +160,8 @@ RSpec.describe ChefApply::CLI do
|
|
160
160
|
let(:host) { double("TargetHost", config: {}, user: "root" ) }
|
161
161
|
let(:reporter) { double("reporter", update: :ok, success: :ok) }
|
162
162
|
it "invokes do_connect with correct options" do
|
163
|
-
expect(subject).to receive(:do_connect)
|
164
|
-
with(host, reporter)
|
163
|
+
expect(subject).to receive(:do_connect)
|
164
|
+
.with(host, reporter)
|
165
165
|
subject.connect_target(host, reporter)
|
166
166
|
end
|
167
167
|
end
|
@@ -28,8 +28,8 @@ RSpec.describe ChefApply::MinimumChefVersion do
|
|
28
28
|
context "#check!" do
|
29
29
|
context "when chef is not already installed on target" do
|
30
30
|
before do
|
31
|
-
expect(target).to receive(:installed_chef_version)
|
32
|
-
and_raise ChefApply::TargetHost::ChefNotInstalled.new
|
31
|
+
expect(target).to receive(:installed_chef_version)
|
32
|
+
.and_raise ChefApply::TargetHost::ChefNotInstalled.new
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should return :client_not_installed" do
|
@@ -71,7 +71,7 @@ RSpec.describe ChefApply::MinimumChefVersion do
|
|
71
71
|
Gem::Version.new("12.1.1") => ChefApply::MinimumChefVersion::Client13Outdated,
|
72
72
|
Gem::Version.new("13.9.0") => ChefApply::MinimumChefVersion::Client13Outdated,
|
73
73
|
Gem::Version.new("14.1.0") => ChefApply::MinimumChefVersion::Client14Outdated,
|
74
|
-
}
|
74
|
+
},
|
75
75
|
}
|
76
76
|
[:windows, :linux].each do |os|
|
77
77
|
context "on #{os}" do
|
data/spec/unit/startup_spec.rb
CHANGED
@@ -177,12 +177,12 @@ RSpec.describe ChefApply::Startup do
|
|
177
177
|
it "touches the configuration file to create it and notifies that it has done so" do
|
178
178
|
expected_config_path = ChefApply::Config.default_location
|
179
179
|
expected_message = ChefApply::Text.cli.creating_config(expected_config_path)
|
180
|
-
expect(ChefApply::UI::Terminal).to receive(:output)
|
181
|
-
with(expected_message)
|
182
|
-
expect(ChefApply::UI::Terminal).to receive(:output)
|
183
|
-
with("")
|
184
|
-
expect(FileUtils).to receive(:touch)
|
185
|
-
with(expected_config_path)
|
180
|
+
expect(ChefApply::UI::Terminal).to receive(:output)
|
181
|
+
.with(expected_message)
|
182
|
+
expect(ChefApply::UI::Terminal).to receive(:output)
|
183
|
+
.with("")
|
184
|
+
expect(FileUtils).to receive(:touch)
|
185
|
+
.with(expected_config_path)
|
186
186
|
subject.create_default_config
|
187
187
|
|
188
188
|
end
|
@@ -192,8 +192,8 @@ RSpec.describe ChefApply::Startup do
|
|
192
192
|
let(:mock_guid) { "1234" }
|
193
193
|
it "sets up a telemetry installation id and notifies the operator that telemetry is enabled" do
|
194
194
|
expect(SecureRandom).to receive(:uuid).and_return(mock_guid)
|
195
|
-
expect(File).to receive(:write)
|
196
|
-
with(ChefApply::Config.telemetry_installation_identifier_file, mock_guid)
|
195
|
+
expect(File).to receive(:write)
|
196
|
+
.with(ChefApply::Config.telemetry_installation_identifier_file, mock_guid)
|
197
197
|
subject.setup_telemetry
|
198
198
|
end
|
199
199
|
end
|
@@ -303,10 +303,10 @@ RSpec.describe ChefApply::Startup do
|
|
303
303
|
end
|
304
304
|
|
305
305
|
it "sets up the logging for ChefApply and Chef" do
|
306
|
-
expect(ChefApply::Log).to receive(:setup)
|
307
|
-
with(log_path, log_level)
|
308
|
-
expect(Chef::Log).to receive(:init)
|
309
|
-
with(ChefApply::Log.location)
|
306
|
+
expect(ChefApply::Log).to receive(:setup)
|
307
|
+
.with(log_path, log_level)
|
308
|
+
expect(Chef::Log).to receive(:init)
|
309
|
+
.with(ChefApply::Log.location)
|
310
310
|
subject.setup_logging
|
311
311
|
expect(ChefConfig.logger).to eq(ChefApply::Log)
|
312
312
|
end
|
@@ -145,16 +145,16 @@ RSpec.describe ChefApply::TargetHost do
|
|
145
145
|
let(:expected_manifest_path) do
|
146
146
|
{
|
147
147
|
windows: "c:\\opscode\\chef\\version-manifest.json",
|
148
|
-
linux: "/opt/chef/version-manifest.json"
|
148
|
+
linux: "/opt/chef/version-manifest.json",
|
149
149
|
}
|
150
150
|
end
|
151
151
|
let(:base_os) { :unknown }
|
152
152
|
before do
|
153
153
|
remote_file_mock = double("remote_file", file?: manifest_exists, content: manifest_content)
|
154
154
|
backend_mock = double("backend")
|
155
|
-
expect(backend_mock).to receive(:file)
|
156
|
-
with(expected_manifest_path[base_os])
|
157
|
-
and_return(remote_file_mock)
|
155
|
+
expect(backend_mock).to receive(:file)
|
156
|
+
.with(expected_manifest_path[base_os])
|
157
|
+
.and_return(remote_file_mock)
|
158
158
|
allow(subject).to receive(:backend).and_return backend_mock
|
159
159
|
allow(subject).to receive(:base_os).and_return base_os
|
160
160
|
end
|
@@ -278,9 +278,9 @@ RSpec.describe ChefApply::TargetHost do
|
|
278
278
|
let(:base_os) { :windows }
|
279
279
|
let(:path) { "C:\\temp\\blah" }
|
280
280
|
it "creates the temporary directory using the correct PowerShell command and returns the path" do
|
281
|
-
expect(subject).to receive(:run_command!)
|
282
|
-
with(ChefApply::TargetHost::MKTMP_WIN_CMD)
|
283
|
-
and_return(instance_double("result", stdout: path))
|
281
|
+
expect(subject).to receive(:run_command!)
|
282
|
+
.with(ChefApply::TargetHost::MKTMP_WIN_CMD)
|
283
|
+
.and_return(instance_double("result", stdout: path))
|
284
284
|
expect(subject.mktemp()).to eq(path)
|
285
285
|
end
|
286
286
|
end
|
@@ -289,9 +289,9 @@ RSpec.describe ChefApply::TargetHost do
|
|
289
289
|
let(:base_os) { :linux }
|
290
290
|
let(:path) { "/tmp/blah" }
|
291
291
|
it "creates the directory using a properly formed mktemp, changes ownership to connecting user, and returns the path" do
|
292
|
-
expect(subject).to receive(:run_command!)
|
293
|
-
with("bash -c '#{ChefApply::TargetHost::MKTMP_LINUX_CMD}'")
|
294
|
-
and_return(instance_double("result", stdout: "/tmp/blah"))
|
292
|
+
expect(subject).to receive(:run_command!)
|
293
|
+
.with("bash -c '#{ChefApply::TargetHost::MKTMP_LINUX_CMD}'")
|
294
|
+
.and_return(instance_double("result", stdout: "/tmp/blah"))
|
295
295
|
expect(subject).to receive(:chown).with(path)
|
296
296
|
expect(subject.mktemp()).to eq path
|
297
297
|
end
|
@@ -340,7 +340,7 @@ RSpec.describe ChefApply::TargetResolver do
|
|
340
340
|
"ssh://user@example.com" => { password: nil, url: "ssh://example.com", user: "user" },
|
341
341
|
"ssh://user:password@example.com" => { password: "password", user: "user", url: "ssh://example.com" },
|
342
342
|
"ssh://user:pas:sw:ord@example.com" => { password: "pas:sw:ord", user: "user", url: "ssh://example.com" },
|
343
|
-
"ssh://user:!@#$%^&*()|\'\";:/?><.,{}[]+=`~@example.com" => { password: "!@#$%^&*()|\'\";:/?><.,{}[]+=`~", user: "user", url: "ssh://example.com" }
|
343
|
+
"ssh://user:!@#$%^&*()|\'\";:/?><.,{}[]+=`~@example.com" => { password: "!@#$%^&*()|\'\";:/?><.,{}[]+=`~", user: "user", url: "ssh://example.com" },
|
344
344
|
}.each do |values|
|
345
345
|
it "resolves #{values[0]} to #{values[1]}" do
|
346
346
|
expect(subject.config_for_target(values[0])).to eq values[1]
|
@@ -370,8 +370,8 @@ RSpec.describe ChefApply::TargetResolver do
|
|
370
370
|
end
|
371
371
|
context "and it is not valid" do
|
372
372
|
it "raises an error" do
|
373
|
-
expect { subject.prefix_from_target("bad://host.com") }
|
374
|
-
to raise_error(ChefApply::TargetResolver::UnsupportedProtocol)
|
373
|
+
expect { subject.prefix_from_target("bad://host.com") }
|
374
|
+
.to raise_error(ChefApply::TargetResolver::UnsupportedProtocol)
|
375
375
|
end
|
376
376
|
end
|
377
377
|
end
|
data/spec/unit/telemeter_spec.rb
CHANGED
@@ -75,11 +75,11 @@ RSpec.describe ChefApply::Telemeter do
|
|
75
75
|
platform: {
|
76
76
|
name: "windows",
|
77
77
|
version: "10.0.0",
|
78
|
-
architecture: "x86_64"
|
78
|
+
architecture: "x86_64",
|
79
79
|
},
|
80
80
|
hostname_sha1: Digest::SHA1.hexdigest("my_host"),
|
81
|
-
transport_type: "winrm"
|
82
|
-
}
|
81
|
+
transport_type: "winrm",
|
82
|
+
},
|
83
83
|
}
|
84
84
|
expect(subject).to receive(:timed_capture).with(:action, expected_data)
|
85
85
|
subject.timed_action_capture(action) { :ok }
|
@@ -90,8 +90,8 @@ RSpec.describe ChefApply::Telemeter do
|
|
90
90
|
expected_data = { action: "Base", target: { platform: {},
|
91
91
|
hostname_sha1: nil,
|
92
92
|
transport_type: nil } }
|
93
|
-
expect(subject).to receive(:timed_capture)
|
94
|
-
with(:action, expected_data)
|
93
|
+
expect(subject).to receive(:timed_capture)
|
94
|
+
.with(:action, expected_data)
|
95
95
|
subject.timed_action_capture(
|
96
96
|
ChefApply::Action::Base.new(target_host: nil)
|
97
97
|
) { :ok }
|
@@ -135,8 +135,8 @@ RSpec.describe ChefApply::Telemeter do
|
|
135
135
|
context "#timed_run_capture" do
|
136
136
|
it "invokes timed_capture with run data" do
|
137
137
|
expected_data = { arguments: [ "arg1" ] }
|
138
|
-
expect(subject).to receive(:timed_capture)
|
139
|
-
with(:run, expected_data)
|
138
|
+
expect(subject).to receive(:timed_capture)
|
139
|
+
.with(:run, expected_data)
|
140
140
|
subject.timed_run_capture(["arg1"])
|
141
141
|
end
|
142
142
|
end
|
@@ -182,8 +182,8 @@ RSpec.describe ChefApply::Telemeter do
|
|
182
182
|
installation_id: "0000",
|
183
183
|
run_timestamp: subject.run_timestamp,
|
184
184
|
host_platform: host_platform,
|
185
|
-
event_data: { hello: "world" }
|
186
|
-
}
|
185
|
+
event_data: { hello: "world" },
|
186
|
+
},
|
187
187
|
}
|
188
188
|
expect(payload).to eq expected_payload
|
189
189
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-apply
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chef Software, Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-cli
|