chef-apply 0.4.13 → 0.6.0

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: 40458ce08a16fb6db8c58202ac973c791d653be6b32700a493779ba1ff540dd2
4
- data.tar.gz: 68a27c1c83e4009fb29b2fc355091f52bb23f25ea3465069e278982db67b353f
3
+ metadata.gz: b787c2d47fe3b153a3c8e46613bb62f13b6346a8efad7ae1efe8ece667b3c53c
4
+ data.tar.gz: 398bd9ad985fff7b688ce12983c195daadd93048f226834a7463f141c5f71675
5
5
  SHA512:
6
- metadata.gz: da9d028ca6b0033430f5c8740a1f6c6317eff7331e59ad48d0e198f2fca2f905cb3ea9fa482d0c4366003028bcc5e301cc0c994adfba621ed487637a7348b50a
7
- data.tar.gz: aab2c0073c5e20a56045b750044964d336b84da4d2e36085c2efc13386a24d7631d9c8fc2e75a2018189cb694f0adb3779225b5ebab70b892dfaac508e2af632
6
+ metadata.gz: c70ecbd0e62ae60c3fc6e7d9e19e72f44aefa5325f83218f495e6cd42abc5bc7809b76b1a1bf2c06f47375be2f85ad0e4d7bd51a637c6210cc87b9237864e0d7
7
+ data.tar.gz: 6564f0e408919ac1ae2b1e611feeb9bd7517117d1a3a2e33240a973ec3bca0ea4577650e2b0c20fc7ae71229965fad38879b1429425bf9ff84f48f0ee16ea5ec
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright (c) 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");
@@ -19,18 +19,12 @@ source "https://rubygems.org"
19
19
  gemspec
20
20
 
21
21
  group :development do
22
- gem "chefstyle"
22
+ gem "chefstyle", "1.7.4"
23
23
  gem "rake", ">= 10.1.0"
24
24
  gem "rspec", "~> 3.0"
25
25
  gem "simplecov"
26
26
  end
27
27
 
28
- group :docs do
29
- gem "yard"
30
- gem "redcarpet"
31
- gem "github-markup"
32
- end
33
-
34
28
  group :debug do
35
29
  gem "pry"
36
30
  gem "pry-byebug"
data/Rakefile CHANGED
@@ -24,13 +24,6 @@ rescue LoadError
24
24
  puts "chefstyle gem is not installed. bundle install first to make sure all dependencies are installed."
25
25
  end
26
26
 
27
- begin
28
- require "yard"
29
- YARD::Rake::YardocTask.new(:docs)
30
- rescue LoadError
31
- puts "yard is not available. bundle install first to make sure all dependencies are installed."
32
- end
33
-
34
27
  task :console do
35
28
  require "irb"
36
29
  require "irb/completion"
data/bin/chef-run CHANGED
@@ -20,4 +20,4 @@ require "chef_apply/startup"
20
20
 
21
21
  # Perform initialization tasks then hand off control to
22
22
  # CLI to run the command.
23
- ChefApply::Startup.new(ARGV).run
23
+ ChefApply::Startup.new(ARGV).run(enforce_license: true)
data/chef-apply.gemspec CHANGED
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- lib = File.expand_path("../lib", __FILE__)
18
+ lib = File.expand_path("lib", __dir__)
19
19
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
20
20
  require "chef_apply/version"
21
21
 
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.description = "Ad-hoc management of individual nodes and devices."
30
30
  spec.homepage = "https://github.com/chef/chef-apply"
31
31
  spec.license = "Apache-2.0"
32
- spec.required_ruby_version = ">= 2.5.0"
32
+ spec.required_ruby_version = ">= 2.6"
33
33
 
34
34
  spec.files = %w{Rakefile LICENSE warning.txt} +
35
35
  Dir.glob("Gemfile*") + # Includes Gemfile and locks
@@ -40,24 +40,19 @@ Gem::Specification.new do |spec|
40
40
  spec.require_paths = ["lib"]
41
41
 
42
42
  spec.add_dependency "mixlib-cli" # Provides argument handling DSL for CLI applications
43
- spec.add_dependency "mixlib-config", ">= 3.0.5" # shared chef configuration library that
44
- # simplifies managing a configuration file
43
+ spec.add_dependency "mixlib-config", ">= 3.0.5" # shared chef configuration library that simplifies managing a configuration file
45
44
  spec.add_dependency "mixlib-log" # Basis for our traditional logger
46
45
  spec.add_dependency "mixlib-install" # URL resolver + install tool for chef products
