kafo 6.1.0 → 6.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c94f318599cc4644b57c55556ec625347b4fbac35a4a545708ae5f5dc7f70073
4
- data.tar.gz: 9c5b2568c13a0aca23af2615f6f11f08357fb4e6c28a0eab51f48585bcd76c8d
3
+ metadata.gz: d246040f3b21a35b8ec0091c61333fbd5b3ecc8af9fb7d6ed666de850a101bf9
4
+ data.tar.gz: 9ab7731a6e46877cebfdffffbd7b06e5c11951821be90ff2743aa726c889c418
5
5
  SHA512:
6
- metadata.gz: b0c922769add3c8047b2fb44a411366842c0b6ad852aa224b432ad99f7d51ac5fe6702d6df3962a7bede5af1aa1f8890778cf3c6a09067407d6e91f00aded6a7
7
- data.tar.gz: 1e2bfc89f29d6ada5367129b52d315be14b67f55c2baf39f0f747a8d0a586497941e1924a6bb75f17b048d2a40c40036c38721e5d9b5d44e583ee8aa640143bf
6
+ metadata.gz: fb5d804b5c587646b9576f4ba6a67c9b0bd3702ddfad877750beb81b61710fd5b104db0fe36b7cf1cfd1f286d1548fb5b48acb9b778652df6c075600176df88d
7
+ data.tar.gz: 406667aac6a714122c3ec8d00a90ec630843bd6939167f23142e94bf465be51c8e098380815e869be64af9090b726a2e6a368542e18137a4fdb2493a52ed6246
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ load 'tasks/jenkins.rake'
4
4
 
5
5
  Rake::TestTask.new('test:ruby') do |t|
6
6
  t.libs << 'lib' << 'test'
7
- t.test_files = FileList['test/**/*_test.rb']
7
+ t.test_files = FileList['test/**/*_test.rb'] - FileList['test/tmp/**/*_test.rb']
8
8
  t.verbose = true
9
9
  end
10
10
 
@@ -31,6 +31,13 @@ namespace 'test' do
31
31
  end
32
32
  end
33
33
 
34
+ begin
35
+ require 'rubocop/rake_task'
36
+ RuboCop::RakeTask.new
37
+ rescue LoadError
38
+ puts 'Rubocop not loaded'
39
+ end
40
+
34
41
  CLEAN.include 'test/tmp'
35
42
 
36
43
  task :test => ['test:ruby', 'test:puppet_modules']
@@ -3,7 +3,6 @@ require_relative 'definition'
3
3
  module Kafo
4
4
  module AppOption
5
5
  module Declaration
6
-
7
6
  include Clamp::Option::Declaration
8
7
 
9
8
  def app_option(switches, type, description, opts = {}, &block)
@@ -13,7 +12,6 @@ module Kafo
13
12
  declared_options << option
14
13
  end
15
14
  end
16
-
17
15
  end
18
16
  end
19
17
  end
@@ -1,7 +1,6 @@
1
1
  module Kafo
2
2
  module AppOption
3
3
  class Definition < Clamp::Option::Definition
4
-
5
4
  def initialize(switches, type, description, options = {})
6
5
  @advanced = options.fetch(:advanced, false)
7
6
  super(switches, type, description, options)
@@ -10,7 +9,6 @@ module Kafo
10
9
  def advanced?
11
10
  @advanced
12
11
  end
13
-
14
12
  end
15
13
  end
16
14
  end
@@ -1,4 +1,4 @@
1
- require 'highline/import'
1
+ require 'highline'
2
2
 
3
3
  module Kafo
4
4
  class ColorScheme
@@ -7,7 +7,7 @@ module Kafo
7
7
  ::ENV['TERM'] && !`which tput 2> /dev/null`.empty? && `tput colors`.to_i > 0
8
8
  end
9
9
 
10
- def initialize(options={})
10
+ def initialize(options = {})
11
11
  @background = options[:background].nil? ? :dark : options[:background]
12
12
  @colors = options[:colors].nil? ? self.class.colors_possible? : options[:colors]
13
13
  end
@@ -5,43 +5,44 @@ require 'kafo/puppet_module'
5
5
  require 'kafo/color_scheme'
6
6
  require 'kafo/data_type_parser'
7
7
  require 'kafo/execution_environment'
8
+ require 'kafo/scenario_option'
8
9
 
9
10
  module Kafo
