kafo 3.0.0 → 4.0.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: e35b389c721abe577314b02199940ac88fa9777c9a3daa0d0b1bda886082ea0b
4
- data.tar.gz: f92d08ac63cd96cf98b6b0f6a60b22c97d4cdd66b7e482ab3556b9654659a50b
3
+ metadata.gz: b6a7603ad0e129c240e560c7f758ecbb4cbb13fc54a04913cf4a0beb7aa53f25
4
+ data.tar.gz: 25a7d3a113b3dc90cf566221806b58a167082097fff4de2de9b71dead4b60dca
5
5
  SHA512:
6
- metadata.gz: 26426722b8088cd909266123492b328e686829fe798a4f02cabdd2483fc0e1a1360fcc77b535f86fa7f7e6a176b986779089a409ec37c0d4de93134b0861ee1b
7
- data.tar.gz: d48254980b31a24d331cf3450d19d19bd0d62a529c8daedc9164dae01327ba4ec058b6171536cb632e811cacedd45c178ceafc388488e434a423f3e36d3bacc2
6
+ metadata.gz: 8e7e7845606b1668728291952679461fcab7e1dec9872651a414d450362dc9050abc337884b7908e50ba034b1c65e884002a8e1284744b7e406832a306989d25
7
+ data.tar.gz: e325a88e3c6aae2115126d672615a8d9397b4a28383d01ea6a9ea60e0745a99e193a4d405d7ee604ea1e5e7bcdb1d52d1e2d74378470ddf476976924ff472927
data/README.md CHANGED
@@ -1004,6 +1004,21 @@ The cache will be skipped if the file modification time of the manifest is
1004
1004
  greater than the mtime recorded in the cache. Using `--parser-cache` will force
1005
1005
  the use of an outdated cache, but this should be used with caution.
1006
1006
 
1007
+ ## Facts
1008
+
1009
+ Kafo provides a structured fact describing the state. This fact is only present
1010
+ during the Puppet run. Currently it's the scenario id and name where the id is
1011
+ the same as passed via --scenario by the user and matches the scenario filename
1012
+ with an extension. The name is a human readable version.
1013
+
1014
+ ```yaml
1015
+ ---
1016
+ kafo:
1017
+ scenario:
1018
+ id: foreman_proxy
1019
+ name: Foreman Proxy
1020
+ ```
1021
+
1007
1022
  ## Configuring Hiera
1008
1023
 
1009
1024
  Kafo uses Hiera to include classes and pass parameters to classes using data