47
- spec.add_dependency "r18n-desktop" # easy path to message text management via
48
- # localization gem...
49
- spec.add_dependency "toml-rb" # This isn't ideal because mixlib-config uses 'tomlrb'
50
- # but that library does not support a dumper
46
+ spec.add_dependency "r18n-desktop" # easy path to message text management via localization gem...
47
+ spec.add_dependency "toml-rb" # This isn't ideal because mixlib-config uses 'tomlrb' but that library does not support a dumper
51
48
  spec.add_dependency "train-core", "~> 3.0" # remote connection management over ssh, winrm
52
49
  spec.add_dependency "train-winrm" # winrm transports were pulled out into this plugin
53
50
  spec.add_dependency "pastel" # A color library
54
51
  spec.add_dependency "tty-spinner" # Pretty output for status updates in the CLI
55
- spec.add_dependency "chef", ">= 15.0" # Needed to load cookbooks
56
- spec.add_dependency "chef-cli", ">= 1.0.3 " # Policyfile
52
+ spec.add_dependency "chef", ">= 16.0" # Needed to load cookbooks
53
+ spec.add_dependency "chef-cli", ">= 2.0.10 " # Policyfile
57
54
  spec.add_dependency "chef-telemetry", ">= 1.0.2"
58
- spec.add_dependency "license-acceptance", "~> 1.0", ">= 1.0.11"
55
+ spec.add_dependency "license-acceptance", ">= 1.0.11", "< 3"
59
56
 
60
- spec.add_development_dependency "bundler"
61
-
62
- spec.post_install_message = File.read(File.expand_path("../warning.txt", __FILE__))
57
+ spec.post_install_message = File.read(File.expand_path("warning.txt", __dir__))
63
58
  end
data/i18n/en.yml CHANGED
@@ -25,10 +25,10 @@ cli:
25
25
  %1:
26
26
 
27
27
  [telemetry]
28
- enable=false
28
+ enabled=false
29
29
 
30
30
  For more information about what we data gather and additional opt-out
31
- options, visit https://chef.sh/docs/chef-workstation/privacy/
31
+ options, visit https://docs.chef.io/workstation/privacy/
32
32
 
33
33
  description: |
34
34
  Chef Run is a tool to execute ad-hoc tasks using Chef.
@@ -113,6 +113,7 @@ cli:
113
113
  cookbook is found we run the default recipe.
114
114
  3. This behaves similarly to 'cookbook name' above, but it also allows
115
115
  you to specify which recipe to use from the cookbook.
116
+ Usage: cookbookname::recipename
116
117
  error:
117
118
  bad_config_file: |
118
119
 
data/i18n/errors/en.yml CHANGED
@@ -146,7 +146,7 @@ errors:
146
146
  For more information, please consult the documentation
147
147
  for this resource:
148
148
 
149
- https://docs.chef.io/resource_reference.html
149
+ https://docs.chef.io/resources/
150
150
 
151
151
  CHEFCCR004:
152
152
  text: |
@@ -157,7 +157,7 @@ errors:
157
157
  Please consult the documentation for properties
158
158
  supported by your resource and their valid values:
159
159
 
160
- https://docs.chef.io/resource_reference.html
160
+ https://docs.chef.io/resources/
161
161
 
162
162
  CHEFCCR005:
163
163
  text: |
@@ -165,7 +165,7 @@ errors:
165
165
 
166
166
  Please consult the documentation for a list of valid resources:
167
167
 
168
- https://docs.chef.io/resource_reference.html
168
+ https://docs.chef.io/resources/
169
169
 
170
170
  CHEFCCR006:
171
171
  text: |
@@ -174,7 +174,7 @@ errors:
174
174
  Please consult the documentation for %2 for a list of
175
175
  valid properties:
176
176
 
177
- https://docs.chef.io/resource_reference.html
177
+ https://docs.chef.io/resources/
178
178
 
179
179
  CHEFCCR099:
180
180
  text: |
@@ -246,7 +246,7 @@ errors:
246
246
 
247
247
  Additional instructions can be found in the troubleshooting documentation:
248
248
 
249
- https://www.chef.sh/docs/chef-workstation/troubleshooting/#error-code-cheftrn007
249
+ https://docs.chef.io/workstation/troubleshooting/#cheftrn007
250
250
 
251
251
  CHEFTRN999:
252
252
  text: |
@@ -257,6 +257,14 @@ errors:
257
257
  %1
258
258
 
259
259
  # CLI argument validation errors
260
+ #
261
+ CHEFVAL001:
262
+ display: { decorations: false }
263
+ text: |
264
+ The key file you specified does not exist or can't be read.
265
+
266
+ You provided '%1'.
267
+
260
268
  CHEFVAL002:
