kafo 7.0.0 → 7.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|