chef-cli 3.0.22 → 3.0.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4ad30b471d00e7b8b9d9b2c94a9722d4fa2dbd5a2b8db6eaf6340ad5cbee006
4
- data.tar.gz: e925152292893332d5f846db05bc52299823f6e4e7043cc23783ed1ffd7b3a17
3
+ metadata.gz: 85e388b9fab9f43a073f194f4c3c6c9378c8a9adbed5ff72110f2c9a595902b7
4
+ data.tar.gz: eb70e257bc469e1e5fe45f8d35cbc1b1ae70d3906753c566d9d022cfc8733bc2
5
5
  SHA512:
6
- metadata.gz: 7f1860d196d449214a2e5511c4add38e0b50a39c660837a1f6052fe145e274706f80dc44c474f0480c2b16518c08f77b424c902b1664cfa9bb7ab63408d3dc07
7
- data.tar.gz: b1ad7b8563c1389e9ae62e906c998be45ee23d3bb2f044c7cc62fe4fd061577d33d70ab46e00445cb3d84d3754d033432c8cdbd553b9a263b8a5bc5eddb1ce23
6
+ metadata.gz: e8df4c043504a3671210ea15bb0109f4a1f8dc9929e9e86665f227b82e8425d35196e0cd9143c1842549f9cea3efe2bd6248a8c6d14b98abc2fd0825983559e9
7
+ data.tar.gz: 235eeafdd090fe44cb78ad741e55797d19da15acdf853d9877f0b164fdc782f21e75e3f523cd4f5e1c6810e4b256185c087c5e22644843c8a0cb667fe8692c32
data/Gemfile CHANGED
@@ -28,3 +28,9 @@ group :development do
28
28
  gem "pry-stack_explorer", "~> 0.4.0"
29
29
  gem "rb-readline"
30
30
  end
31
+
32
+ group :profile do
33
+ gem "stackprof"
34
+ gem "stackprof-webnav"
35
+ gem "memory_profiler"
36
+ end
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright:: Copyright (c) 2014-2018 Chef Software Inc.
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
  # Set a trap for ctrl-C right away so we don't surface interrupt exceptions inside of rubygems or whatever.
20
20
  Kernel.trap(:INT) { print("\n"); exit 1 }
21
21
 
22
- $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
22
+ $:.unshift(File.expand_path(File.join(__dir__, "..", "lib")))
23
23
  require "chef-cli/cli"
24
24
 
25
25
  ChefCLI::CLI.new(ARGV.clone).run(enforce_license: true)
@@ -48,6 +48,6 @@ Gem::Specification.new do |gem|
48
48
  gem.add_dependency "addressable", ">= 2.3.5", "< 2.8"
49
49
  gem.add_dependency "cookbook-omnifetch", "~> 0.5"
50
50
  gem.add_dependency "diff-lcs", ">= 1.0", "< 1.4" # 1.4 changes the output
51
- gem.add_dependency "paint", ">= 1", "< 3"
52
- gem.add_dependency "license-acceptance", "~> 1.0", ">= 1.0.11"
51
+ gem.add_dependency "pastel", "~> 0.7" # used for policyfile differ
52
+ gem.add_dependency "license-acceptance", ">= 1.0.11", "< 3"
53
53
  end
@@ -33,6 +33,10 @@ module ChefCLI
33
33
  include Chef::Mixin::ShellOut
34
34
 
35
35
  banner(<<~BANNER)
36
+ #{ChefCLI::Dist::WORKSTATION_HEADER}
37
+ Docs: #{ChefCLI::Dist::WORKSTATION_DOCS}
38
+ Patents: #{ChefCLI::Dist::PATENTS}
39
+
36
40
  Usage:
37
41
  #{ChefCLI::Dist::EXEC} -h/--help
38
42
  #{ChefCLI::Dist::EXEC} -v/--version
@@ -119,13 +123,13 @@ module ChefCLI
119
123
 
120
124
  def show_help
121
125
  msg(banner)
122
- msg("\nAvailable Commands:")
126
+ msg("Available Commands:")
123
127
 
124
128
  justify_length = subcommands.map(&:length).max + 2
125
129
  subcommand_specs.each do |name, spec|
126
130
  next if spec.hidden
127
131
 