261
269
  display: { decorations: false }
262
270
  text: |
@@ -311,7 +319,7 @@ errors:
311
319
  CHEFVAL009:
312
320
  display: { decorations: false }
313
321
  text: |
314
- File extension '%1' is unsupported. Currently recipes must be specified with a `.rb` extension.
322
+ File extension '%1' is unsupported. Currently recipes must be specified with a `.rb` or `.yml` extension.
315
323
 
316
324
  CHEFVAL010:
317
325
  display: { decorations: false }
@@ -16,7 +16,7 @@
16
16
  #
17
17
 
18
18
  require "chef/telemeter"
19
- require "chef_apply/error"
19
+ require_relative "../error"
20
20
 
21
21
  module ChefApply
22
22
  module Action
@@ -15,9 +15,9 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/action/base"
19
- require "pathname"
20
- require "tempfile"
18
+ require_relative "base"
19
+ require "pathname" unless defined?(Pathname)
20
+ require "tempfile" unless defined?(Tempfile)
21
21
  # FLAG: require "chef/util/path_helper"
22
22
  require "chef/util/path_helper"
23
23
 
@@ -159,7 +159,7 @@ module ChefApply::Action
159
159
  end
160
160
 
161
161
  def handle_ccr_error
162
- require "chef_apply/action/converge_target/ccr_failure_mapper"
162
+ require_relative "converge_target/ccr_failure_mapper"
163
163
  mapper_opts = {}
164
164
  content = target_host.fetch_file_contents(chef_report_path)
165
165
  if content.nil?
@@ -198,7 +198,7 @@ module ChefApply::Action
198
198
  else
199
199
  # cd is shell a builtin, so we'll invoke bash. This also means all commands are executed
200
200
  # with sudo (as long as we are hardcoding our sudo use)
201
- "bash -c 'cd #{working_dir}; chef-client -z --config #{File.join(working_dir, config_file)} --recipe-url #{File.join(working_dir, policy)}'"
201
+ "bash -c 'cd #{working_dir}; /opt/chef/bin/chef-client -z --config #{File.join(working_dir, config_file)} --recipe-url #{File.join(working_dir, policy)}'"
202
202
  end
203
203
  end
204
204
 
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/error"
18
+ require_relative "../../error"
19
19
 
20
20
  module ChefApply
21
21
  module Action
@@ -15,8 +15,8 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/action/base"
19
- require "chef_apply/error"
18
+ require_relative "base"
19
+ require_relative "../error"
20
20
  module ChefApply::Action
21
21
  class GenerateLocalPolicy < Base
22
22
  attr_reader :archive_file_location
@@ -53,6 +53,7 @@ module ChefApply::Action
53
53
  end
54
54
 
55
55
  end
56
+
56
57
  class PolicyfileInstallError < ChefApply::Error
57
58
  def initialize(cause_err); super("CHEFPOLICY001", cause_err.message); end
58
59
  end
@@ -14,8 +14,8 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
  #
17
- require "chef_apply/action/base"
18
- require "chef_apply/error"
17
+ require_relative "base"
18
+ require_relative "../error"
19
19
  module ChefApply
20
20
  module Action
21
21
  class GenerateTempCookbook < Base
@@ -35,7 +35,7 @@ module ChefApply
35
35
 
36
36
  def initialize(options)
37
37
  super(options)
38
- require "chef_apply/action/generate_temp_cookbook/temp_cookbook"
38
+ require_relative "generate_temp_cookbook/temp_cookbook"
39
39
  @generated_cookbook ||= TempCookbook.new
40
40
  end
41
41
 
@@ -59,7 +59,7 @@ module ChefApply
59
59
  ChefApply::Log.debug("#{recipe_specifier} is a valid path to a recipe")
60
60
  recipe_path = recipe_specifier
61
61
  else
62
- require "chef_apply/action/generate_temp_cookbook/recipe_lookup"
62
+ require_relative "generate_temp_cookbook/recipe_lookup"
63
63
  rl = RecipeLookup.new(repo_paths)
64
64
  cookbook_path_or_name, optional_recipe_name = rl.split(recipe_specifier)
65
65
  cookbook = rl.load_cookbook(cookbook_path_or_name)
@@ -16,10 +16,10 @@
16
16
  #
17
17
 
18
18
  require "chef-config/config"
19
- require "chef_apply/config"
20
- require "chef_apply/error"
21
- require "chef_apply/log"
22
- require "chef_apply/action/base"
19
+ require_relative "../../config"
20
+ require_relative "../../error"
21
+ require_relative "../../log"
22
+ require_relative "../base"
23
23
 
24
24
  module ChefApply