10
11
  class Configuration
11
12
  attr_reader :config_file, :answer_file, :scenario_id
12
13
 
13
14
  DEFAULT = {
14
- :name => '',
15
- :description => '',
16
- :enabled => true,
17
- :log_dir => '/var/log/kafo',
18
- :log_owner => nil,
19
- :log_group => nil,
20
- :store_dir => '',
21
- :log_name => 'configuration.log',
22
- :log_level => 'notice',
23
- :no_prefix => false,
24
- :mapping => {},
25
- :answer_file => './config/answers.yaml',
26
- :installer_dir => '.',
27
- :module_dirs => ['./modules'],
28
- :colors => Kafo::ColorScheme.colors_possible?,
29
- :color_of_background => :dark,
30
- :hook_dirs => [],
31
- :check_dirs => nil,
32
- :custom => {},
33
- :facts => {},
34
- :low_priority_modules => [],
35
- :verbose => false,
36
- :verbose_log_level => 'notice',
37
- :skip_puppet_version_check => false,
38
- :parser_cache_path => nil,
39
- :ignore_undocumented => nil,
40
- :order => nil,
41
- :hiera_config => nil,
42
- :kafo_modules_dir => nil,
43
- :config_header_file => nil,
44
- :dont_save_answers => nil,
15
+ ScenarioOption::NAME => '',
16
+ ScenarioOption::DESCRIPTION => '',
17
+ ScenarioOption::ENABLED => true,
18
+ ScenarioOption::LOG_DIR => '/var/log/kafo',
19
+ ScenarioOption::LOG_OWNER => nil,
20
+ ScenarioOption::LOG_GROUP => nil,
21
+ ScenarioOption::STORE_DIR => '',
22
+ ScenarioOption::LOG_NAME => 'configuration.log',
23
+ ScenarioOption::LOG_LEVEL => 'notice',
24
+ ScenarioOption::NO_PREFIX => false,
25
+ ScenarioOption::MAPPING => {},
26
+ ScenarioOption::ANSWER_FILE => './config/answers.yaml',
27
+ ScenarioOption::INSTALLER_DIR => '.',
28
+ ScenarioOption::MODULE_DIRS => ['./modules'],
29
+ ScenarioOption::COLORS => Kafo::ColorScheme.colors_possible?,
30
+ ScenarioOption::COLOR_OF_BACKGROUND => :dark,
31
+ ScenarioOption::HOOK_DIRS => [],
32
+ ScenarioOption::CHECK_DIRS => nil,
33
+ ScenarioOption::CUSTOM => {},
34
+ ScenarioOption::FACTS => {},
35
+ ScenarioOption::LOW_PRIORITY_MODULES => [],
36
+ ScenarioOption::VERBOSE => false,
37
+ ScenarioOption::VERBOSE_LOG_LEVEL => 'notice',
38
+ ScenarioOption::SKIP_PUPPET_VERSION_CHECK => false,
39
+ ScenarioOption::PARSER_CACHE_PATH => nil,
40
+ ScenarioOption::IGNORE_UNDOCUMENTED => nil,
41
+ ScenarioOption::ORDER => nil,
42
+ ScenarioOption::HIERA_CONFIG => nil,
43
+ ScenarioOption::KAFO_MODULES_DIR => nil,
44
+ ScenarioOption::CONFIG_HEADER_FILE => nil,
45
+ ScenarioOption::DONT_SAVE_ANSWERS => nil,
45
46
  }
46
47
 
47
48
  def self.get_scenario_id(filename)
@@ -170,7 +171,7 @@ module Kafo
170
171
  save_configuration(app)
171
172
  end
172
173
 
173
- def migrate_configuration(from_config, options={})
174
+ def migrate_configuration(from_config, options = {})
174
175
  keys_to_skip = options.fetch(:skip, [])
175
176
  keys = [:log_dir, :log_name, :log_level, :no_prefix,
176
177
  :colors, :color_of_background, :custom, :verbose_log_level]
@@ -197,7 +198,7 @@ module Kafo
197
198
  }
198
199
  EOS
199
200
 
200
- @logger.notice 'Loading default values from puppet modules...'
201
+ @logger.info "Loading default values from puppet modules..."
201
202
  command = PuppetCommand.new(dump_manifest, [], puppetconf, self).command
202
203
  stdout, stderr, status = Open3.capture3(*PuppetCommand.format_command(command))
