kafo 7.0.0 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/kafo-export-params +1 -1
- data/lib/kafo/configuration.rb +1 -1
- data/lib/kafo/data_type.rb +2 -2
- data/lib/kafo/data_types/float.rb +1 -1
- data/lib/kafo/data_types/not_undef.rb +5 -7
- data/lib/kafo/data_types/optional.rb +5 -7
- data/lib/kafo/exceptions.rb +3 -0
- data/lib/kafo/execution_environment.rb +11 -0
- data/lib/kafo/help_builders/base.rb +2 -4
- data/lib/kafo/hiera_configurer.rb +1 -1
- data/lib/kafo/hook_context.rb +8 -0
- data/lib/kafo/kafo_configure.rb +28 -20
- data/lib/kafo/multi_stage_hook.rb +2 -2
- data/lib/kafo/param.rb +4 -4
- data/lib/kafo/progress_bar.rb +2 -2
- data/lib/kafo/progress_bars/black_white.rb +1 -1
- data/lib/kafo/progress_bars/colored.rb +1 -1
- data/lib/kafo/puppet_command.rb +2 -2
- data/lib/kafo/puppet_failed_resource.rb +68 -0
- data/lib/kafo/puppet_module.rb +4 -4
- data/lib/kafo/puppet_report.rb +64 -0
- data/lib/kafo/scenario_manager.rb +1 -1
- data/lib/kafo/version.rb +1 -1
- data/lib/kafo/wizard.rb +1 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2f9f3f9827dd2b9f738acab79a596169fd4c4ea075ec5a99c35a40f291dfcee
|
4
|
+
data.tar.gz: 1695c0717da6eb8809a14114bd09746efcb1dd82773cf585dbb987ea97c13f8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d26ee6f46875bcaa7f77c2e83dfc7b77aaee073f0977e9dedb1afc977fd118bc55fb430f450dacab0b8d016bf0805462a4a8c4bfe5cbd82e4d515abcc6c915a
|
7
|
+
data.tar.gz: c5b129d7e90fb1895afc03781b723e2cd9fa792eb2f3ac1d754a8c744f120a555be977067af66f4c1868ab5fc195093bd1623195b117f73be57106888504ff43
|
data/bin/kafo-export-params
CHANGED
@@ -125,7 +125,7 @@ module Kafo
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def print_out
|
128
|
-
puts "| #{
|
128
|
+
puts "| #{'Parameter name'.ljust(40)} | #{'Description'.ljust(@max)} |"
|
129
129
|
puts "| #{'-'*40} | #{'-' * @max} |"
|
130
130
|
@config.modules.sort.each do |mod|
|
131
131
|
mod.params.sort.each do |param|
|
data/lib/kafo/configuration.rb
CHANGED
@@ -383,7 +383,7 @@ EOS
|
|
383
383
|
# Loads YAML from mixed output, finding the "---" and "..." document start/end delimiters
|
384
384
|
def load_yaml_from_output(lines)
|
385
385
|
start = lines.find_index { |l| l.start_with?('---') }
|
386
|
-
last = lines[start
|
386
|
+
last = lines[start..].find_index("...")
|
387
387
|
if start.nil? || last.nil?
|
388
388
|
puts "Could not find default values in output"
|
389
389
|
@logger.error 'Could not find default values in Puppet output, cannot continue'
|
data/lib/kafo/data_type.rb
CHANGED
@@ -61,7 +61,7 @@ module Kafo
|
|
61
61
|
bracket_count = 1
|
62
62
|
until bracket_count.zero?
|
63
63
|
next_bracket = scanner.scan_until(/[\[\]]/) or raise ConfigurationException, "missing close bracket in argument #{args.count + 1} in data type #{input}"
|
64
|
-
case next_bracket[-1
|
64
|
+
case next_bracket[-1..]
|
65
65
|
when '['
|
66
66
|
bracket_count += 1
|
67
67
|
when ']'
|
@@ -102,7 +102,7 @@ module Kafo
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def typecast(value)
|
105
|
-
value == 'UNDEF' ? nil : value
|
105
|
+
(value == 'UNDEF') ? nil : value
|
106
106
|
end
|
107
107
|
|
108
108
|
def valid?(value, errors = [])
|
@@ -8,13 +8,11 @@ module Kafo
|
|
8
8
|
attr_reader :inner_type, :inner_value
|
9
9
|
|
10
10
|
def initialize(inner_type_or_value)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@inner_value = inner_type_or_value
|
17
|
-
end
|
11
|
+
@inner_type = DataType.new_from_string(inner_type_or_value)
|
12
|
+
@inner_value = nil
|
13
|
+
rescue ConfigurationException
|
14
|
+
@inner_type = nil
|
15
|
+
@inner_value = inner_type_or_value
|
18
16
|
end
|
19
17
|
|
20
18
|
def to_s
|
@@ -8,13 +8,11 @@ module Kafo
|
|
8
8
|
attr_reader :inner_type, :inner_value
|
9
9
|
|
10
10
|
def initialize(inner_type_or_value)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@inner_value = inner_type_or_value
|
17
|
-
end
|
11
|
+
@inner_type = DataType.new_from_string(inner_type_or_value)
|
12
|
+
@inner_value = nil
|
13
|
+
rescue ConfigurationException
|
14
|
+
@inner_type = nil
|
15
|
+
@inner_value = inner_type_or_value
|
18
16
|
end
|
19
17
|
|
20
18
|
def to_s
|
data/lib/kafo/exceptions.rb
CHANGED
@@ -19,6 +19,15 @@ module Kafo
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def reportdir
|
23
|
+
@reportdir ||= File.join(directory, 'reports')
|
24
|
+
end
|
25
|
+
|
26
|
+
def reports
|
27
|
+
# Reports are stored in $reportdir/$certname/$report
|
28
|
+
Dir.glob(File.join(reportdir, '*', '*.*')).sort_by { |path| File.mtime(path) }
|
29
|
+
end
|
30
|
+
|
22
31
|
def store_answers
|
23
32
|
answer_data = HieraConfigurer.generate_data(@config.modules, @config.app[:order])
|
24
33
|
@logger.debug("Writing temporary answers to #{answer_file}")
|
@@ -37,6 +46,8 @@ module Kafo
|
|
37
46
|
'environmentpath' => environmentpath,
|
38
47
|
'factpath' => factpath,
|
39
48
|
'hiera_config' => hiera_config,
|
49
|
+
'reports' => 'store',
|
50
|
+
'reportdir' => reportdir,
|
40
51
|
}.merge(settings)
|
41
52
|
|
42
53
|
PuppetConfigurer.new(puppet_conf, settings)
|
@@ -84,10 +84,8 @@ module Kafo
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def parametrization
|
87
|
-
@parametrization ||=
|
88
|
-
|
89
|
-
h.update(parametrize(p) => p, parametrize(p, 'reset-') => p)
|
90
|
-
end
|
87
|
+
@parametrization ||= @params.inject({}) do |h,p|
|
88
|
+
h.update(parametrize(p) => p, parametrize(p, 'reset-') => p)
|
91
89
|
end
|
92
90
|
end
|
93
91
|
end
|
@@ -22,7 +22,7 @@ module Kafo
|
|
22
22
|
classes = []
|
23
23
|
data = modules.select(&:enabled?).inject({}) do |config, mod|
|
24
24
|
classes << mod.class_name
|
25
|
-
config.update(
|
25
|
+
config.update(mod.params_hash.transform_keys { |k| "#{mod.class_name}::#{k}" })
|
26
26
|
end
|
27
27
|
data['classes'] = sort_modules(classes, order)
|
28
28
|
data
|
data/lib/kafo/hook_context.rb
CHANGED
@@ -196,5 +196,13 @@ module Kafo
|
|
196
196
|
def exit_code
|
197
197
|
self.kafo.exit_code
|
198
198
|
end
|
199
|
+
|
200
|
+
# Return the Puppet report, if any.
|
201
|
+
# Only available after Puppet actual ran.
|
202
|
+
#
|
203
|
+
# @return [Optional[Kafo::PuppetReport]]
|
204
|
+
def puppet_report
|
205
|
+
self.kafo.puppet_report
|
206
|
+
end
|
199
207
|
end
|
200
208
|
end
|
data/lib/kafo/kafo_configure.rb
CHANGED
@@ -21,7 +21,9 @@ require 'kafo/help_builder'
|
|
21
21
|
require 'kafo/wizard'
|
22
22
|
require 'kafo/system_checker'
|
23
23
|
require 'kafo/puppet_command'
|
24
|
+
require 'kafo/puppet_failed_resource'
|
24
25
|
require 'kafo/puppet_log_parser'
|
26
|
+
require 'kafo/puppet_report'
|
25
27
|
require 'kafo/progress_bar'
|
26
28
|
require 'kafo/hooking'
|
27
29
|
require 'kafo/exit_handler'
|
@@ -34,6 +36,8 @@ module Kafo
|
|
34
36
|
class KafoConfigure < Clamp::Command
|
35
37
|
include StringHelper
|
36
38
|
|
39
|
+
attr_accessor :puppet_report
|
40
|
+
|
37
41
|
class << self
|
38
42
|
include AppOption::Declaration
|
39
43
|
|
@@ -510,29 +514,27 @@ module Kafo
|
|
510
514
|
logger.notice("Starting system configuration.")
|
511
515
|
|
512
516
|
PTY.spawn(*PuppetCommand.format_command(command)) do |stdin, stdout, pid|
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
if (output
|
520
|
-
|
521
|
-
logger.notice("#{output[:count].to_i - 1} configuration steps out of #{output[:total]} steps complete.")
|
522
|
-
end
|
517
|
+
stdin.each do |line|
|
518
|
+
line = normalize_encoding(line)
|
519
|
+
method, message = log_parser.parse(line)
|
520
|
+
progress_log(method, message, logger)
|
521
|
+
|
522
|
+
if (output = line.match(/(?:.+\]): Starting to evaluate the resource( \((?<count>\d+) of (?<total>\d+)\))?/))
|
523
|
+
if (output[:count].to_i % 250) == 1 && output[:count].to_i != 1
|
524
|
+
logger.notice("#{output[:count].to_i - 1} configuration steps out of #{output[:total]} steps complete.")
|
523
525
|
end
|
524
|
-
|
525
|
-
@progress_bar.update(line) if @progress_bar
|
526
526
|
end
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
527
|
+
|
528
|
+
@progress_bar.update(line) if @progress_bar
|
529
|
+
end
|
530
|
+
rescue Errno::EIO # we reach end of input
|
531
|
+
exit_status = PTY.check(pid, true)
|
532
|
+
if exit_status.nil? # process is still running
|
533
|
+
begin
|
534
|
+
Process.wait(pid)
|
535
|
+
rescue Errno::ECHILD # process could exit meanwhile so we rescue
|
535
536
|
end
|
537
|
+
self.class.exit_handler.exit_code = $?.exitstatus
|
536
538
|
end
|
537
539
|
end
|
538
540
|
rescue PTY::ChildExited => e # could be raised by PTY.check
|
@@ -542,6 +544,12 @@ module Kafo
|
|
542
544
|
@progress_bar.close if @progress_bar
|
543
545
|
logger.notice "System configuration has finished."
|
544
546
|
|
547
|
+
if (last_report = execution_env.reports.last)
|
548
|
+
# For debugging: you can easily copy the last report to fixtures
|
549
|
+
# FileUtils.cp(last_report, File.join(__dir__, '..', '..', 'test', 'fixtures', 'reports', File.basename(last_report)))
|
550
|
+
self.puppet_report = PuppetReport.load_report_file(last_report)
|
551
|
+
end
|
552
|
+
|
545
553
|
self.class.hooking.execute(:post)
|
546
554
|
self.class.exit(exit_code)
|
547
555
|
end
|
@@ -4,8 +4,8 @@ module Kafo
|
|
4
4
|
default_name = name
|
5
5
|
|
6
6
|
types.each do |hook_type|
|
7
|
-
self.class.send(:define_method, hook_type) do |
|
8
|
-
registry.send(:register, hook_type,
|
7
|
+
self.class.send(:define_method, hook_type) do |hook_name = nil, &block|
|
8
|
+
registry.send(:register, hook_type, hook_name || default_name, &block)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/kafo/param.rb
CHANGED
@@ -47,7 +47,7 @@ module Kafo
|
|
47
47
|
# For literal default values, only use 'manifest_default'. For variable or values from a data
|
48
48
|
# lookup, use the value loaded back from the dump in 'default'.
|
49
49
|
def default
|
50
|
-
@type.typecast(dump_default_needed? || !@default.nil? ? @default : manifest_default)
|
50
|
+
@type.typecast((dump_default_needed? || !@default.nil?) ? @default : manifest_default)
|
51
51
|
end
|
52
52
|
|
53
53
|
def default=(default)
|
@@ -71,7 +71,7 @@ module Kafo
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def manifest_default_params_variable
|
74
|
-
manifest_default[1
|
74
|
+
manifest_default[1..] if dump_default_needed?
|
75
75
|
end
|
76
76
|
|
77
77
|
def module_name
|
@@ -132,7 +132,7 @@ module Kafo
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def visible?(context = [])
|
135
|
-
condition.nil? || condition.empty? ? true : evaluate_condition(context)
|
135
|
+
(condition.nil? || condition.empty?) ? true : evaluate_condition(context)
|
136
136
|
end
|
137
137
|
|
138
138
|
def condition_value
|
@@ -155,7 +155,7 @@ module Kafo
|
|
155
155
|
arg
|
156
156
|
end
|
157
157
|
end.map do |arg|
|
158
|
-
arg == :undef ? nil : arg
|
158
|
+
(arg == :undef) ? nil : arg
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
data/lib/kafo/progress_bar.rb
CHANGED
@@ -39,7 +39,7 @@ module Kafo
|
|
39
39
|
|
40
40
|
if (line_monitor = MONITOR_RESOURCE.match(line))
|
41
41
|
@resources << line_monitor[1]
|
42
|
-
@total = (@total == :unknown ? 1 : @total + 1)
|
42
|
+
@total = ((@total == :unknown) ? 1 : @total + 1)
|
43
43
|
end
|
44
44
|
|
45
45
|
if (line_start = EVALTRACE_START.match(line))
|
@@ -71,7 +71,7 @@ module Kafo
|
|
71
71
|
|
72
72
|
def close
|
73
73
|
@bar.show({ :msg => done_message,
|
74
|
-
:done => @total == :unknown ? @bar.done + 1 : @total,
|
74
|
+
:done => (@total == :unknown) ? @bar.done + 1 : @total,
|
75
75
|
:total => @total }, true)
|
76
76
|
@bar.close
|
77
77
|
end
|
data/lib/kafo/puppet_command.rb
CHANGED
@@ -43,7 +43,7 @@ module Kafo
|
|
43
43
|
File.join([bin_path, bin_name].compact)
|
44
44
|
end
|
45
45
|
|
46
|
-
def self.
|
46
|
+
def self.aio_puppet?
|
47
47
|
puppet_command = search_puppet_path('puppet')
|
48
48
|
File.realpath(puppet_command).start_with?('/opt/puppetlabs')
|
49
49
|
rescue Errno::ENOENT
|
@@ -51,7 +51,7 @@ module Kafo
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def self.format_command(command)
|
54
|
-
if
|
54
|
+
if aio_puppet?
|
55
55
|
[clean_env_vars, command, :unsetenv_others => true]
|
56
56
|
else
|
57
57
|
[::ENV, command, :unsetenv_others => false]
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Kafo
|
2
|
+
class PuppetFailedResource
|
3
|
+
# @param [Hash] status
|
4
|
+
# The status hash from the report
|
5
|
+
# @param [Array[Hash]] logs
|
6
|
+
# Relevant log lines for this resoure
|
7
|
+
def initialize(status, logs)
|
8
|
+
@status = status
|
9
|
+
@logs = logs
|
10
|
+
end
|
11
|
+
|
12
|
+
# @example
|
13
|
+
# puppet_failed_resource.resource == 'Exec[/bin/true]'
|
14
|
+
# @return [String] A resource
|
15
|
+
def resource
|
16
|
+
@status['resource']
|
17
|
+
end
|
18
|
+
|
19
|
+
# @example
|
20
|
+
# puppet_failed_resource.type == 'Exec'
|
21
|
+
# @return [String] A resource type
|
22
|
+
def type
|
23
|
+
@status['resource_type']
|
24
|
+
end
|
25
|
+
|
26
|
+
# @example
|
27
|
+
# puppet_failed_resource.title == '/bin/true'
|
28
|
+
# @return [String] A resource title
|
29
|
+
def title
|
30
|
+
@status['title']
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
"Puppet #{type} resource '#{title}'"
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Array[String]] The event messages
|
38
|
+
def event_messages
|
39
|
+
@status['events'].map { |event| event['message'] }
|
40
|
+
end
|
41
|
+
|
42
|
+
# A collection of Puppet log messages
|
43
|
+
#
|
44
|
+
# The log messages include detailed information of what failed. Some debug
|
45
|
+
# information, such as timing but crucially the command output, both stdout
|
46
|
+
# and stderr.
|
47
|
+
#
|
48
|
+
# @return [Array[String]] The Puppet log messages for this resource
|
49
|
+
def log_messages
|
50
|
+
@logs.map { |log| log['message'] }
|
51
|
+
end
|
52
|
+
|
53
|
+
# A collection of Puppet log messages grouped by source
|
54
|
+
#
|
55
|
+
# The log messages include detailed information of what failed. Some debug
|
56
|
+
# information, such as timing but crucially the command output, both stdout
|
57
|
+
# and stderr.
|
58
|
+
#
|
59
|
+
# A resource can have multiple sources. For example, exec can have both
|
60
|
+
# unless and returns. Combining the output of those can be confusing, so
|
61
|
+
# this presents them separate.
|
62
|
+
#
|
63
|
+
# @return [Hash[String, Array[String]]] The Puppet log messages for this resource
|
64
|
+
def log_messages_by_source
|
65
|
+
@logs.group_by { |log| log['source'] }.transform_values { |logs| logs.map { |log| log['message'] } }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/kafo/puppet_module.rb
CHANGED
@@ -123,7 +123,7 @@ module Kafo
|
|
123
123
|
|
124
124
|
# mapping from configuration with stringified keys
|
125
125
|
def mapping
|
126
|
-
@mapping ||=
|
126
|
+
@mapping ||= @configuration.app[:mapping].transform_keys(&:to_s)
|
127
127
|
end
|
128
128
|
|
129
129
|
# custom module directory name
|
@@ -137,7 +137,7 @@ module Kafo
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def get_class_name
|
140
|
-
manifest_name == 'init' ? name : "#{dir_name}::#{manifest_name.gsub('/', '::')}"
|
140
|
+
(manifest_name == 'init') ? name : "#{dir_name}::#{manifest_name.gsub('/', '::')}"
|
141
141
|
end
|
142
142
|
|
143
143
|
def get_params_path
|
@@ -165,11 +165,11 @@ module Kafo
|
|
165
165
|
end
|
166
166
|
|
167
167
|
def default_manifest_name
|
168
|
-
identifier.include?('::') ? identifier.split('::')[1
|
168
|
+
identifier.include?('::') ? identifier.split('::')[1..].join('/') : 'init'
|
169
169
|
end
|
170
170
|
|
171
171
|
def default_params_name
|
172
|
-
identifier.include?('::') ? (identifier.split('::')[1
|
172
|
+
identifier.include?('::') ? (identifier.split('::')[1..] + ['params']).join('/') : 'params'
|
173
173
|
end
|
174
174
|
|
175
175
|
def get_name
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Kafo
|
2
|
+
# An abstraction over the Puppet report format
|
3
|
+
#
|
4
|
+
# @see https://puppet.com/docs/puppet/8/format_report.html
|
5
|
+
class PuppetReport
|
6
|
+
# Load a Puppet report from a path
|
7
|
+
#
|
8
|
+
# Both YAML and JSON are supported.
|
9
|
+
#
|
10
|
+
# @param [String] path
|
11
|
+
# The path to Puppet report
|
12
|
+
#
|
13
|
+
# @return [PuppetReport] The report from the path
|
14
|
+
def self.load_report_file(path)
|
15
|
+
raise ArgumentError, 'No path given' unless path || path.empty?
|
16
|
+
raise ArgumentError, "#{path} is not a readable file" unless File.file?(path) && File.readable?(path)
|
17
|
+
|
18
|
+
data = case File.extname(path)
|
19
|
+
when '.yaml'
|
20
|
+
require 'yaml'
|
21
|
+
content = File.read(path).gsub(%r{!ruby/object.*$}, '')
|
22
|
+
YAML.safe_load(content, permitted_classes: [Time, Symbol])
|
23
|
+
when '.json'
|
24
|
+
require 'json'
|
25
|
+
JSON.parse(File.read(path))
|
26
|
+
else
|
27
|
+
raise ArgumentError, "Unsupported file extension for #{path}"
|
28
|
+
end
|
29
|
+
|
30
|
+
PuppetReport.new(data)
|
31
|
+
end
|
32
|
+
|
33
|
+
# @param [Hash] report
|
34
|
+
# The Puppet report
|
35
|
+
def initialize(report)
|
36
|
+
@report = report
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Integer] The report format
|
40
|
+
def report_format
|
41
|
+
@report['report_format']
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Array[Hash]] The Puppet logs
|
45
|
+
def logs
|
46
|
+
@report['logs']
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [Array[PuppetFailedResource]] The failed resources and their status
|
50
|
+
def failed_resources
|
51
|
+
statuses = @report['resource_statuses']
|
52
|
+
|
53
|
+
raise PuppetReportError, "No resource statuses found in report" unless statuses
|
54
|
+
|
55
|
+
statuses.select { |_title, status| status['failed'] }.map do |title, status|
|
56
|
+
# TODO: There's also a message with source Puppet
|
57
|
+
# Executing with uid=USER: '/tmp/failing-command'
|
58
|
+
# This shows up after Executing '/tmp/failing-command'
|
59
|
+
related_logs = logs.select { |log| log['source'].include?(title) }
|
60
|
+
PuppetFailedResource.new(status, related_logs)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -35,7 +35,7 @@ module Kafo
|
|
35
35
|
say ::HighLine.color("Available scenarios", :info)
|
36
36
|
available_scenarios.each do |config_file, content|
|
37
37
|
scenario = File.basename(config_file, '.yaml')
|
38
|
-
use = (File.expand_path(config_file) == @previous_scenario ? 'INSTALLED' : "use: --scenario #{scenario}")
|
38
|
+
use = ((File.expand_path(config_file) == @previous_scenario) ? 'INSTALLED' : "use: --scenario #{scenario}")
|
39
39
|
say ::HighLine.color(" #{content[:name]} ", :title)
|
40
40
|
say "(#{use})"
|
41
41
|
say " " + content[:description] if !content[:description].nil? && !content[:description].empty?
|
data/lib/kafo/version.rb
CHANGED
data/lib/kafo/wizard.rb
CHANGED
@@ -190,7 +190,7 @@ END
|
|
190
190
|
else
|
191
191
|
HighLine::SystemExtensions.terminal_size
|
192
192
|
end
|
193
|
-
highline.wrap_at = data.first > 80 ? 80 : data.first if data.first
|
193
|
+
highline.wrap_at = (data.first > 80) ? 80 : data.first if data.first
|
194
194
|
highline.page_at = data.last if data.last
|
195
195
|
highline
|
196
196
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kafo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marek Hulan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: minitest
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: minitest
|
48
|
+
name: minitest-reporters
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
62
|
+
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
90
|
+
name: ansi
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - ">="
|
@@ -101,7 +101,7 @@ dependencies:
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
104
|
+
name: kafo_wizards
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - ">="
|
@@ -273,8 +273,10 @@ files:
|
|
273
273
|
- lib/kafo/progress_bars/colored.rb
|
274
274
|
- lib/kafo/puppet_command.rb
|
275
275
|
- lib/kafo/puppet_configurer.rb
|
276
|
+
- lib/kafo/puppet_failed_resource.rb
|
276
277
|
- lib/kafo/puppet_log_parser.rb
|
277
278
|
- lib/kafo/puppet_module.rb
|
279
|
+
- lib/kafo/puppet_report.rb
|
278
280
|
- lib/kafo/scenario_manager.rb
|
279
281
|
- lib/kafo/scenario_option.rb
|
280
282
|
- lib/kafo/store.rb
|