25
25
  module Action
@@ -81,7 +81,7 @@ module ChefApply
81
81
  # Find the specified recipe or default recipe if none is specified.
82
82
  # Raise an error if recipe cannot be found.
83
83
  def find_recipe(cookbook, recipe_name = nil)
84
- recipes = cookbook.recipe_filenames_by_name
84
+ recipes = cookbook.recipe_filenames_by_name.merge(cookbook.recipe_yml_filenames_by_name)
85
85
  if recipe_name.nil?
86
86
  default_recipe = recipes["default"]
87
87
  raise NoDefaultRecipe.new(cookbook.root_dir, cookbook.name) if default_recipe.nil?
@@ -15,11 +15,11 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "tmpdir"
19
- require "fileutils"
20
- require "chef_apply/log"
21
- require "chef_apply/error"
22
- require "chef_apply/action/generate_temp_cookbook"
18
+ require "tmpdir" unless defined?(Dir.mktmpdir)
19
+ require "fileutils" unless defined?(FileUtils)
20
+ require_relative "../../log"
21
+ require_relative "../../error"
22
+ require_relative "../generate_temp_cookbook"
23
23
  module ChefApply
24
24
  module Action
25
25
  class GenerateTempCookbook
@@ -34,7 +34,7 @@ module ChefApply
34
34
 
35
35
  def from_existing_recipe(existing_recipe_path)
36
36
  ext_name = File.extname(existing_recipe_path)
37
- raise UnsupportedExtension.new(ext_name) unless ext_name == ".rb"
37
+ raise UnsupportedExtension.new(ext_name) unless ext_name == ".rb" || ext_name == ".yml"
38
38
 
39
39
  cb = cookbook_for_recipe(existing_recipe_path)
40
40
  if cb
@@ -15,9 +15,9 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/action/base"
19
- require "chef_apply/action/install_chef/minimum_chef_version"
20
- require "fileutils"
18
+ require_relative "base"
19
+ require_relative "install_chef/minimum_chef_version"
20
+ require "fileutils" unless defined?(FileUtils)
21
21
 
22
22
  module ChefApply
23
23
  module Action
@@ -86,6 +86,12 @@ module ChefApply
86
86
  platform_version_compatibility_mode: true,
87
87
  }
88
88
  case platform.name
89
+ when /mac_os_x/
90
+ if platform.release.to_i >= 17
91
+ opts[:platform_version] = "10.13"
92
+ else
93
+ raise NotImplementedError
94
+ end
89
95
  when /windows/
90
96
  opts[:platform] = "windows"
91
97
  when "redhat", "centos"
@@ -104,7 +110,7 @@ module ChefApply
104
110
  end
105
111
 
106
112
  def download_to_workstation(url_path)
107
- require "chef_apply/file_fetcher"
113
+ require_relative "../file_fetcher"
108
114
  ChefApply::FileFetcher.fetch(url_path)
109
115
  end
110
116
 
@@ -15,8 +15,8 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/error"
19
- require "chef_apply/action/install_chef/minimum_chef_version"
18
+ require_relative "../../error"
19
+ require_relative "minimum_chef_version"
20
20
 
21
21
  module ChefApply
22
22
  module Action
@@ -32,6 +32,10 @@ module ChefApply
32
32
  13 => Gem::Version.new("13.10.4"),
33
33
  14 => Gem::Version.new("14.1.1"),
34
34
  },
35
+ macos: {
36
+ 13 => Gem::Version.new("13.10.4"),
37
+ 14 => Gem::Version.new("14.1.1"),
38
+ },
35
39
  }.freeze
36
40
 
37
41
  def self.check!(target, check_only)
@@ -15,29 +15,29 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
- require "mixlib/cli"
18
+ require "mixlib/cli" unless defined?(Mixlib::CLI)
19
19
 
20
- require "chef_apply/config"
20
+ require_relative "config"
21
21
  require "chef-config/config"
22
22
  require "chef-config/logger"
23
23
 
24
- require "chef_apply/cli/validation"
25
- require "chef_apply/cli/options"
26
- require "chef_apply/cli/help"
27
- require "chef_apply/error"
28
- require "chef_apply/log"
29
- require "chef_apply/target_host"
30
- require "chef_apply/target_resolver"
31
- require "chef_apply/telemeter"
32
- require "chef_apply/ui/error_printer"
33
- require "chef_apply/ui/terminal"
34
- require "chef_apply/ui/terminal/job"
24
+ require_relative "cli/validation"
25
+ require_relative "cli/options"
26
+ require_relative "cli/help"
27
+ require_relative "error"
28
+ require_relative "log"
29
+ require_relative "target_host"
30
+ require_relative "target_resolver"
31
+ require_relative "telemeter"
32
+ require_relative "ui/error_printer"
33
+ require_relative "ui/terminal"
34
+ require_relative "ui/terminal/job"
35
35
  require "license_acceptance/cli_flags/mixlib_cli"