203
204
 
@@ -222,7 +223,7 @@ EOS
222
223
  end
223
224
  end
224
225
 
225
- @logger.notice "... finished"
226
+ @logger.info "... finished loading default values from puppet modules."
226
227
 
227
228
  load_yaml_from_output(stdout.split($/))
228
229
  end
@@ -19,7 +19,9 @@ module Kafo
19
19
  end
20
20
 
21
21
  def typecast(value)
22
- value =~ /\d+/ ? value.to_i : value
22
+ Integer(value)
23
+ rescue TypeError, ArgumentError
24
+ value
23
25
  end
24
26
 
25
27
  def valid?(input, errors = [])
@@ -2,7 +2,9 @@ module Kafo
2
2
  module DataTypes
3
3
  class Numeric < DataType
4
4
  def typecast(value)
5
- value =~ /\d+/ ? value.to_f : value
5
+ Float(value)
6
+ rescue TypeError, ArgumentError
7
+ value
6
8
  end
7
9
 
8
10
  def valid?(input, errors = [])
@@ -8,7 +8,4 @@ module Kafo
8
8
 
9
9
  class ParserError < StandardError
10
10
  end
11
-
12
- class TypeError < StandardError
13
- end
14
11
  end
data/lib/kafo/hooking.rb CHANGED
@@ -47,13 +47,19 @@ module Kafo
47
47
 
48
48
  def execute(group, log_stage: true)
49
49
  logger = Logger.new(group)
50
- logger.notice "Executing hooks in group #{group}" if log_stage
51
- self.hooks[group].keys.sort_by(&:to_s).each do |name|
50
+ logger.info "Executing hooks in group #{group}" if log_stage
51
+
52
+ sorted_hooks = self.hooks[group].keys.sort do |a, b|
53
+ File.basename(a.to_s) <=> File.basename(b.to_s)
54
+ end
55
+
56
+ sorted_hooks.each do |name|
52
57
  hook = self.hooks[group][name]
53
58
  result = HookContext.execute(self.kafo, logger, &hook)
54
59
  logger.debug "Hook #{name} returned #{result.inspect}"
55
60
  end
56
- logger.notice "All hooks in group #{group} finished" if log_stage
61
+
62
+ logger.info "All hooks in group #{group} finished" if log_stage
57
63
  @group = nil
58
64
  end
59
65
 
@@ -143,7 +143,14 @@ module Kafo
143
143
  # so we limit parsing only to app config options (because of --help and later defined params)
144
144
  parse clamp_app_arguments
145
145
  parse_app_arguments # set values from ARGS to config.app
146
- Logging.setup(verbose: config.app[:verbose])
146
+
147
+ if ARGV.any? { |option| ['--help', '--full-help'].include? option }
148
+ Logging.setup_verbose(level: :error)
149
+ else
150
+ Logging.setup(verbose: config.app[:verbose])
151
+ end
152
+
153
+ logger.notice("Loading installer configuration. This will take some time.")
147
154
  self.class.set_color_scheme
148
155
 
149
156
  self.class.hooking.execute(:init)
@@ -166,6 +173,10 @@ module Kafo
166
173
  def run(*args)
167
174
  started_at = Time.now
168
175
  logger.debug("Running installer with args #{args.inspect}")
176
+ if config.app[:verbose]
177
+ logger.notice("Running installer with log based terminal output at level #{config.app[:verbose_log_level].upcase}.")
178
+ logger.notice("Use -l to set the terminal output log level to ERROR, WARN, NOTICE, INFO, or DEBUG. See --full-help for definitions.")
179
+ end
169
180
  super
170
181
  ensure
171
182
  logger.debug("Installer finished in #{Time.now - started_at} seconds")
@@ -311,6 +322,25 @@ module Kafo
311
322
  self.class.app_option(*args, &block)
312
323
  end
313
324
 
325
+ def terminal_log_levels_message
326
+ if ARGV.include?('--full-help')
327
+ <<~HEREDOC.chomp
328
+ Log level for log based terminal output.
329
+ The available levels are
330
+ ERROR - Only show errors which prevented the installer from completing successfully.
331
+ WARN - Deprecation warnings and other information users may want to be aware of.
332
+ NOTICE - High level information about installer execution and progress.
333
+ INFO - More detailed information about execution and progress. Also shows when the installer makes a change to system configuration.
334
+ DEBUG - Show all information about execution, including configuration items where no change was needed.
335
+ HEREDOC
336
+ else
337
+ <<~HEREDOC.chomp
338
+ Log level for log based terminal output.
339
+ The available levels are ERROR, WARN, NOTICE, INFO, DEBUG. See --full-help for definitions.
340
+ HEREDOC
341
+ end
342
+ end
343
+
314
344
  def set_app_options