@@ -1018,22 +1033,20 @@ The contents of this file are as per the
1018
1033
  [hiera.yaml docs](https://docs.puppet.com/hiera/latest/configuring.html).
1019
1034
  Only Hiera version 5 is supported.
1020
1035
 
1021
- When running Puppet, Kafo will copy the Hiera config to a temporary location.
1022
- Relative data directories will be changed to absolute paths. A
1023
- `kafo_answers.yaml` file will be generated containing _all_ default and
1024
- overriden values for parameters managed by Kafo. This may change in the future
1025
- to allow a more complex hierarchy.
1036
+ An answers file will be generated containing _all_ default and overriden values
1037
+ for parameters managed by Kafo. During the run this is available as a
1038
+ `kafo.scenario.answer_file` fact. This may change in the future to allow a more
1039
+ complex hierarchy.
1026
1040
 
1027
- The hierarchy can contain a special value with the name `Kafo Answers`. The
1028
- exact values will be rewritten by Kafo, but it can be used to determine when
1029
- the Kafo answers are loaded. Note the name is case sensitive. When it's
1030
- missing, it will be added.
1041
+ The hierarchy must contain the path `%{facts.kafo.scenario.answer_file}`. This
1042
+ contains all answers in a temporary location.
1031
1043
 
1032
1044
  As an example, a hierarchy could be set up with:
1033
1045
 
1034
1046
  ```yaml
1035
1047
  hierarchy:
1036
1048
  - name: "Kafo Answers"
1049
+ path: "%{facts.kafo.scenario.answer_file}"
1037
1050
  - name: "Other YAML hierarchy levels"
1038
1051
  paths:
1039
1052
  - "family/%{facts.os.family}.yaml"
@@ -1048,6 +1061,7 @@ hierarchy:
1048
1061
  datadir: "custom"
1049
1062
  path: "override.yaml"
1050
1063
  - name: "Kafo Answers"
1064
+ path: "%{facts.kafo.scenario.answer_file}"
1051
1065
  - name: "Other YAML hierarchy levels"
1052
1066
  datadir: "data"
1053
1067
  paths:
@@ -1058,6 +1072,17 @@ hierarchy:
1058
1072
  This would give precedence to all Kafo-managed parameter values, but for any
1059
1073
  others, would check for values per OS family, followed by a `common.yaml` file.
1060
1074
 
1075
+ The scenario id is also available as a fact which can be used to provide
1076
+ scenario specific overrides for unmanaged modules.
1077
+
1078
+ ```yaml
1079
+ hierarchy:
1080
+ - name: "Kafo Answers"
1081
+ path: "%{facts.kafo.scenario.answer_file}"
1082
+ - name: "Scenario defaults"
1083
+ path: "scenario/%{facts.kafo.scenario.id}.yaml"
1084
+ ```
1085
+
1061
1086
  [Migration from Hiera version 3](https://puppet.com/docs/puppet/4.9/hiera_migrate_v3_yaml.html)
1062
1087
  is documented by Puppet.
1063
1088
 
data/Rakefile CHANGED
@@ -2,6 +2,12 @@ require 'rake/testtask'
2
2
  require "bundler/gem_tasks"
3
3
  load 'tasks/jenkins.rake'
4
4
 
5
+ Rake::TestTask.new('test:ruby') do |t|
6
+ t.libs << 'lib' << 'test'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ t.verbose = true
9
+ end
10
+
5
11
  Rake::TestTask.new('test:unit') do |t|
6
12
  t.libs << 'lib' << 'test'
7
13
  t.test_files = FileList['test/kafo/**/*_test.rb']
@@ -27,4 +33,4 @@ end
27
33
 
28
34
  CLEAN.include 'test/tmp'
29
35
 
30
- task :test => ['test:unit', 'test:acceptance', 'test:puppet_modules']
36
+ task :test => ['test:ruby', 'test:puppet_modules']
Binary file
@@ -68,7 +68,7 @@
68
68
  #Greenyellow:**pre_values**|
69
69
  :load values from answer file;
70
70
  :load values from previous answer file;
71
- note right: if previous scenraio != current scenario
71
+ note right: if previous scenario != current scenario
72
72
 
73
73
  :update help with default values;
74
74
  |execute|
@@ -94,7 +94,7 @@
94
94
 
95
95
  #Greenyellow:**pre**|
96
96
 
97
- :setup HieraConfigurer and save configs;
97
+ :setup ExecutionEnvironment and save configs;
98
98
 
99
99
  #Gold:run puppet;
100
100
  repeat
@@ -4,11 +4,11 @@ require 'tmpdir'
4
4
  require 'kafo/puppet_module'
5
5
  require 'kafo/color_scheme'
6
6
  require 'kafo/data_type_parser'
7
- require 'kafo/puppet_configurer'
7
+ require 'kafo/execution_environment'
8
8
 
9
9
  module Kafo
10
10
  class Configuration
11
- attr_reader :config_file, :answer_file
11
+ attr_reader :config_file, :answer_file, :scenario_id
12
12
 
13
13
  DEFAULT = {
14
14
  :name => '',
@@ -27,11 +27,16 @@ module Kafo
27
27
  :color_of_background => :dark,
28
28
  :hook_dirs => [],
29
29
  :custom => {},
30
+ :facts => {},
30
31
  :low_priority_modules => [],
31
32
  :verbose_log_level => 'info',
32
33
  :skip_puppet_version_check => false
33
34
  }
34
35
 
36
+ def self.get_scenario_id(filename)
37
+ File.basename(filename, '.yaml')
38
+ end
39
+
35
40
  def initialize(file, persist = true)
36
41
  @config_file = file
37
42
  @persist = persist
@@ -47,6 +52,7 @@ module Kafo
47
52
  end
48
53
 
49
54
  @config_dir = File.dirname(@config_file)
55
+ @scenario_id = Configuration.get_scenario_id(@config_file)
50
56
  end
51
57
 
52
58
  def save_configuration(configuration)
@@ -90,6 +96,14 @@ module Kafo
90
96
  custom_storage[key.to_sym] = value
91
97
  end
92
98
 
99
+ def get_custom_fact(key)
100
+ custom_fact_storage[key.to_s]
101
+ end
102
+
103
+ def set_custom_fact(key, value)
104
+ custom_fact_storage[key.to_s] = value
105
+ end
106
+
93
107
  def modules
94
108
  @modules ||= begin
95
109
  register_data_types
@@ -148,8 +162,10 @@ module Kafo
148
162
 
149
163
  def params_default_values
150
164
  @params_default_values ||= begin
151
- puppetconf = PuppetConfigurer.new('noop' => true)
152
- KafoConfigure.exit_handler.register_cleanup_path puppetconf.config_path
165
+ execution_env = ExecutionEnvironment.new(self)
166
+ KafoConfigure.exit_handler.register_cleanup_path(execution_env.directory)
167
+
168
+ puppetconf = execution_env.configure_puppet('noop' => true)
153
169
 
154
170
  dump_manifest = <<EOS
155
171
  #{includes}
@@ -305,6 +321,10 @@ EOS
305
321
  app[:custom]
306
322
  end
307
323
 
324
+ def custom_fact_storage
325
+ app[:facts]
326
+ end
327
+
308
328
  def includes
309
329
  modules.map do |mod|
310
330
  module_dir = module_dirs.find do |dir|
@@ -0,0 +1,84 @@
1
+ require 'tmpdir'
2
+
3
+ require 'kafo/fact_writer'
4
+ require 'kafo/hiera_configurer'
5
+ require 'kafo/puppet_configurer'
6
+
7
+ module Kafo
8
+ class ExecutionEnvironment
9
+ def initialize(config, logger = KafoConfigure.logger)
10
+ @config = config
11
+ @logger = logger
12
+ end
13
+
14
+ def directory
15
+ @directory ||= begin
16
+ directory = Dir.mktmpdir('kafo_installation')
17
+ @logger.debug("Creating execution environment in #{directory}")
18
+ directory
19
+ end
20
+ end
21
+
22
+ def store_answers
23
+ answer_data = HieraConfigurer.generate_data(@config.modules, @config.app[:order])
24
+ @logger.debug("Writing temporary answers to #{answer_file}")
25
+ File.open(answer_file, 'w') { |f| f.write(YAML.dump(answer_data)) }
26
+ end
27
+
28
+ def configure_puppet(settings = {})
29
+ @logger.debug("Configuring Puppet in #{directory}")
30
+
31
+ @logger.debug("Writing facts to #{factpath}")
32
+ FactWriter.write_facts(facts, factpath)
33
+
34
+ hiera_config = configure_hiera
35
+
36
+ settings = {
37
+ 'environmentpath' => environmentpath,
38
+ 'factpath' => factpath,
39
+ 'hiera_config' => hiera_config,
40
+ }.merge(settings)
41
+
42
+ PuppetConfigurer.new(puppet_conf, settings)
43
+ end
44
+
45
+ private
46
+
47
+ def environmentpath
48
+ File.join(directory, 'environments')
49
+ end
50
+
51
+ def factpath
52
+ File.join(directory, 'facts')
53
+ end
54
+
55
+ def answer_file
56
+ File.join(directory, 'answers.yaml')
57
+ end
58
+
59
+ def puppet_conf
60
+ File.join(directory, 'puppet.conf')
61
+ end
62
+
63
+ def configure_hiera
64
+ if @config.app[:hiera_config]
65
+ File.realpath(@config.app[:hiera_config])
66
+ else
67
+ config_path = File.join(directory, 'hiera.yaml')
68
+ @logger.debug("Writing default hiera config to #{config_path}")
69
+ HieraConfigurer.write_default_config(config_path)
70
+ end
71
+ end
72
+
73
+ def facts
74
+ {
75
+ 'scenario' => {
76
+ 'id' => @config.scenario_id,
77
+ 'name' => @config.app[:name],
78
+ 'answer_file' => answer_file,
79
+ 'custom' => @config.app[:facts],
80
+ },
81
+ }
82
+ end
83
+ end
84
+ end
@@ -1,11 +1,10 @@
1
1
  module Kafo
2
2
  class ExitHandler
3
- attr_accessor :cleanup_paths, :exit_code, :logger
3
+ attr_accessor :cleanup_paths, :exit_code
4
4
 
5
5
  def initialize
6
6
  @cleanup_paths = []
7
7
  @exit_code = 0
8
- @logger = KafoConfigure.logger
9
8
  end
10
9
 
11
10
  def error_codes
@@ -27,8 +26,8 @@ module Kafo
27
26
  def exit(code, &block)
28
27
  @exit_code = translate_exit_code(code)
29
28
  block.call if block
30
- KafoConfigure.logger.debug "Exit with status code: #{@exit_code} (signal was #{code})"
31
- KafoConfigure.logger.dump_errors unless KafoConfigure.verbose
29
+ logger.debug "Exit with status code: #{@exit_code} (signal was #{code})"
30
+ logger.dump_errors unless KafoConfigure.verbose
32
31
  cleanup
33
32
  Kernel.exit(@exit_code)
34
33
  end
@@ -54,5 +53,11 @@ module Kafo
54
53
  self.cleanup_paths<< path
55
54
  end
56
55
 
56
+ private
57
+
58
+ def logger
59
+ @logger ||= KafoConfigure.logger
60
+ end
61
+
57
62
  end
58
63
  end
@@ -0,0 +1,24 @@
1
+ module Kafo
2
+ class FactWriter
3
+ DATA_FILENAME = 'kafo.yaml'
4
+ WRAPPER_FILENAME = 'kafo.rb'
5
+
6
+ def self.write_facts(facts, directory)
7
+ Dir.mkdir(directory)
8
+
9
+ # Write a data file containing all the facts encoded as YAML
10
+ File.open(File.join(directory, DATA_FILENAME), 'w') { |f| f.write(YAML.dump(facts)) }
11
+
12
+ # Write a Ruby wrapper since only those are executed within puppet
13
+ File.open(File.join(directory, 'kafo.rb'), 'w') { |f| f.write(wrapper) }
14
+ end
15
+
16
+ def self.wrapper
17
+ # Ruby 2.0 doesn't have <<~ heredocs
18
+ <<-WRAPPER
19
+ require 'yaml'
20
+ Facter.add(:kafo) { setcode { YAML.load_file(File.join(__dir__, '#{DATA_FILENAME}')) } }
21
+ WRAPPER
22
+ end
23
+ end
24
+ end
@@ -1,111 +1,37 @@
1
- require 'fileutils'
2
- require 'tmpdir'
3
-
4
1
  module Kafo
5
2
  class HieraConfigurer
6
- HIERARCHY_NAME = 'Kafo Answers'
7
- HIERARCHY_FILENAME = 'kafo_answers.yaml'
8
-
9
- attr_reader :temp_dir, :config_path, :data_dir, :logger
10
-
11
- def initialize(user_config_path, modules, modules_order)
12
- @user_config_path = user_config_path
13
- @modules = modules
14
- @modules_order = modules_order
15
- @logger = KafoConfigure.logger
3
+ def self.default_config
4
+ {
5
+ 'version' => 5,
6
+ 'hierarchy' => [
7
+ {
8
+ 'name' => 'Kafo Answers',
9
+ 'path' => '%{facts.kafo.scenario.answer_file}',
10
+ 'data_hash' => 'yaml_data',
11
+ },
12
+ ],
13
+ }
16
14
  end
17
15
 
18
- def write_configs
19
- build_temp_dir
20
-
21
- if @user_config_path
22
- logger.debug("Merging existing Hiera config file from #{@user_config_path}")
23
- user_config = YAML.load(File.read(@user_config_path))
24
- else
25
- user_config = {}
26
- end
27
- logger.debug("Writing Hiera config file to #{config_path}")
28
- File.open(config_path, 'w') do |f|
29
- # merge required config changes into the user's Hiera config
30
- f.write(format_yaml_symbols(generate_config(user_config).to_yaml))
31
- end
32
-
33
- logger.debug("Creating Hiera data files in #{data_dir}")
34
- FileUtils.mkdir(data_dir)
35
-
36
- File.open(File.join(data_dir, HIERARCHY_FILENAME), 'w') do |f|
37
- f.write(format_yaml_symbols(generate_data(@modules).to_yaml))
38
- end
16
+ def self.write_default_config(path)
17
+ File.open(path, 'w') { |f| f.write(YAML.dump(default_config)) }
18
+ path
39
19
  end
40
20
 
41
- def generate_config(config = {})
42
- config ||= {}
43
-
44
- config['version'] = 5
45
-
46
- # ensure there are defaults
47
- config['defaults'] ||= {}
48
- config['defaults']['datadir'] = determine_data_dir_path(config['defaults']['datadir'])
49
- config['defaults']['data_hash'] ||= 'yaml_data'
50
-
51
- # ensure our answers file is present and has the right settings
52
- config['hierarchy'] ||= []
53
-
54
- config['hierarchy'].each do |level|
55
- if level['datadir']
56
- level['datadir'] = determine_data_dir_path(level['datadir'])
57
- end
58
- end
59
-
60
- kafo_answers = config['hierarchy'].find { |level| level['name'] == HIERARCHY_NAME }
61
- if kafo_answers
62
- kafo_answers.clear
63
- else
64
- kafo_answers = {}
65
- config['hierarchy'].unshift(kafo_answers)
66
- end
67
- kafo_answers['name'] = HIERARCHY_NAME
68
- kafo_answers['path'] = HIERARCHY_FILENAME
69
- kafo_answers['datadir'] = data_dir
70
- kafo_answers['data_hash'] = 'yaml_data'
71
-
72
- config
73
- end
74
-
75
- def generate_data(modules)
21
+ def self.generate_data(modules, order = nil)
76
22
  classes = []
77
23
  data = modules.select(&:enabled?).inject({}) do |config, mod|
78
24
  classes << mod.class_name
79
25
  config.update(Hash[mod.params_hash.map { |k, v| ["#{mod.class_name}::#{k}", v] }])
80
26
  end
81
- data['classes'] = @modules_order ? sort_modules(classes, @modules_order) : classes
27
+ data['classes'] = sort_modules(classes, order)
82
28
  data
83
29
  end
84
30
 
85
- def sort_modules(modules, order)
86
- (order & modules) + (modules - order)
87
- end
88
-
89
- def build_temp_dir
90
- @temp_dir ||= Dir.mktmpdir('kafo_hiera')
91
- @config_path = File.join(temp_dir, 'hiera.conf')
92
- @data_dir = File.join(temp_dir, 'data')
93
- end
94
-
95
- private
96
-
97
- def format_yaml_symbols(data)
98
- data.gsub('!ruby/sym ', ':')
99
- end
31
+ def self.sort_modules(modules, order)
32
+ return modules unless order
100
33
 
101
- def determine_data_dir_path(path)
102
- # Relies on data_dir being absolute or having a user config
103
- path ||= data_dir
104
- Pathname.new(path).relative? ? File.join(original_hiera_directory, path) : path
105
- end
106
-
107
- def original_hiera_directory
108
- @user_config_path ? File.dirname(@user_config_path) : nil
34
+ (order & modules) + (modules - order)
109
35
  end
110
36
  end
111
37
  end
@@ -93,14 +93,33 @@ module Kafo
93
93
  self.kafo.config.set_custom(key, value)
94
94
  end
95
95
 
96
+ # Load a custom fact from the custom fact storage as saved by store_custom_fact
97
+ def get_custom_fact(key)
98
+ self.kafo.config.get_custom_fact(key)
99
+ end
100
+
101
+ # Store a any custom fact. This will show up as kafo.scenario.custom.your_fact.
102
+ # It is possible to use structures such as arrays and hashes besides the
103
+ # obvious ones such as strings, integers, booleans.
104
+ #
105
+ # These facts can also be used in Hiera hierachy definitions.
106
+ def store_custom_fact(key, value)
107
+ self.kafo.config.set_custom_fact(key, value)
108
+ end
109
+
110
+ # Return the id of the current scenario
111
+ def scenario_id
112
+ self.kafo.config.scenario_id
113
+ end
114
+
96
115
  # Return the path to the current scenario
97
116
  def scenario_path
98
- self.kafo.class.scenario_manager.select_scenario
117
+ self.kafo.config.config_file
99
118
  end
100
119
 
101
120
  # Return the actual data in the current scenario
102
121
  def scenario_data
103
- YAML.load(File.read(scenario_path))
122
+ self.kafo.config.app
104
123
  end
105
124
  end
106
125
  end
@@ -26,8 +26,7 @@ require 'kafo/progress_bar'
26
26
  require 'kafo/hooking'
27
27
  require 'kafo/exit_handler'
28
28
  require 'kafo/scenario_manager'
29
- require 'kafo/hiera_configurer'
30
- require 'kafo/puppet_configurer'
29
+ require 'kafo/execution_environment'
31
30
 
32
31
  module Kafo
33
32
  class KafoConfigure < Clamp::Command
@@ -424,20 +423,17 @@ module Kafo
424
423
  def run_installation
425
424
  self.class.hooking.execute(:pre)
426
425
 
427
- hiera = HieraConfigurer.new(config.app[:hiera_config], config.modules, config.app[:order])
428
- hiera.write_configs
429
- self.class.exit_handler.register_cleanup_path(hiera.temp_dir)
430
-
431
- puppetconf = PuppetConfigurer.new(
432
- 'color' => false,
433
- 'evaltrace' => !!@progress_bar,
434
- 'hiera_config' => hiera.config_path,
435
- 'noop' => !!noop?,
436
- 'profile' => !!profile?,
437
- 'show_diff' => true,
438
- 'environmentpath' => hiera.temp_dir,
426
+ execution_env = ExecutionEnvironment.new(config)
427
+ self.class.exit_handler.register_cleanup_path(execution_env.directory)
428
+
429
+ execution_env.store_answers
430
+ puppetconf = execution_env.configure_puppet(
431
+ 'color' => false,
432
+ 'evaltrace' => !!@progressbar,
433
+ 'noop' => !!noop?,
434
+ 'profile' => !!profile?,
435
+ 'show_diff' => true,
439
436
  )
440
- self.class.exit_handler.register_cleanup_path(puppetconf.config_path)
441
437
 
442
438
  exit_code = 0
443
439
  exit_status = nil
@@ -6,8 +6,12 @@ module Kafo
6
6
  @command = command
7
7
  @puppet_config = puppet_config
8
8
 
9
- @options = options.push("--modulepath #{modules_path.join(':')}")
10
- @options.push("--config=#{puppet_config.config_path}") if puppet_config
9
+ if puppet_config
10
+ puppet_config['basemodulepath'] = modules_path.join(':')
11
+ @options = options.push("--config=#{puppet_config.config_path}")
12
+ else
13
+ @options = options.push("--modulepath #{modules_path.join(':')}")
14
+ end
11
15
  @logger = KafoConfigure.logger
12
16
  @puppet_version_check = !configuration.app[:skip_puppet_version_check]
13
17
  @suffix = nil
@@ -2,16 +2,12 @@ require 'tempfile'
2
2
 
3
3
  module Kafo
4
4
  class PuppetConfigurer
5
- attr_reader :logger
5
+ attr_reader :logger, :config_path
6
6
 
7
- def initialize(settings = {})
7
+ def initialize(config_path, settings = {})
8
+ @config_path = config_path
8
9
  @settings = {'reports' => ''}.merge(settings)
9
10
  @logger = KafoConfigure.logger
10
- @temp_file = Tempfile.new(['kafo_puppet', '.conf'])
11
- end
12
-
13
- def config_path
14
- @temp_file.path
15
11
  end
16
12
 
17
13
  def [](key)
@@ -23,15 +19,13 @@ module Kafo
23
19
  end
24
20
 
25
21
  def write_config
26
- @logger.debug("Writing Puppet config file at #{@temp_file.path}")
27
- @temp_file.open
28
- @temp_file.truncate(0)
29
- @temp_file.puts '[main]'
30
- @settings.keys.sort.each do |key|
31
- @temp_file.puts "#{key} = #{@settings[key]}"
22
+ @logger.debug("Writing Puppet config file at #{config_path}")
23
+ File.open(config_path, 'w') do |file|
24
+ file.puts '[main]'
25
+ @settings.keys.sort.each do |key|
26
+ file.puts "#{key} = #{@settings[key]}"
27
+ end
32
28
  end
33
- ensure
34
- @temp_file.close
35
29
  end
36
30
  end
37
31
  end
@@ -160,7 +160,7 @@ module Kafo
160
160
  end
161
161
 
162
162
  def default_params_path
163
- "#{dir_name}/manifests/#{get_params_name}.pp"
163
+ "#{dir_name}/manifests/#{class_to_name(get_params_name)}.pp"
164
164
  end
165
165
 
166
166
  def default_manifest_name
@@ -179,5 +179,9 @@ module Kafo
179
179
  name.gsub('/', '::')
180
180
  end
181
181
 
182
+ def class_to_name(name)
183
+ name.gsub('::', '/')
184
+ end
185
+
182
186
  end
183
187
  end
@@ -19,7 +19,7 @@ module Kafo
19
19
  content = YAML.load_file(scn_file)
20
20
  if content.is_a?(Hash) && content.has_key?(:answer_file) && content.fetch(:enabled, true)
21
21
  # add scenario name for legacy configs
22
- content[:name] = File.basename(scn_file, '.yaml') unless content.has_key?(:name)
22
+ content[:name] = Configuration.get_scenario_id(scn_file) unless content.has_key?(:name)
23
23
  scns[scn_file] = content
24
24
  end
25
25
  rescue Psych::SyntaxError => e
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
  module Kafo
3
3
  PARSER_CACHE_VERSION = 1
4
- VERSION = "3.0.0"
4
+ VERSION = "4.0.0"
5
5
  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: 3.0.0
4
+ version: 4.0.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: 2019-03-12 00:00:00.000000000 Z
11
+ date: 2019-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,7 +59,7 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
- name: simplecov
62
+ name: minitest-reporters
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
@@ -73,19 +73,19 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: ci_reporter_minitest
76
+ name: simplecov
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '1.0'
81
+ version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: '1.0'
88
+ version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: kafo_wizards
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +149,9 @@ dependencies:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: 0.6.2
152
+ - - "<"
153
+ - !ruby/object:Gem::Version
154
+ version: 1.3.1
152
155
  type: :runtime
153
156
  prerelease: false
154
157
  version_requirements: !ruby/object:Gem::Requirement
@@ -156,6 +159,9 @@ dependencies:
156
159
  - - ">="
157
160
  - !ruby/object:Gem::Version
158
161
  version: 0.6.2
162
+ - - "<"
163
+ - !ruby/object:Gem::Version
164
+ version: 1.3.1
159
165
  - !ruby/object:Gem::Dependency
160
166
  name: highline
161
167
  requirement: !ruby/object:Gem::Requirement
@@ -239,7 +245,9 @@ files:
239
245
  - lib/kafo/data_types/undef.rb
240
246
  - lib/kafo/data_types/variant.rb
241
247
  - lib/kafo/exceptions.rb
248
+ - lib/kafo/execution_environment.rb
242
249
  - lib/kafo/exit_handler.rb
250
+ - lib/kafo/fact_writer.rb
243
251
  - lib/kafo/help_builder.rb
244
252
  - lib/kafo/help_builders/advanced.rb
245
253
  - lib/kafo/help_builders/base.rb
@@ -256,7 +264,6 @@ files:
256
264
  - lib/kafo/param_group.rb
257
265
  - lib/kafo/parser_cache_reader.rb
258
266
  - lib/kafo/parser_cache_writer.rb
259
- - lib/kafo/password_manager.rb
260
267
  - lib/kafo/progress_bar.rb
261
268
  - lib/kafo/progress_bars/black_white.rb
262
269
  - lib/kafo/progress_bars/colored.rb
@@ -308,8 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
315
  - !ruby/object:Gem::Version
309
316
  version: '0'
310
317
  requirements: []
311
- rubyforge_project:
312
- rubygems_version: 2.7.6
318
+ rubygems_version: 3.0.3
313
319
  signing_key:
314
320
  specification_version: 4
315
321
  summary: A gem for making installations based on puppet user friendly
@@ -1,47 +0,0 @@
1
- # encoding: UTF-8
2
- require 'securerandom'
3
- require 'digest/sha2'
4
- require 'openssl'
5
- require 'base64'
6
-
7
- module Kafo
8
- class PasswordManager
9
- # generate a random password of lenght n
10
- #
11
- # on ruby >= 1.9 we use builtin method urlsafe_base64, on olders we use our own
12
- # implementation (inspired by urlsafe_base64)
13
- #
14
- # the result may contain A-Z, a-z, 0-9, “-” and “_”. “=”
15
- def password(n = 32)
16
- return SecureRandom.urlsafe_base64(n) if SecureRandom.respond_to?(:urlsafe_base64)
17
-
18
- s = [SecureRandom.random_bytes(n)].pack("m*")
19
- s.delete!("\n")
20
- s.tr!("+/", "-_")
21
- s.delete!("=")
22
- s
23
- end
24
-
25
- def aes_encrypt(text, passphrase)
26
- cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
27
- cipher.encrypt
28
- cipher.key = Digest::SHA2.hexdigest(passphrase)
29
- cipher.iv = Digest::SHA2.hexdigest(passphrase + passphrase)
30
-
31
- encrypted = cipher.update(text)
32
- encrypted << cipher.final
33
- Base64.encode64(encrypted)
34
- end
35
-
36
- def aes_decrypt(text, passphrase)
37
- cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
38
- cipher.decrypt
39
- cipher.key = Digest::SHA2.hexdigest(passphrase)
40
- cipher.iv = Digest::SHA2.hexdigest(passphrase + passphrase)
41
-
42
- decrypted = cipher.update(Base64.decode64(text))
43
- decrypted << cipher.final
44
- decrypted
45
- end
46
- end
47
- end