36
36
  require "license_acceptance/acceptor"
37
37
 
38
- require "chef_apply/action/generate_temp_cookbook"
39
- require "chef_apply/action/generate_local_policy"
40
- require "chef_apply/action/converge_target"
38
+ require_relative "action/generate_temp_cookbook"
39
+ require_relative "action/generate_local_policy"
40
+ require_relative "action/converge_target"
41
41
 
42
42
  module ChefApply
43
43
  class CLI
@@ -63,14 +63,14 @@ module ChefApply
63
63
  super()
64
64
  end
65
65
 
66
- def run
66
+ def run(enforce_license: false)
67
67
  # Perform a timing and capture of the run. Individual methods and actions may perform
68
68
  # nested Chef::Telemeter.timed_*_capture or Chef::Telemeter.capture calls in their operation, and
69
69
  # they will be captured in the same telemetry session.
70
70
 
71
71
  Chef::Telemeter.timed_run_capture([:redacted]) do
72
72
  begin
73
- perform_run
73
+ perform_run(enforce_license: enforce_license)
74
74
  rescue Exception => e
75
75
  @rc = handle_run_error(e)
76
76
  end
@@ -100,14 +100,14 @@ module ChefApply
100
100
  end
101
101
  end
102
102
 
103
- def perform_run
103
+ def perform_run(enforce_license: false)
104
104
  parse_options(@argv)
105
105
  if @argv.empty? || parsed_options[:help]
106
106
  show_help
107
107
  elsif parsed_options[:version]
108
108
  show_version
109
109
  else
110
- check_license_acceptance
110
+ check_license_acceptance if enforce_license
111
111
  validate_params(cli_arguments)
112
112
  target_hosts = resolve_targets(cli_arguments.shift, parsed_options)
113
113
  render_cookbook_setup(cli_arguments)
@@ -179,7 +179,7 @@ module ChefApply
179
179
  end
180
180
 
181
181
  def install(target_host, reporter)
182
- require "chef_apply/action/install_chef"
182
+ require_relative "action/install_chef"
183
183
  context = TS.install_chef
184
184
  reporter.update(context.verifying)
185
185
  installer = Action::InstallChef.new(target_host: target_host, check_only: !parsed_options[:install])
@@ -282,7 +282,7 @@ module ChefApply
282
282
  end
283
283
 
284
284
  def handle_perform_error(e)
285
- require "chef_apply/errors/standard_error_resolver"
285
+ require_relative "errors/standard_error_resolver"
286
286
  id = e.respond_to?(:id) ? e.id : e.class.to_s
287
287
  # TODO: This is currently sending host information for certain ssh errors
288
288
  # post release we need to scrub this data. For now I'm redacting the
@@ -61,7 +61,7 @@ module ChefApply
61
61
  end
62
62
 
63
63
  def show_version
64
- require "chef_apply/version"
64
+ require_relative "../version"
65
65
  UI::Terminal.output T.version.show(ChefApply::VERSION)
66
66
  end
67
67
  end
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/text"
18
+ require_relative "../text"
19
19
 
20
20
  # Moving the options into here so the cli.rb file is smaller and easier to read
21
21
  # For options that need to be merged back into the global ChefApply::Config object
@@ -64,8 +64,8 @@ module ChefApply
64
64
  description: T.identity_file,
