kafo 4.1.0 → 6.1.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.
@@ -0,0 +1,128 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'fileutils'
4
+ require 'logging'
5
+
6
+ module Kafo
7
+ class Logging
8
+
9
+ LOG_LEVELS = [:debug, :info, :notice, :warn, :error, :fatal]
10
+
11
+ if ::Logging::LEVELS.keys.map(&:to_symbol) != LOG_LEVELS
12
+ ::Logging.init(:debug, :info, :notice, :warn, :error, :fatal)
13
+ end
14
+
15
+ class << self
16
+ def root_logger
17
+ @root_logger ||= ::Logging.logger.root
18
+ end
19
+
20
+ def setup(verbose: false)
21
+ set_color_scheme
22
+
23
+ level = KafoConfigure.config.app[:log_level]
24
+
25
+ setup_file_logging(
26
+ level,
27
+ KafoConfigure.config.app[:log_dir],
28
+ KafoConfigure.config.app[:log_owner],
29
+ KafoConfigure.config.app[:log_group]
30
+ )
31
+ setup_verbose(level: KafoConfigure.config.app[:verbose_log_level] || level) if verbose
32
+ end
33
+
34
+ def setup_file_logging(log_level, log_dir, log_owner, log_group)
35
+ filename = KafoConfigure.config.log_file
36
+
37
+ begin
38
+ FileUtils.mkdir_p(log_dir, :mode => 0750)
39
+ rescue Errno::EACCES
40
+ puts "No permissions to create log dir #{log_dir}"
41
+ end
42
+
43
+ begin
44
+ root_logger.appenders = ::Logging.appenders.rolling_file(
45
+ 'configure',
46
+ level: log_level,
47
+ filename: filename,
48
+ layout: layout(color: false),
49
+ truncate: true,
50
+ roll_by: 'date'
51
+ )
52
+
53
+ FileUtils.chown(
54
+ log_owner,
55
+ log_group,
56
+ filename
57
+ )
58
+ rescue ArgumentError
59
+ puts "File #{filename} not writeable, won't log anything to file!"
60
+ end
61
+ end
62
+
63
+ def set_color_scheme
64
+ ::Logging.color_scheme(
65
+ 'bright',
66
+ :levels => {
67
+ :info => :cyan,
68
+ :notice => :green,
69
+ :warn => :yellow,
70
+ :error => :red,
71
+ :fatal => [:white, :on_red]
72
+ },
73
+ :date => :blue,
74
+ :logger => :cyan,
75
+ :line => :yellow,
76
+ :file => :yellow,
77
+ :method => :yellow
78
+ )
79
+ end
80
+
81
+ def layout(color: false)
82
+ ::Logging::Layouts::Pattern.new(
83
+ pattern: "%d [%-6l] [%c] %m\n",
84
+ color_scheme: color ? 'bright' : nil,
85
+ date_pattern: '%Y-%m-%d %H:%M:%S'
86
+ )
87
+ end
88
+
89
+ def add_logger(name)
90
+ ::Logging.logger[name]
91
+ end
92
+
93
+ def setup_verbose(level: :notice)
94
+ root_logger.add_appenders(
95
+ ::Logging.appenders.stdout(
96
+ 'verbose',
97
+ layout: layout(color: KafoConfigure.use_colors?),
98
+ level: level
99
+ )
100
+ )
101
+ end
102
+
103
+ def buffer
104
+ @buffer ||= []
105
+ end
106
+
107
+ def buffering?
108
+ root_logger.appenders.empty?
109
+ end
110
+
111
+ def dump_needed?
112
+ !buffer.empty?
113
+ end
114
+
115
+ def to_buffer(*args)
116
+ buffer << args
117
+ end
118
+
119
+ def dump_buffer
120
+ @buffer.each do |log|
121
+ ::Logging.logger[log[0]].send(log[1], *([log[2]].flatten(2)), &log[3])
122
+ end
123
+ @buffer.clear
124
+ end
125
+ end
126
+
127
+ end
128
+ end
@@ -8,18 +8,24 @@ module Kafo
8
8
  method, message = case