315
345
  app_option ['--[no-]colors'], :flag, 'Use color output on STDOUT',
316
346
  :default => config.app[:colors], :advanced => true
@@ -333,7 +363,7 @@ module Kafo
333
363
  :default => false, :advanced => true
334
364
  app_option ['-v', '--[no-]verbose'], :flag, 'Display log on STDOUT instead of progressbar',
335
365
  :default => config.app[:verbose]
336
- app_option ['-l', '--verbose-log-level'], 'LEVEL', 'Log level for verbose mode output',
366
+ app_option ['-l', '--verbose-log-level'], 'LEVEL', terminal_log_levels_message,
337
367
  :default => 'notice'
338
368
  app_option ['-S', '--scenario'], 'SCENARIO', 'Use installation scenario'
339
369
  app_option ['--disable-scenario'], 'SCENARIO', 'Disable installation scenario',
@@ -365,9 +395,9 @@ module Kafo
365
395
  params.sort.each do |param|
366
396
  doc = param.doc.nil? ? 'UNDOCUMENTED' : param.doc.join("\n")
367
397
  app_option parametrize(param), '', doc + " (current: #{param.value_to_s})",
368
- :multivalued => param.multivalued?
398
+ :multivalued => param.multivalued?
369
399
  app_option parametrize(param, 'reset-'), :flag,
370
- "Reset #{param.name} to the default value (#{param.default_to_s})"
400
+ "Reset #{param.name} to the default value (#{param.default_to_s})"
371
401
  end
372
402
  end
373
403
 
@@ -440,7 +470,7 @@ module Kafo
440
470
  end
441
471
 
442
472
  def validate_all(logging = true)
443
- logger.notice 'Running validation checks'
473
+ logger.info "Running validation checks."
444
474
  results = enabled_params.map do |param|
445
475
  result = param.valid?
446
476
  errors = param.validation_errors.join(', ')
@@ -477,13 +507,7 @@ module Kafo
477
507
  log_parser = PuppetLogParser.new
478
508
  logger = Logger.new('configure')
479
509
 
480
- start_message = <<-HEREDOC
481
- Starting system configuration.
482
- The total number of configuration tasks may increase during the run.
483
- Observe logs or specify --verbose-log-level to see individual configuration tasks.
484
- HEREDOC
485
-
486
- logger.notice(start_message.chomp)
510
+ logger.notice("Starting system configuration.")
487
511
 
488
512
  PTY.spawn(*PuppetCommand.format_command(command)) do |stdin, stdout, pid|
489
513
  begin
@@ -492,9 +516,9 @@ HEREDOC
492
516
  method, message = log_parser.parse(line)
493
517
  progress_log(method, message, logger)
494
518
 
495
- if (output = line.match(%r{(.+\]): Starting to evaluate the resource( \((?<count>\d+) of (?<total>\d+)\))?}))
496
- if (output[:count].to_i % 100) == 1 && output[:count].to_i != 1
497
- logger.notice("#{output[:count].to_i - 1} out of #{output[:total]} done.")
519
+ if (output = line.match(/(.+\]): Starting to evaluate the resource( \((?<count>\d+) of (?<total>\d+)\))?/))
520
+ if (output[:count].to_i % 250) == 1 && output[:count].to_i != 1
521
+ logger.notice("#{output[:count].to_i - 1} configuration steps out of #{output[:total]} steps complete.")
498
522
  end
499
523
  end
500
524
 
data/lib/kafo/param.rb CHANGED
@@ -123,12 +123,12 @@ module Kafo
123
123
  @type.multivalued?
124
124
  end
125
125
 
126
- def <=> o
126
+ def <=>(other)
127
127
  unless @module.configuration.app[:no_prefix]
128
- r = self.module_name <=> o.module_name
128
+ r = self.module_name <=> other.module_name
129
129
  return r unless r == 0
130
130
  end
131
- self.name <=> o.name
131
+ self.name <=> other.name
132
132
  end
133
133
 