65
65
  proc: (Proc.new do |paths|
66
66
  path = paths
67
- unless File.exist?(path)
68
- raise OptionValidationError.new("CHEFVAL001", self, path)
67
+ unless File.readable?(path)
68
+ raise OptionValidationError.new("CHEFVAL001", nil, path)
69
69
  end
70
70
 
71
71
  path
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/error"
18
+ require_relative "../error"
19
19
 
20
20
  module ChefApply
21
21
  class CLI
@@ -76,6 +76,8 @@ module ChefApply
76
76
  value.to_i
77
77
  when /^\d+\.\d*$/, /^\d*\.\d+$/
78
78
  value.to_f
79
+ when /^[:].+$/
80
+ value.split(":").last.to_sym
79
81
  when /true/i
80
82
  true
81
83
  when /false/i
@@ -15,10 +15,10 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/log"
19
- require "mixlib/config"
20
- require "fileutils"
21
- require "pathname"
18
+ require_relative "log"
19
+ require "mixlib/config" unless defined?(Mixlib::Config)
20
+ require "fileutils" unless defined?(FileUtils)
21
+ require "pathname" unless defined?(Pathname)
22
22
  require "chef-config/config"
23
23
  require "chef-config/workstation_config_loader"
24
24
 
@@ -109,8 +109,8 @@ module ChefApply
109
109
  # in their local configuration to ensure that dev usage
110
110
  # doesn't skew customer telemetry.
111
111
  config_context :telemetry do
112
- default(:dev, false)
113
- default(:enable, true)
112
+ default(:dev_mode, false)
113
+ default(:enabled, true)
114
114
  end
115
115
 
116
116
  config_context :log do
@@ -37,8 +37,8 @@ module ChefApply
37
37
 
38
38
  def self.deps
39
39
  # Avoid loading additional includes until they're needed
40
- require "socket"
41
- require "openssl"
40
+ require "socket" unless defined?(Socket)
41
+ require "openssl" unless defined?(OpenSSL)
42
42
  end
43
43
  end
44
44
  end
@@ -15,10 +15,10 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "net/http"
19
- require "uri"
20
- require "chef_apply/config"
21
- require "chef_apply/log"
18
+ require "net/http" unless defined?(Net::HTTP)
19
+ require "uri" unless defined?(URI)
20
+ require_relative "config"
21
+ require_relative "log"
22
22
 
23
23
  module ChefApply
24
24
  class FileFetcher
@@ -14,10 +14,10 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- require "chef_apply/config"
18
- require "chef_apply/text"
19
- require "chef_apply/ui/terminal"
20
- require "chef_apply/telemeter"
17
+ require_relative "config"
18
+ require_relative "text"
19
+ require_relative "ui/terminal"
20
+ require_relative "telemeter"
21
21
  require "chef/log"
22
22
  require "chef/config"
23
23
  module ChefApply
@@ -33,7 +33,7 @@ module ChefApply
33
33
  init_terminal
34
34
  end
35
35
 
36
- def run
36
+ def run(enforce_license: false)
37
37
  # This component is not supported in ChefDK; an exception will be raised
38
38
  # if running in that context.
39
39
  verify_not_in_chefdk
@@ -62,7 +62,7 @@ module ChefApply
62
62
  start_telemeter_upload
63
63
 
64
64
  # Launch the actual Chef Apply behavior
65
- start_chef_apply
65
+ start_chef_apply(enforce_license: enforce_license)
66
66
 
67
67
  # NOTE: Because these exceptions occur outside of the
68
68
  # CLI handling, they won't be tracked in telemtry.
@@ -119,7 +119,7 @@ module ChefApply
119
119
  end
120
120
 
121
121
  def setup_telemetry
122
- require "securerandom"
122
+ require "securerandom" unless defined?(SecureRandom)
123
123
  installation_id = SecureRandom.uuid
124
124
  File.write(Config.telemetry_installation_identifier_file, installation_id)
125
125
 
@@ -132,7 +132,7 @@ module ChefApply
132
132
  def start_telemeter_upload
133
133
  cfg = {
134
134
  enabled: Config.telemetry[:enabled],
135
- dev: Config.telemetry[:dev_mode],
135
+ dev_mode: Config.telemetry[:dev_mode],
136
136
  payload_dir: Config.telemetry_path,
137
137
  installation_identifier_file: Config.telemetry_installation_identifier_file,
138
138
  session_file: Config.telemetry_session_file,
@@ -194,24 +194,26 @@ module ChefApply
194
194
  Chef::Log.level = ChefApply::Log.level
195
195
  end
196
196
 
197
- def start_chef_apply
198
- require "chef_apply/cli"
199
- ChefApply::CLI.new(@argv).run
197
+ def start_chef_apply(enforce_license: false)
198
+ require_relative "cli"
199
+ ChefApply::CLI.new(@argv).run(enforce_license: enforce_license)
200
200
  end
201
201
 
202
202
  private
203
203
 
204
204
  def script_path
205
- File.expand_path File.dirname(__FILE__)
205
+ __dir__
206
206
  end
207
207
 
208
208
  class ConfigPathNotProvided < StandardError; end
209
+
209
210
  class ConfigPathInvalid < StandardError
210
211
  attr_reader :path
211
212
  def initialize(path)
212
213
  @path = path
213
214
  end
214
215
  end
216
+
215
217
  class UnsupportedInstallation < StandardError; end
216
218
  end
217
219
  end
@@ -15,8 +15,8 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/log"
19
- require "chef_apply/error"
18
+ require_relative "log"
19
+ require_relative "error"
20
20
  require "train"
21
21
 
22
22
  module ChefApply
@@ -134,11 +134,14 @@ module ChefApply
134
134
  def mix_in_target_platform!
135
135
  case base_os
136
136
  when :linux
137
- require "chef_apply/target_host/linux"
137
+ require_relative "target_host/linux"
138
138
  class << self; include ChefApply::TargetHost::Linux; end
139
139
  when :windows
140
- require "chef_apply/target_host/windows"
140
+ require_relative "target_host/windows"
141
141
  class << self; include ChefApply::TargetHost::Windows; end
142
+ when :macos
143
+ require_relative "target_host/macos"
144
+ class << self; include ChefApply::TargetHost::MacOS; end
142
145
  when :other
143
146
  raise ChefApply::TargetHost::UnsupportedTargetOS.new(platform.name)
144
147
  end
@@ -169,6 +172,8 @@ module ChefApply
169
172
  :windows
170
173
  elsif platform.linux?
171
174
  :linux
175
+ elsif platform.darwin?
176
+ :macos
172
177
  else
173
178
  :other
174
179
  end
@@ -280,7 +285,7 @@ module ChefApply
280
285
  end
281
286
 
282
287
  def ssh_config_for_host(host)
283
- require "net/ssh"
288
+ require "net/ssh" unless defined?(Net::SSH)
284
289
  Net::SSH::Config.for(host)
285
290
  end
286
291
 
@@ -323,7 +328,9 @@ module ChefApply
323
328
  super(*(Array(init_params).flatten))
324
329
  end
325
330
  end
331
+
326
332
  class ChefNotInstalled < StandardError; end
333
+
327
334
  class UnsupportedTargetOS < ChefApply::ErrorNoLogs
328
335
  def initialize(os_name); super("CHEFTARG001", os_name); end
329
336
  end
@@ -0,0 +1,69 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2017 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ module ChefApply
19
+ class TargetHost
20
+ module MacOS
21
+ def omnibus_manifest_path
22
+ # TODO - if habitat install on target, this won't work
23
+ # Note that we can't use File::Join, because that will render for the
24
+ # CURRENT platform - not the platform of the target.
25
+ "/opt/chef/version-manifest.json"
26
+ end
27
+
28
+ def mkdir(path)
29
+ run_command!("mkdir -p #{path}")
30
+ end
31
+
32
+ def chown(path, owner)
33
+ owner ||= user
34
+ run_command!("chown #{owner} '#{path}'")
35
+ nil
36
+ end
37
+
38
+ def install_package(remote_path)
39
+ install_cmd = <<-EOS
40
+ hdiutil detach "/Volumes/chef_software" >/dev/null 2>&1 || true
41
+ hdiutil attach #{remote_path} -mountpoint "/Volumes/chef_software"
42
+ cd / && sudo /usr/sbin/installer -pkg `sudo find "/Volumes/chef_software" -name \\*.pkg` -target /
43
+ EOS
44
+ run_command!(install_cmd)
45
+ nil
46
+ end
47
+
48
+ def del_file(path)
49
+ run_command!("rm -rf #{path}")
50
+ end
51
+
52
+ def del_dir(path)
53
+ del_file(path)
54
+ end
55
+
56
+ def make_temp_dir
57
+ installer_dir = "/tmp/chef-installer"
58
+ run_command!("mkdir -p #{installer_dir}")
59
+ run_command!("chmod 777 #{installer_dir}")
60
+ installer_dir
61
+ end
62
+
63
+ def ws_cache_path
64
+ "/var/chef-workstation"
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -15,8 +15,8 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require "chef_apply/target_host"
19
- require "chef_apply/error"
18
+ require_relative "target_host"
19
+ require_relative "error"
20
20
 
21
21
  module ChefApply
22
22
  class TargetResolver
@@ -18,7 +18,7 @@
18
18
  require "chef/telemeter"
19
19
  # Monkey patch the telemetry lib to respect our config.toml
20
20
  # entry for telemetry.
21
- require "chef_apply/telemeter/patch"
21
+ require_relative "telemeter/patch"
22
22
  module ChefApply
23
23
  class Telemeter
24
24
  def self.timed_action_capture(action, &block)
@@ -36,5 +36,9 @@ module ChefApply
36
36
  end
37
37
  Chef::Telemeter.timed_capture(:action, { action: action.name, target: target_data }, &block)
38
38
  end
39
+
40
+ def self.capture(name, data = {}, options = {})
41
+ Chef::Telemeter.capture(name, data, options)
42
+ end
39
43
  end
40
44
  end
@@ -16,8 +16,8 @@
16
16
  #
17
17
 
18
18
  require "r18n-desktop"
19
- require "chef_apply/text/text_wrapper"
20
- require "chef_apply/text/error_translation"
19
+ require_relative "text/text_wrapper"
20
+ require_relative "text/error_translation"
21
21
 
22
22
  # A very thin wrapper around R18n, the idea being that we're likely to replace r18n
23
23
  # down the road and don't want to have to change all of our commands.
@@ -16,12 +16,12 @@
16
16
  #
17
17
 
18
18
  require "train/errors"
19
- require "pastel"
20
- require "chef_apply/error"
21
- require "chef_apply/config"
22
- require "chef_apply/text"
23
- require "chef_apply/ui/terminal"
24
- require "chef_apply/errors/standard_error_resolver"
19
+ require "pastel" unless defined?(Pastel)
20
+ require_relative "../error"
21
+ require_relative "../config"
22
+ require_relative "../text"
23
+ require_relative "terminal"
24
+ require_relative "../errors/standard_error_resolver"
25
25
 
26
26
  module ChefApply::UI
27
27
  class ErrorPrinter
@@ -14,8 +14,7 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
  #
17
- require "thread"
18
- require "chef_apply/ui/plain_text_element"
17
+ require_relative "plain_text_element"
19
18
 
20
19
  module ChefApply
21
20
  module UI
@@ -17,11 +17,11 @@
17
17
 
18
18
  require "tty-spinner"
19
19
  require "tty-cursor"
20
- require "chef_apply/status_reporter"
21
- require "chef_apply/config"
22
- require "chef_apply/log"
23
- require "chef_apply/ui/plain_text_element"
24
- require "chef_apply/ui/plain_text_header"
20
+ require_relative "../status_reporter"
21
+ require_relative "../config"
22
+ require_relative "../log"
23
+ require_relative "plain_text_element"
24
+ require_relative "plain_text_header"
25
25
 
26
26
  module ChefApply
27
27
  module UI
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module ChefApply
19
- VERSION = "0.4.13".freeze
19
+ VERSION = "0.6.0".freeze
20
20
  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.4.13
4
+ version: 0.6.0
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-01-24 00:00:00.000000000 Z
11
+ date: 2021-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-cli
@@ -156,28 +156,28 @@ dependencies:
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '15.0'
159
+ version: '16.0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: '15.0'
166
+ version: '16.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: chef-cli
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: 1.0.3
173
+ version: 2.0.10
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: 1.0.3
180
+ version: 2.0.10
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: chef-telemetry
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -196,36 +196,22 @@ dependencies:
196
196
  name: license-acceptance
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '1.0'
202
199
  - - ">="
203
200
  - !ruby/object:Gem::Version
204
201
  version: 1.0.11
202
+ - - "<"
203
+ - !ruby/object:Gem::Version
204
+ version: '3'
205
205
  type: :runtime
206
206
  prerelease: false
207
207
  version_requirements: !ruby/object:Gem::Requirement
208
208
  requirements:
209
- - - "~>"
210
- - !ruby/object:Gem::Version
211
- version: '1.0'
212
209
  - - ">="
213
210
  - !ruby/object:Gem::Version
214
211
  version: 1.0.11
215
- - !ruby/object:Gem::Dependency
216
- name: bundler
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - ">="
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - ">="
212
+ - - "<"
227
213
  - !ruby/object:Gem::Version
228
- version: '0'
214
+ version: '3'
229
215
  description: Ad-hoc management of individual nodes and devices.
230
216
  email:
231
217
  - workstation@chef.io
@@ -265,6 +251,7 @@ files:
265
251
  - lib/chef_apply/status_reporter.rb
266
252
  - lib/chef_apply/target_host.rb
267
253
  - lib/chef_apply/target_host/linux.rb
254
+ - lib/chef_apply/target_host/macos.rb
268
255
  - lib/chef_apply/target_host/windows.rb
269
256
  - lib/chef_apply/target_resolver.rb
270
257
  - lib/chef_apply/telemeter.rb
@@ -294,14 +281,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
294
281
  requirements:
295
282
  - - ">="
296
283
  - !ruby/object:Gem::Version
297
- version: 2.5.0
284
+ version: '2.6'
298
285
  required_rubygems_version: !ruby/object:Gem::Requirement
299
286
  requirements:
300
287
  - - ">="
301
288
  - !ruby/object:Gem::Version
302
289
  version: '0'
303
290
  requirements: []
304
- rubygems_version: 3.0.3
291
+ rubygems_version: 3.1.4
305
292
  signing_key:
306
293
  specification_version: 4
307
294
  summary: The ad-hoc execution tool for the Chef ecosystem.