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 +4 -4
- data/Gemfile +2 -8
- data/Rakefile +0 -7
- data/bin/chef-run +1 -1
- data/chef-apply.gemspec +9 -14
- data/i18n/en.yml +3 -2
- data/i18n/errors/en.yml +14 -6
- data/lib/chef_apply/action/base.rb +1 -1
- data/lib/chef_apply/action/converge_target.rb +5 -5
- data/lib/chef_apply/action/converge_target/ccr_failure_mapper.rb +1 -1
- data/lib/chef_apply/action/generate_local_policy.rb +3 -2
- data/lib/chef_apply/action/generate_temp_cookbook.rb +4 -4
- data/lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb +5 -5
- data/lib/chef_apply/action/generate_temp_cookbook/temp_cookbook.rb +6 -6
- data/lib/chef_apply/action/install_chef.rb +10 -4
- data/lib/chef_apply/action/install_chef/minimum_chef_version.rb +6 -2
- data/lib/chef_apply/cli.rb +22 -22
- data/lib/chef_apply/cli/help.rb +1 -1
- data/lib/chef_apply/cli/options.rb +3 -3
- data/lib/chef_apply/cli/validation.rb +3 -1
- data/lib/chef_apply/config.rb +6 -6
- data/lib/chef_apply/errors/standard_error_resolver.rb +2 -2
- data/lib/chef_apply/file_fetcher.rb +4 -4
- data/lib/chef_apply/startup.rb +14 -12
- data/lib/chef_apply/target_host.rb +12 -5
- data/lib/chef_apply/target_host/macos.rb +69 -0
- data/lib/chef_apply/target_resolver.rb +2 -2
- data/lib/chef_apply/telemeter.rb +5 -1
- data/lib/chef_apply/text.rb +2 -2
- data/lib/chef_apply/ui/error_printer.rb +6 -6
- data/lib/chef_apply/ui/plain_text_header.rb +1 -2
- data/lib/chef_apply/ui/terminal.rb +5 -5
- data/lib/chef_apply/version.rb +1 -1
- metadata +14 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b787c2d47fe3b153a3c8e46613bb62f13b6346a8efad7ae1efe8ece667b3c53c
|
4
|
+
data.tar.gz: 398bd9ad985fff7b688ce12983c195daadd93048f226834a7463f141c5f71675
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c70ecbd0e62ae60c3fc6e7d9e19e72f44aefa5325f83218f495e6cd42abc5bc7809b76b1a1bf2c06f47375be2f85ad0e4d7bd51a637c6210cc87b9237864e0d7
|
7
|
+
data.tar.gz: 6564f0e408919ac1ae2b1e611feeb9bd7517117d1a3a2e33240a973ec3bca0ea4577650e2b0c20fc7ae71229965fad38879b1429425bf9ff84f48f0ee16ea5ec
|
data/Gemfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c)
|
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
data/chef-apply.gemspec
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
lib = File.expand_path("
|
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.
|
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"
|
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
|
-
|
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", ">=
|
56
|
-
spec.add_dependency "chef-cli", ">=
|
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", "
|
55
|
+
spec.add_dependency "license-acceptance", ">= 1.0.11", "< 3"
|
59
56
|
|
60
|
-
spec.
|
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
|
-
|
28
|
+
enabled=false
|
29
29
|
|
30
30
|
For more information about what we data gather and additional opt-out
|
31
|
-
options, visit https://chef.
|
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/
|
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/
|
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/
|
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/
|
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://
|
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 }
|
@@ -15,9 +15,9 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
|
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
|
-
|
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,8 +15,8 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
|
19
|
-
|
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
|
-
|
18
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
19
|
-
|
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)
|
data/lib/chef_apply/cli.rb
CHANGED
@@ -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
|
-
|
20
|
+
require_relative "config"
|
21
21
|
require "chef-config/config"
|
22
22
|
require "chef-config/logger"
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/chef_apply/cli/help.rb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
|
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.
|
68
|
-
raise OptionValidationError.new("CHEFVAL001",
|
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
|
-
|
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
|
data/lib/chef_apply/config.rb
CHANGED
@@ -15,10 +15,10 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
|
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(:
|
113
|
-
default(:
|
112
|
+
default(:dev_mode, false)
|
113
|
+
default(:enabled, true)
|
114
114
|
end
|
115
115
|
|
116
116
|
config_context :log do
|
@@ -15,10 +15,10 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
require "net/http"
|
19
|
-
require "uri"
|
20
|
-
|
21
|
-
|
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
|
data/lib/chef_apply/startup.rb
CHANGED
@@ -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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
137
|
+
require_relative "target_host/linux"
|
138
138
|
class << self; include ChefApply::TargetHost::Linux; end
|
139
139
|
when :windows
|
140
|
-
|
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
|
data/lib/chef_apply/telemeter.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/chef_apply/text.rb
CHANGED
@@ -16,8 +16,8 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require "r18n-desktop"
|
19
|
-
|
20
|
-
|
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
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
@@ -17,11 +17,11 @@
|
|
17
17
|
|
18
18
|
require "tty-spinner"
|
19
19
|
require "tty-cursor"
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
data/lib/chef_apply/version.rb
CHANGED
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
|
+
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:
|
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: '
|
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: '
|
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:
|
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:
|
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
|
-
-
|
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: '
|
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.
|
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.
|
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.
|