134
134
  def visible?(context = [])
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ require 'highline'
2
3
  require 'powerbar'
3
4
  require 'ansi/code'
4
5
  require 'set'
@@ -20,7 +21,7 @@ module Kafo
20
21
  @all_lines = 0
21
22
  @total = :unknown
22
23
  @resources = Set.new
23
- @term_width = HighLine::SystemExtensions.terminal_size[0] || 0
24
+ @term_width = terminal_width
24
25
  @bar = PowerBar.new
25
26
  @bar.settings.tty.infinite.template.main = infinite_template
26
27
  @bar.settings.tty.finite.template.main = finite_template
@@ -85,6 +86,17 @@ module Kafo
85
86
 
86
87
  private
87
88
 
89
+ def terminal_width
90
+ # HighLine 2 has Terminal, 1 has SystemExtensions
91
+ terminal_size = if HighLine.respond_to?(:default_instance)
92
+ HighLine.default_instance.terminal.terminal_size
93
+ else
94
+ HighLine::SystemExtensions.terminal_size
95
+ end
96
+
97
+ terminal_size ? (terminal_size[0] || 0) : 0
98
+ end
99
+
88
100
  def done_message
89
101
  text = 'Done'
90
102
  text + (' ' * (50 - text.length))
@@ -43,8 +43,15 @@ module Kafo
43
43
  File.join([bin_path, bin_name].compact)
44
44
  end
45
45
 
46
+ def self.is_aio_puppet?
47
+ puppet_command = search_puppet_path('puppet')
48
+ File.realpath(puppet_command).start_with?('/opt/puppetlabs')
49
+ rescue Errno::ENOENT
50
+ false
51
+ end
52
+
46
53
  def self.format_command(command)
47
- if search_puppet_path('puppet').start_with?('/opt/puppetlabs')
54
+ if is_aio_puppet?
48
55
  [clean_env_vars, command, :unsetenv_others => true]
49
56
  else
50
57
  [::ENV, command, :unsetenv_others => false]
@@ -96,16 +96,16 @@ module Kafo
96
96
  Hash[params.map { |param| [param.name, param.value] }]
97
97
  end
98
98
 
99
- def <=> o
99
+ def <=>(other)
100
100
  @configuration.app[:low_priority_modules].each do |module_name|