9
9
  when line =~ /^Error:(.*)/i || line =~ /^Err:(.*)/i
10
10
  [:error, $1]
11
- when line =~ /^Warning:(.*)/i || line =~ /^Notice:(.*)/i
12
- [:warn, $1]
13
- when line =~ /^Info:(.*)/i
11
+ when line =~ /^Notice:(.*)/i
14
12
  [:info, $1]
15
- when line =~ /^Debug:(.*)/i
13
+ when line =~ /^Warning:(.*)/i || line =~ /^Debug:(.*)/i || line =~ /^Info:(.*)/i
16
14
  [:debug, $1]
17
15
  else
18
16
  [@last_level.nil? ? :info : @last_level, line]
19
17
  end
20
18
 
19
+ if message.include?('Loading facts') && method != :error
20
+ method = :debug
21
+ end
22
+
23
+ if message.include?('Applying configuration version')
24
+ method = :debug
25
+ end
26
+
21
27
  @last_level = method
22
- return [method, message.chomp]
28
+ return [method, message.chomp.strip]
23
29
  end
24
30
  end
25
31
  end
@@ -7,6 +7,7 @@ module Kafo
7
7
  attr_reader :config_dir, :last_scenario_link, :previous_scenario
8
8
 
9
9
  def initialize(config, last_scenario_link_name='last_scenario.yaml')
10
+ @logger = Logger.new('scenario_manager')
10
11
  @config_dir = File.file?(config) ? File.dirname(config) : config
11
12
  @last_scenario_link = File.join(config_dir, last_scenario_link_name)
12
13
  @previous_scenario = File.exist?(last_scenario_link) ? Pathname.new(last_scenario_link).realpath.to_s : nil
@@ -30,7 +31,7 @@ module Kafo
30
31
  end
31
32
 
32
33
  def list_available_scenarios
33
- say ::HighLine.color("Available scenarios", :info)
34
+ say ::HighLine.color("Available scenarios", :notice)
34
35
  available_scenarios.each do |config_file, content|
35
36
  scenario = File.basename(config_file, '.yaml')
36
37
  use = (File.expand_path(config_file) == @previous_scenario ? 'INSTALLED' : "use: --scenario #{scenario}")
@@ -78,12 +79,19 @@ module Kafo
78
79
 
79
80
  def scenario_from_args(arg_name='--scenario|-S')
80
81
  # try scenario provided in the args via -S or --scenario