128
- msg(" #{"#{name}".ljust(justify_length)}#{spec.description}")
132
+ msg(" #{name.to_s.ljust(justify_length)}#{spec.description}")
129
133
  end
130
134
  end
131
135
 
@@ -37,7 +37,7 @@ module ChefCLI
37
37
 
38
38
  def run(params)
39
39
  info = {}
40
- info["#{ChefCLI::Dist::PRODUCT}"] = workstation_info
40
+ info[ChefCLI::Dist::PRODUCT] = workstation_info
41
41
  info["Ruby"] = ruby_info
42
42
  info["Path"] = paths
43
43
  ui.msg info.to_yaml
@@ -197,20 +197,7 @@ module ChefCLI
197
197
  # .delivery/cli.toml starting from pwd:
198
198
  # https://github.com/chef/delivery-cli/blob/22cbef3987ebd0aee98405b7e161a100edc87e49/src/delivery/config/mod.rs#L225-L247
199
199
 
200
- Pathname.new(Dir.pwd).ascend do |path|
201
- return true if contains_delivery_cli_toml?(path)
202
- end
203
-
204
- false # nothing was found
205
- end
206
-
207
- #
208
- # @param [Pathname] path a directory
209
- #
210
- # @return [Boolean] delivery cli.toml exists
211
- #
212
- def contains_delivery_cli_toml?(path)
213
- path.join(".delivery/cli.toml").exist?
200
+ Pathname.pwd.ascend.any? { |path| path.join(".delivery/cli.toml").exist? }
214
201
  end
215
202
 
216
203
  def read_and_validate_params
@@ -18,7 +18,7 @@
18
18
  # TODO: Chef should require its dependency correctly.
19
19
  require "singleton" unless defined?(Singleton)
20
20
  require "chef/cookbook/cookbook_version_loader"
21
- require "digest/sha1"
21
+ require "digest/sha1" unless defined?(Digest::SHA1)
22
22
 
23
23
  require "chef/digester"
24
24
 
@@ -27,7 +27,6 @@ module ChefCLI
27
27
 
28
28
  # The name of the server product
29
29
  SERVER_PRODUCT = "Chef Infra Server".freeze
30
-
31
30
  WORKFLOW = "Chef Workflow (Delivery)".freeze
32
31
 
33
32
  # The chef executable, as in `chef gem install` or `chef generate cookbook`
@@ -38,7 +37,13 @@ module ChefCLI
38
37
 
39
38
  HAB_PRODUCT = "Chef Habitat".freeze
40
39
  HAB_SOFTWARE_NAME = "habitat".freeze
41
-
42
40
  HAB_CLI = "hab".freeze
41
+
42
+ # product patents page
43
+ PATENTS = "https://www.chef.io/patents".freeze
44
+
45
+ # Workstation banner/help text
46
+ WORKSTATION_DOCS = "https://docs.chef.io/workstation/".freeze
47
+ WORKSTATION_HEADER = "The Chef command line tool for managing your infrastructure from your workstation.".freeze
43
48
  end
44
49
  end
@@ -154,7 +154,7 @@ module ChefCLI
154
154
  end
155
155
  if comment
156
156
  # Ensure there's no trailing whitespace
157
- result.gsub(/^(.+)$/, "#{comment} \\1").gsub(/^$/, "#{comment}").strip
157
+ result.gsub(/^(.+)$/, "#{comment} \\1").gsub(/^$/, comment).strip
158
158
  else
159
159
  result
160
160
  end
@@ -141,7 +141,7 @@ module ChefCLI
141
141
 
142
142
  def default_package_home
143
143
  if Chef::Platform.windows?
144
- File.join(ENV["LOCALAPPDATA"], "#{ChefCLI::Dist::PRODUCT_PKG_HOME}")
144
+ File.join(ENV["LOCALAPPDATA"], ChefCLI::Dist::PRODUCT_PKG_HOME)
145
145
  else
146
146
  File.expand_path("~/.#{ChefCLI::Dist::PRODUCT_PKG_HOME}")
147
147
  end
@@ -17,7 +17,7 @@
17
17
 
18
18
  require "diff/lcs"
19
19
  require "diff/lcs/hunk"
20
- require "paint"
20
+ require "pastel"
21
21
  require "ffi_yajl" unless defined?(FFI_Yajl)
22
22
 
23
23
  module ChefCLI
@@ -215,9 +215,15 @@ module ChefCLI
215
215
  ui.print("\n")
216
216
  end
217
217
 
218
+ def pastel
219
+ @pastel ||= Pastel.new
220
+ end
221
+
218
222
  def print_color_diff(hunk)
219
223
  hunk.to_s.each_line do |line|
220
- ui.print(Paint[line, color_for_line(line)])
224
+ line_color = color_for_line(line)
225
+ line = pastel.decorate(line, line_color) unless line_color.nil?
226
+ ui.print(line)
221
227
  end
222
228
  end
223
229
 
@@ -52,7 +52,7 @@ module ChefCLI
52
52
  return use_policyfile_lock(policyfile_filename)
53
53
  end
54
54
  unless policyfile_filename.end_with?(".rb")
55
- raise InvalidPolicyfileFilename, "Policyfile filenames must end with `.rb' extension (you gave: `#{policyfile_filename}')"
55
+ raise InvalidPolicyfileFilename, "Policyfile filenames must end with an `.rb' or `.lock.json' extension (you gave: `#{policyfile_filename}')"
56
56
  end
57
57
 
58
58
  @policyfile_filename = policyfile_filename
@@ -18,7 +18,7 @@
18
18
  require "pathname" unless defined?(Pathname)
19
19
  require "fileutils" unless defined?(FileUtils)
20
20
  require "tmpdir" unless defined?(Dir.mktmpdir)
21
- require "zlib"
21
+ require "zlib" unless defined?(Zlib)
22
22
 
23
23
  require "archive/tar/minitar"
24
24
 
@@ -42,8 +42,8 @@ module ChefCLI
42
42
  @overwrite = overwrite
43
43
  @chef_config = config
44
44
 
45
- policyfile_rel_path = policyfile || "Policyfile.rb"
46
- policyfile_full_path = File.expand_path(policyfile_rel_path, root_dir)
45
+ @policyfile_rel_path = policyfile || "Policyfile.rb"
46
+ policyfile_full_path = File.expand_path(@policyfile_rel_path, root_dir)
47
47
  @storage_config = Policyfile::StorageConfig.new.use_policyfile(policyfile_full_path)
48
48
 
49
49
  @policyfile_content = nil
@@ -51,9 +51,11 @@ module ChefCLI
51
51
  end
52
52
 
53
53
  def run(cookbooks_to_update = [], exclude_deps = false)
54
- unless File.exist?(policyfile_expanded_path)
55
- # TODO: suggest next step. Add a generator/init command? Specify path to Policyfile.rb?
56
- # See card CC-232
54
+ # TODO: suggest next step. Add a generator/init command? Specify path to Policyfile.rb?
55
+ # See card CC-232
56
+ if @policyfile_rel_path.end_with?(".lock.json") && !File.exist?(policyfile_lock_expanded_path)
57
+ raise PolicyfileNotFound, "Policyfile lock not found at path #{policyfile_lock_expanded_path}"
58
+ elsif @policyfile_rel_path.end_with?(".rb") && !File.exist?(policyfile_expanded_path)
57
59
  raise PolicyfileNotFound, "Policyfile not found at path #{policyfile_expanded_path}"
58
60
  end
59
61
 
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "zlib"
18
+ require "zlib" unless defined?(Zlib)
19
19
  require "archive/tar/minitar"
20
20
 
21
21
  require_relative "../service_exceptions"
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module ChefCLI
19
- VERSION = "3.0.22".freeze
19
+ VERSION = "3.0.31".freeze
20
20
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright (c) 2014-2018 Chef Software Inc.
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -35,7 +35,7 @@ module TestHelpers
35
35
  end
36
36
 
37
37
  def fixtures_path
38
- File.expand_path(File.dirname(__FILE__) + "/unit/fixtures/")
38
+ File.expand_path(__dir__ + "/unit/fixtures/")
39
39
  end
40
40
 
41
41
  def project_root
@@ -41,12 +41,15 @@ describe ChefCLI::CLI do
41
41
 
42
42
  let(:base_help_message) do
43
43
  <<~E
44
+ #{ChefCLI::Dist::WORKSTATION_HEADER}
45
+ Docs: #{ChefCLI::Dist::WORKSTATION_DOCS}
46
+ Patents: #{ChefCLI::Dist::PATENTS}
47
+
44
48
  Usage:
45
49
  chef -h/--help
46
50
  chef -v/--version
47
51
  chef command [arguments...] [options...]
48
52
 
49
-
50
53
  Available Commands:
51
54
  gem Runs the `gem` command in context of the embedded ruby
52
55
  example Example subcommand for testing
@@ -127,7 +127,7 @@ describe ChefCLI::Command::Exec do
127
127
  end
128
128
 
129
129
  context "when running a exec with #{switch}" do
130
- let(:command_options) { ["#{switch}"] }
130
+ let(:command_options) { [switch] }
131
131
 
132
132
  it "should call not call exec, but it should print the banner" do
133
133
  allow(command_instance).to receive(:msg)
@@ -1,14 +1,11 @@
1
1
  require "openssl"
2
- require "net/https"
2
+ require "net/http" unless defined?(Net::HTTP)
3
3
  require "json" unless defined?(JSON)
4
- require "pp"
5
4
  require "uri"
6
5
 
7
- THIS_DIR = File.expand_path(File.dirname(__FILE__))
8
-
9
- UNIVERSE_JSON_PATH = File.join(THIS_DIR, "universe.json")
10
- SMALL_UNIVERSE_JSON_PATH = File.join(THIS_DIR, "small_universe.json")
11
- PRUNED_UNIVERSE_PATH = File.join(THIS_DIR, "pruned_small_universe.json")
6
+ UNIVERSE_JSON_PATH = File.join(__dir__, "universe.json")
7
+ SMALL_UNIVERSE_JSON_PATH = File.join(__dir__, "small_universe.json")
8
+ PRUNED_UNIVERSE_PATH = File.join(__dir__, "pruned_small_universe.json")
12
9
 
13
10
  COOKBOOKS_IN_SMALL_UNIVERSE = %w{apache2 application apt database mysql nginx postgresql yum}.freeze
14
11
 
@@ -243,7 +243,7 @@ describe ChefCLI::Policyfile::Differ do
243
243
 
244
244
  def output
245
245
  # ANSI codes make the tests harder to read
246
- Paint.unpaint(ui.output)
246
+ Pastel.new.strip(ui.output)
247
247
  end
248
248
 
249
249
  subject(:differ) do
@@ -106,10 +106,10 @@ describe ChefCLI::Policyfile::StorageConfig do
106
106
 
107
107
  end
108
108
 
109
- context "when the policyfile file name doesn't have a .rb extension" do
109
+ context "when the policyfile file name doesn't have an .rb or .lock.json extension" do
110
110
 
111
111
  it "raises an error" do
112
- err_string = %q{Policyfile filenames must end with `.rb' extension (you gave: `Policyfile')}
112
+ err_string = %q{Policyfile filenames must end with an `.rb' or `.lock.json' extension (you gave: `Policyfile')}
113
113
  expect { storage_config.use_policyfile("Policyfile") }.to raise_error(ChefCLI::InvalidPolicyfileFilename, err_string)
114
114
  end
115
115
 
@@ -77,6 +77,26 @@ describe ChefCLI::PolicyfileServices::Install do
77
77
 
78
78
  end
79
79
 
80
+ context "When an explicit Policfyfile lock name is given and does not exist" do
81
+
82
+ let(:policyfile_rb_explicit_name) { "i_do_not_exist.lock.json" }
83
+
84
+ it "errors out" do
85
+ expect { install_service.run }.to raise_error(ChefCLI::PolicyfileNotFound, "Policyfile lock not found at path #{policyfile_rb_path}")
86
+ end
87
+
88
+ end
89
+
90
+ context "When an explicit Policfyfile name is given and does not exist" do
91
+
92
+ let(:policyfile_rb_explicit_name) { "i_do_not_exist.rb" }
93
+
94
+ it "errors out" do
95
+ expect { install_service.run }.to raise_error(ChefCLI::PolicyfileNotFound, "Policyfile not found at path #{policyfile_rb_path}")
96
+ end
97
+
98
+ end
99
+
80
100
  context "when a Policyfile exists" do
81
101
 
82
102
  before do
@@ -16,7 +16,7 @@
16
16
  #
17
17
 
18
18
  require "spec_helper"
19
- require "net/http"
19
+ require "net/http" unless defined?(Net::HTTP)
20
20
  require "chef/monkey_patches/net_http"
21
21
  require "chef-cli/service_exception_inspectors/http"
22
22
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.22
4
+ version: 3.0.31
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: 2020-08-11 00:00:00.000000000 Z
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-cli
@@ -173,45 +173,39 @@ dependencies:
173
173
  - !ruby/object:Gem::Version
174
174
  version: '1.4'
175
175
  - !ruby/object:Gem::Dependency
176
- name: paint
176
+ name: pastel
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '1'
182
- - - "<"
179
+ - - "~>"
183
180
  - !ruby/object:Gem::Version
184
- version: '3'
181
+ version: '0.7'
185
182
  type: :runtime
186
183
  prerelease: false
187
184
  version_requirements: !ruby/object:Gem::Requirement
188
185
  requirements:
189
- - - ">="
190
- - !ruby/object:Gem::Version
191
- version: '1'
192
- - - "<"
186
+ - - "~>"
193
187
  - !ruby/object:Gem::Version
194
- version: '3'
188
+ version: '0.7'
195
189
  - !ruby/object:Gem::Dependency
196
190
  name: license-acceptance
197
191
  requirement: !ruby/object:Gem::Requirement
198
192
  requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '1.0'
202
193
  - - ">="
203
194
  - !ruby/object:Gem::Version
204
195
  version: 1.0.11
196
+ - - "<"
197
+ - !ruby/object:Gem::Version
198
+ version: '3'
205
199
  type: :runtime
206
200
  prerelease: false
207
201
  version_requirements: !ruby/object:Gem::Requirement
208
202
  requirements:
209
- - - "~>"
210
- - !ruby/object:Gem::Version
211
- version: '1.0'
212
203
  - - ">="
213
204
  - !ruby/object:Gem::Version
214
205
  version: 1.0.11
206
+ - - "<"
207
+ - !ruby/object:Gem::Version
208
+ version: '3'
215
209
  description: A streamlined development and deployment workflow for Chef platform.
216
210
  email:
217
211
  - info@chef.io