101
- return 1 if self.name.include?(module_name) && !o.name.include?(module_name)
102
- return -1 if !self.name.include?(module_name) && o.name.include?(module_name)
103
- if self.name.include?(module_name) && o.name.include?(module_name)
104
- return self.name.sub(/.*#{module_name}/, '') <=> o.name.sub(/.*#{module_name}/, '')
101
+ return 1 if self.name.include?(module_name) && !other.name.include?(module_name)
102
+ return -1 if !self.name.include?(module_name) && other.name.include?(module_name)
103
+ if self.name.include?(module_name) && other.name.include?(module_name)
104
+ return self.name.sub(/.*#{module_name}/, '') <=> other.name.sub(/.*#{module_name}/, '')
105
105
  end
106
106
  end
107
107
 
108
- self.name <=> o.name
108
+ self.name <=> other.name
109
109
  end
110
110
 
111
111
  private
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ require 'highline/import'
2
3
  require 'kafo_wizards'
3
4
  require 'pathname'
4
5
 
@@ -6,7 +7,7 @@ module Kafo
6
7
  class ScenarioManager
7
8
  attr_reader :config_dir, :last_scenario_link, :previous_scenario
8
9
 
9
- def initialize(config, last_scenario_link_name='last_scenario.yaml')
10
+ def initialize(config, last_scenario_link_name = 'last_scenario.yaml')
10
11
  @logger = Logger.new('scenario_manager')
11
12
  @config_dir = File.file?(config) ? File.dirname(config) : config
12
13
  @last_scenario_link = File.join(config_dir, last_scenario_link_name)
@@ -31,7 +32,7 @@ module Kafo
31
32
  end
32
33
 
33
34
  def list_available_scenarios
34
- say ::HighLine.color("Available scenarios", :notice)
35
+ say ::HighLine.color("Available scenarios", :info)
35
36
  available_scenarios.each do |config_file, content|
36
37
  scenario = File.basename(config_file, '.yaml')
37
38
  use = (File.expand_path(config_file) == @previous_scenario ? 'INSTALLED' : "use: --scenario #{scenario}")
@@ -77,7 +78,7 @@ module Kafo
77
78
  !!(defined?(CONFIG_DIR) && CONFIG_DIR)
78
79
  end
79
80
 
80
- def scenario_from_args(arg_name='--scenario|-S')
81
+ def scenario_from_args(arg_name = '--scenario|-S')
81
82
  # try scenario provided in the args via -S or --scenario
82
83
  ARGV.each_with_index do |arg, index|
83
84
  parsed = arg.match(/^(#{arg_name})($|=(?<scenario>\S+))/)
@@ -111,7 +112,7 @@ module Kafo
111
112
  end
112
113
 
113
114
  def show_scenario_diff(prev_scenario, new_scenario)
114
- say ::HighLine.color("Scenarios are being compared, that may take a while...", :notice)
115
+ say ::HighLine.color("Scenarios are being compared, that may take a while...", :info)
115
116
  prev_conf = load_and_setup_configuration(prev_scenario)
116
117
  new_conf = load_and_setup_configuration(new_scenario)
117
118
  print_scenario_diff(prev_conf, new_conf)
@@ -0,0 +1,92 @@
1
+ module Kafo
2
+ # A class containing constants for all scenario options
3
+ class ScenarioOption
4
+ # @group Basic
5
+
6
+ # Human readable scenario name
7
+ NAME = :name
8
+
9
+ # Description of the installer scenario and its purpose
10
+ DESCRIPTION = :description
11
+
12
+ # Path to answer file, if the file does not exist a $pwd/config/answers.yaml is used as a fallback
13
+ ANSWER_FILE = :answer_file
14
+
15
+ # Enable colors? If you don't touch this, we'll autodetect terminal capabilities
16
+ COLORS = :colors
17
+ # Color scheme, we support :bright and :dark (first is better for white background, dark for black background)
18
+ COLOR_OF_BACKGROUND = :color_of_background
19
+
20
+ # @group Logging
21
+
22
+ # Destination for the log files
23
+ LOG_DIR = :log_dir
24
+ LOG_NAME = :log_name
25
+ LOG_LEVEL = :log_level
26
+ LOG_OWNER = :log_owner
27
+ LOG_GROUP = :log_group
28
+
29
+ # Whether verbose logging is enabled
30
+ VERBOSE = :verbose
31
+
32
+ # When verbose logging is enabled, which level (and up) is shown.
33
+ VERBOSE_LOG_LEVEL = :verbose_log_level
34
+
35
+ # @group State
36
+
37
+ # Custom storage is handy if you use hooks and you must store some
38
+ # configuration which should persist among installer runs. It can be also
39
+ # used for passing value from one hook to another.
40
+ CUSTOM = :custom
41
+
42
+ FACTS = :facts
43
+
44
+ # @group Advanced
45
+
46
+ # Checks, implemented as executable files, are loaded from the listed
47
+ # directories.
48
+ CHECK_DIRS = :check_dirs
49
+
50
+ # Hooks in these extra directories will be loaded, by default they are
51
+ # loaded from $installer_dir/hooks/$type when you specify your directory,
52
+ # it will be search for $yourdir/$type/*.rb
53
+ HOOK_DIRS = :hook_dirs
54
+
55
+ # Option to load puppet modules from a specific path. Optional and
56
+ # $pwd/modules is used by default, multiple dirs are allowed
57
+ MODULE_DIRS = :module_dirs
58
+
59
+ # Kafo has a cache for information parsed from Puppet modules. This
60
+ # determines the location where that information is stored.
61
+ PARSER_CACHE_PATH = :parser_cache_path
62
+
63
+ # By default all module parameters must be documented or an error is
64
+ # raised. This can be used to not raise an error when undocumented
65
+ # parameters are found.
66
+ IGNORE_UNDOCUMENTED = :ignore_undocumented
67
+
68
+ # Kafo tuning, customization of core functionality
69
+
70
+ # An optional mapping of classes
71
+ MAPPING = :mapping
72
+ NO_PREFIX = :no_prefix
73
+ ORDER = :order
74
+ LOW_PRIORITY_MODULES = :low_priority_modules
75
+ HIERA_CONFIG = :hiera_config
76
+ KAFO_MODULES_DIR = :kafo_modules_dir
77
+ CONFIG_HEADER_FILE = :config_header_file
78
+ DONT_SAVE_ANSWERS = :dont_save_answers
79
+
80
+ # These options are in DEFAULT but not in kafo.yaml.example
81
+
82
+ # Whether the scenario is enabled or not
83
+ ENABLED = :enabled
84
+ STORE_DIR = :store_dir
85
+ INSTALLER_DIR = :installer_dir
86
+
87
+ # Puppet modules declare the Puppet version they're compatible with. Kafo
88
+ # implements checks to verify this is correct with the Puppet version
89
+ # that's running. This can be used to bypass the checks
90
+ SKIP_PUPPET_VERSION_CHECK = :skip_puppet_version_check
91
+ end
92
+ end
data/lib/kafo/store.rb CHANGED
@@ -4,7 +4,7 @@ module Kafo
4
4
  class Store
5
5
  attr_accessor :data
6
6
 
7
- def initialize(path=nil)
7
+ def initialize(path = nil)
8
8
  @data = {}
9
9
  load_path(path) if path
10
10
  end
@@ -18,7 +18,7 @@ module Kafo
18
18
  "#{prefix}#{d(param.name)}"
19
19
  end
20
20
 
21
- def parametrize(param, prefix='')
21
+ def parametrize(param, prefix = '')
22
22
  "--#{prefix}#{with_prefix(param)}"
23
23
  end
24
24
  end
data/lib/kafo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
  module Kafo
3
3
  PARSER_CACHE_VERSION = 1
4
- VERSION = "6.1.0"
4
+ VERSION = "6.3.0"
5
5
  end
data/lib/kafo/wizard.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
- require 'highline/import'
2
+ require 'forwardable'
3
+ require 'highline'
3
4
  require 'yaml'
4
5
 
5
6
  module Kafo
@@ -8,14 +9,17 @@ module Kafo
8
9
  Kafo::ENV::LANG =~ /UTF-8\z/
9
10
  end
10
11
 
12
+ extend Forwardable
13
+ def_delegators :@highline, :agree, :ask, :choose, :say
14
+
11
15
  OK = utf_support? ? '✓' : 'y'
12
16
  NO = utf_support? ? '✗' : 'n'
13
17
 
14
- def initialize(kafo)
18
+ def initialize(kafo, input = $stdin, output = $stdout)
15
19
  @kafo = kafo
16
20
  @config = kafo.config
17
21
  @name = @config.app[:name] || 'Kafo'
18
- setup_terminal
22
+ @highline = setup_terminal(input, output)
19
23
  end
20
24
 
21
25
  def run
@@ -68,7 +72,7 @@ END
68
72
 
69
73
  def display_hash
70
74
  data = Hash[@config.modules.map { |mod| [mod.name, mod.enabled? ? mod.params_hash : false] }]
71
- say HighLine.color(YAML.dump(data), :notice)
75
+ say HighLine.color(YAML.dump(data), :info)
72
76
  end
73
77
 
74
78
  def configure_module(mod)
@@ -79,7 +83,7 @@ END
79
83
  menu.prompt = 'Choose an option from the menu... '
80
84
  menu.select_by = :index
81
85
 
82
- menu.choice("Enable/disable #{mod.name} module, current value: #{HighLine.color(mod.enabled?.to_s, :notice)}") { turn_module(mod) }
86
+ menu.choice("Enable/disable #{mod.name} module, current value: #{HighLine.color(mod.enabled?.to_s, :info)}") { turn_module(mod) }
83
87
  if mod.enabled?
84
88
  render_params(mod.primary_parameter_group.params, menu)
85
89
 
@@ -114,7 +118,7 @@ END
114
118
  def render_params(params, menu)
115
119
  params.each do |param|
116
120
  if param.visible?(@kafo.params)
117
- menu.choice "Set #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :notice)}" do
121
+ menu.choice "Set #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :info)}" do
118
122
  configure(param)
119
123
  end
120
124
  end
@@ -141,13 +145,13 @@ END
141
145
  end
142
146
 
143
147
  def configure_single(param)
144
- say "\ncurrent value: #{HighLine.color(param.value_to_s, :notice)}"
148
+ say "\ncurrent value: #{HighLine.color(param.value_to_s, :info)}"
145
149
  ask("new value:")
146
150
  end
147
151
 
148
152
  def configure_multi(param)
149
- say HighLine.color('every line is a separate value, blank line to quit, for hash use key:value syntax', :notice)
150
- say "\ncurrent value: #{HighLine.color(param.value_to_s, :notice)} %>"
153
+ say HighLine.color('every line is a separate value, blank line to quit, for hash use key:value syntax', :info)
154
+ say "\ncurrent value: #{HighLine.color(param.value_to_s, :info)} %>"
151
155
  ask("new value:") do |q|
152
156
  q.gather = ""
153
157
  end
@@ -164,7 +168,7 @@ END
164
168
  say "\n" + HighLine.color("Resetting parameters of module #{mod.name}", :headline)
165
169
  choose do |menu|
166
170
  mod.params.each do |param|
167
- menu.choice "Reset #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :notice)}, default value: #{HighLine.color(param.default_to_s, :notice)}" do
171
+ menu.choice "Reset #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :info)}, default value: #{HighLine.color(param.default_to_s, :info)}" do
168
172
  reset(param)
169
173
  end if param.visible?(@kafo.params)
170
174
  end
@@ -178,11 +182,17 @@ END
178
182
  say "\n" + HighLine.color("Value for #{param.name} reset to default", :important)
179
183
  end
180
184
 
181
- def setup_terminal
182
- $terminal = HighLine.new
183
- data = HighLine::SystemExtensions.terminal_size
184
- $terminal.wrap_at = data.first > 80 ? 80 : data.first if data.first
185
- $terminal.page_at = data.last if data.last
185
+ def setup_terminal(input, output)
186
+ highline = HighLine.new(input, output)
187
+ # HighLine 2 vs 1
188
+ data = if highline.respond_to?(:terminal)
189
+ highline.terminal.terminal_size
190
+ else
191
+ HighLine::SystemExtensions.terminal_size
192
+ end
193
+ highline.wrap_at = data.first > 80 ? 80 : data.first if data.first
194
+ highline.page_at = data.last if data.last
195
+ highline
186
196
  end
187
197
  end
188
198
  end
@@ -9,7 +9,7 @@
9
9
  "requirements": [
10
10
  {
11
11
  "name": "puppet",
12
- "version_requirement": ">= 4.5.0 < 7.0.0"
12
+ "version_requirement": ">= 4.5.0 < 8.0.0"
13
13
  }
14
14
  ]
15
15
  }
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: 6.1.0
4
+ version: 6.3.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: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -171,7 +171,7 @@ dependencies:
171
171
  version: 1.6.21
172
172
  - - "<"
173
173
  - !ruby/object:Gem::Version
174
- version: '2.0'
174
+ version: '3.0'
175
175
  type: :runtime
176
176
  prerelease: false
177
177
  version_requirements: !ruby/object:Gem::Requirement
@@ -181,7 +181,7 @@ dependencies:
181
181
  version: 1.6.21
182
182
  - - "<"
183
183
  - !ruby/object:Gem::Version
184
- version: '2.0'
184
+ version: '3.0'
185
185
  - !ruby/object:Gem::Dependency
186
186
  name: powerbar
187
187
  requirement: !ruby/object:Gem::Requirement
@@ -217,7 +217,6 @@ files:
217
217
  - config/kafo.yaml.example
218
218
  - doc/kafo_run.png
219
219
  - doc/kafo_run.uml
220
- - doc/plantuml.jar
221
220
  - lib/kafo.rb
222
221
  - lib/kafo/app_option/declaration.rb
223
222
  - lib/kafo/app_option/definition.rb
@@ -276,6 +275,7 @@ files:
276
275
  - lib/kafo/puppet_log_parser.rb
277
276
  - lib/kafo/puppet_module.rb
278
277
  - lib/kafo/scenario_manager.rb
278
+ - lib/kafo/scenario_option.rb
279
279
  - lib/kafo/store.rb
280
280
  - lib/kafo/string_helper.rb
281
281
  - lib/kafo/system_checker.rb
@@ -294,7 +294,6 @@ files:
294
294
  - modules/kafo_configure/spec/classes/init_spec.rb
295
295
  - modules/kafo_configure/spec/fixtures/hiera/hiera.yaml
296
296
  - modules/kafo_configure/spec/fixtures/hiera/test.yaml
297
- - modules/kafo_configure/spec/fixtures/manifests/site.pp
298
297
  - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/init.pp
299
298
  - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/params.pp
300
299
  - modules/kafo_configure/spec/functions/dump_lookups_spec.rb
data/doc/plantuml.jar DELETED
Binary file