81
- parsed = ARGV.join(" ").match(/(#{arg_name})(\s+|[=]?)(\S+)/)
82
- if parsed
83
- scenario_file = File.join(config_dir, "#{parsed[3]}.yaml")
84
- return scenario_file if File.exist?(scenario_file)
85
- fail_now("Scenario (#{scenario_file}) was not found, can not continue", :unset_scenario)
82
+ ARGV.each_with_index do |arg, index|
83
+ parsed = arg.match(/^(#{arg_name})($|=(?<scenario>\S+))/)
84
+ if parsed
85
+ scenario = parsed[:scenario] || ARGV[index + 1]
86
+ next unless scenario
87
+
88
+ scenario_file = File.join(config_dir, "#{scenario}.yaml")
89
+ return scenario_file if File.exist?(scenario_file)
90
+ fail_now("Scenario (#{scenario_file}) was not found, can not continue", :unset_scenario)
91
+ end
86
92
  end
93
+
94
+ nil
87
95
  end
88
96
 
89
97
  def select_scenario
@@ -103,7 +111,7 @@ module Kafo
103
111
  end
104
112
 
105
113
  def show_scenario_diff(prev_scenario, new_scenario)
106
- say ::HighLine.color("Scenarios are being compared, that may take a while...", :info)
114
+ say ::HighLine.color("Scenarios are being compared, that may take a while...", :notice)
107
115
  prev_conf = load_and_setup_configuration(prev_scenario)
108
116
  new_conf = load_and_setup_configuration(new_scenario)
109
117
  print_scenario_diff(prev_conf, new_conf)
@@ -116,7 +124,7 @@ module Kafo
116
124
  dump_log_and_exit(0)
117
125
  else
118
126
  confirm_scenario_change(scenario)
119
- KafoConfigure.logger.info "Scenario #{scenario} was selected"
127
+ @logger.notice "Scenario #{scenario} was selected"
120
128
  end
121
129
  end
122
130
  end
@@ -159,7 +167,7 @@ module Kafo
159
167
  elsif !ARGV.include?('--force') && !KafoConfigure.in_help_mode?
160
168
  message = "You are trying to replace existing installation with different scenario. This may lead to unpredictable states. " +
161
169
  "Use --force to override. You can use --compare-scenarios to see the differences"
162
- KafoConfigure.logger.error(message)
170
+ @logger.error(message)
163
171
  dump_log_and_exit(:scenario_error)
164
172
  end
165
173
  true
@@ -218,19 +226,17 @@ module Kafo
218
226
 
219
227
  def fail_now(message, exit_code)
220
228
  $stderr.puts "ERROR: #{message}"
221
- KafoConfigure.logger.error message
229
+ @logger.error message
222
230
  KafoConfigure.exit(exit_code)
223
231
  end
224
232
 
225
233
  def dump_log_and_exit(code)
226
- if Logger.buffering? && Logger.buffer.any?
227
- Logger.setup_verbose
228
- KafoConfigure.verbose = true
234
+ if Logging.buffering? && Logging.buffer.any?
229
235
  if !KafoConfigure.config.nil?
230
- Logger.setup
231
- KafoConfigure.logger.info("Log was be written to #{KafoConfigure.config.log_file}")
236
+ Logging.setup(verbose: true)
237
+ @logger.notice("Log was be written to #{KafoConfigure.config.log_file}")
232
238
  end
233
- KafoConfigure.logger.info('Logs flushed')
239
+ @logger.notice('Logs flushed')
234
240
  end
235
241
  KafoConfigure.exit(code)
236
242
  end
@@ -15,7 +15,7 @@ module Kafo
15
15
  end
16
16
 
17
17
  def logger
18
- Logging::logger['checks']
18
+ ::Logging::logger['checks']
19
19
  end
20
20
 
21
21
  def check
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
  module Kafo
3
3
  PARSER_CACHE_VERSION = 1
4
- VERSION = "4.1.0"
4
+ VERSION = "6.1.0"
5
5
  end
@@ -68,7 +68,7 @@ END
68
68
 
69
69
  def display_hash
70
70
  data = Hash[@config.modules.map { |mod| [mod.name, mod.enabled? ? mod.params_hash : false] }]
71
- say HighLine.color(YAML.dump(data), :info)
71
+ say HighLine.color(YAML.dump(data), :notice)
72
72
  end
73
73
 
74
74
  def configure_module(mod)
@@ -79,7 +79,7 @@ END
79
79
  menu.prompt = 'Choose an option from the menu... '
80
80
  menu.select_by = :index
81
81
 
82
- menu.choice("Enable/disable #{mod.name} module, current value: #{HighLine.color(mod.enabled?.to_s, :info)}") { turn_module(mod) }
82
+ menu.choice("Enable/disable #{mod.name} module, current value: #{HighLine.color(mod.enabled?.to_s, :notice)}") { turn_module(mod) }
83
83
  if mod.enabled?
84
84
  render_params(mod.primary_parameter_group.params, menu)
85
85
 
@@ -114,7 +114,7 @@ END
114
114
  def render_params(params, menu)
115
115
  params.each do |param|
116
116
  if param.visible?(@kafo.params)
117
- menu.choice "Set #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :info)}" do
117
+ menu.choice "Set #{HighLine.color(param.name, :important)}, current value: #{HighLine.color(param.value_to_s, :notice)}" do
118
118
  configure(param)
119
119
  end
120
120
  end
@@ -141,13 +141,13 @@ END
141
141
  end
142
142
 
143
143
  def configure_single(param)
144
- say "\ncurrent value: #{HighLine.color(param.value_to_s, :info)}"
144
+ say "\ncurrent value: #{HighLine.color(param.value_to_s, :notice)}"
145
145
  ask("new value:")
146
146
  end
147
147
 
148
148
  def configure_multi(param)
149
- say HighLine.color('every line is a separate value, blank line to quit, for hash use key:value syntax', :info)
150
- say "\ncurrent value: #{HighLine.color(param.value_to_s, :info)} %>"
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)} %>"
151
151
  ask("new value:") do |q|
152
152
  q.gather = ""
153
153
  end
@@ -164,7 +164,7 @@ END
164
164
  say "\n" + HighLine.color("Resetting parameters of module #{mod.name}", :headline)
165
165
  choose do |menu|
166
166
  mod.params.each do |param|
167
- 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
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
168
168
  reset(param)
169
169
  end if param.visible?(@kafo.params)
170
170
  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: 4.1.0
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marek Hulan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-02 00:00:00.000000000 Z
11
+ date: 2020-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -217,7 +217,10 @@ files:
217
217
  - config/kafo.yaml.example
218
218
  - doc/kafo_run.png
219
219
  - doc/kafo_run.uml
220
+ - doc/plantuml.jar
220
221
  - lib/kafo.rb
222
+ - lib/kafo/app_option/declaration.rb
223
+ - lib/kafo/app_option/definition.rb
221
224
  - lib/kafo/base_context.rb
222
225
  - lib/kafo/color_scheme.rb
223
226
  - lib/kafo/condition.rb
@@ -257,6 +260,7 @@ files:
257
260
  - lib/kafo/hooking.rb
258
261
  - lib/kafo/kafo_configure.rb
259
262
  - lib/kafo/logger.rb
263
+ - lib/kafo/logging.rb
260
264
  - lib/kafo/migration_context.rb
261
265
  - lib/kafo/migrations.rb
262
266
  - lib/kafo/param.rb
@@ -290,6 +294,7 @@ files:
290
294
  - modules/kafo_configure/spec/classes/init_spec.rb
291
295
  - modules/kafo_configure/spec/fixtures/hiera/hiera.yaml
292
296
  - modules/kafo_configure/spec/fixtures/hiera/test.yaml
297
+ - modules/kafo_configure/spec/fixtures/manifests/site.pp
293
298
  - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/init.pp
294
299
  - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/params.pp
295
300
  - modules/kafo_configure/spec/functions/dump_lookups_spec.rb
@@ -300,7 +305,7 @@ homepage: https://github.com/theforeman/kafo
300
305
  licenses:
301
306
  - GPL-3.0+
302
307
  metadata: {}
303
- post_install_message:
308
+ post_install_message:
304
309
  rdoc_options: []
305
310
  require_paths:
306
311
  - lib
@@ -308,15 +313,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
308
313
  requirements:
309
314
  - - ">="
310
315
  - !ruby/object:Gem::Version
311
- version: 2.0.0
316
+ version: 2.4.0
312
317
  required_rubygems_version: !ruby/object:Gem::Requirement
313
318
  requirements:
314
319
  - - ">="
315
320
  - !ruby/object:Gem::Version
316
321
  version: '0'
317
322
  requirements: []
318
- rubygems_version: 3.0.3
319
- signing_key:
323
+ rubygems_version: 3.1.4
324
+ signing_key:
320
325
  specification_version: 4
321
326
  summary: A gem for making installations based on puppet user friendly
322
327
  test_files: []