kafo 1.0.6 → 1.0.7

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
  SHA1:
3
- metadata.gz: 510b992ff3fbaf2166c54dbc84fe06c95ffa28e4
4
- data.tar.gz: 39928764fca55a2390c670cb08d68bb2c9f4ce38
3
+ metadata.gz: 5e997beadceb5307a50757065a9b0feb0fcd7d35
4
+ data.tar.gz: a2460963b6539e91acecf021935e94bb329dcbab
5
5
  SHA512:
6
- metadata.gz: b102ff1bfe985eee3436fbfa94323ed775828e63b8550118ea9568d7c1c51ee17006831d6af12e1cb94befc6c65d6f50eafab3c0fa54b7874d5a3f4b6f1a2da3
7
- data.tar.gz: aaf516905b8330ecffe67c40f33e9122ae3e928ed37da976891c8145b3e030b1291e330f5caaf1f073057a711141ea7bede3bbd1ca4af585f0c6e5046022c94b
6
+ metadata.gz: bed514715b9f2913a85cdbeee6713f1f1d74d38a311014ebf38b2a3d42c9fc0bc0797656ad063e6346b1e62c4500d14e29ccb5bd3a32082ae63d5218627a2851
7
+ data.tar.gz: da303a516a27fb37c9a339198ff0e62a1bc8b3ecfc1f4068d49ef7e93ba6a3c9a4907ad52da45d931b8bf1cda98195eba8fa36c7214fb2abeb119f47d1bb34f0
@@ -36,9 +36,6 @@
36
36
  # :log_name: configure.log
37
37
  # :log_level: :info
38
38
 
39
- # Change if you want to debug default answers for you modules, this directory holds default answers
40
- # :default_values_dir: /tmp
41
-
42
39
  ## Advanced configuration - if not set it's ignored
43
40
  # :log_owner: root
44
41
  # :log_group: root
Binary file
@@ -0,0 +1,109 @@
1
+ /'Use PlantUML (http://plantuml.com/starting) to render this file to other formats like PNG, SVG, EPS'/
2
+ @startuml
3
+ |initialize|
4
+ start
5
+ :scenario manager setup;
6
+ note right
7
+ * guess scenario dir
8
+ * detect last used scenario
9
+ end note
10
+ #LightGrey:--list-scenarios>
11
+ :get config file;
12
+ note right
13
+ One of the following in this order
14
+ # **CONFIG_FILE**
15
+ # **--scenario** or **-S** in installer arguments
16
+ # previous scenarios
17
+ # any available scenario if there is *just one*
18
+ # select scenario if installer is in interactive mode
19
+ end note
20
+
21
+ if (no config file?)
22
+ stop
23
+ endif
24
+
25
+ :load configuration;
26
+ note right
27
+ * load configuration
28
+ * merge defaults
29
+ * save configuration
30
+ * load answer file
31
+ * setup kafo dirs
32
+ * setup hooks
33
+ * setup key-value store
34
+ end note
35
+
36
+ #greenyellow:**pre_migrations**|
37
+ note right: here the 6.1 configs get turned into 6.2 scenarios
38
+
39
+ :load configuration;
40
+ note right: if migrations requested reload
41
+
42
+ :execute scenario migrations;
43
+
44
+ #LightGrey:--migrations-only>
45
+ :load configuration;
46
+ note right: if any migration was applied
47
+
48
+ if (previous scenario != current scenario) then (scenario\nchanged)
49
+ #LightGrey:--compare-scenarios>
50
+ :load previous scenario;
51
+ :run scenario migrations
52
+ on previous scenario;
53
+ :migrate data from previous scenario
54
+ configuration to the current one;
55
+ :load configuration;
56
+ endif
57
+
58
+ :clamp init;
59
+
60
+ #Greenyellow:**boot**|
61
+
62
+ :define installer options;
63
+ :pre-parse ARGV to finish installer configuration;
64
+
65
+ #Greenyellow:**init**|
66
+
67
+ :load defaults from puppet;
68
+ #Greenyellow:**pre_values**|
69
+ :load values from answer file;
70
+ :load values from previous answer file;
71
+ note right: if previous scenraio != current scenario
72
+
73
+ :update help with default values;
74
+ |execute|
75
+ :parse values from CLI arguments;
76
+
77
+ :init progress bar;
78
+
79
+ #LightBlue:**run system checks**>
80
+ #Greenyellow:**pre_validations**|
81
+
82
+ if (interactive?) then (yes)
83
+ :run wizard;
84
+ else
85
+ :run validations;
86
+ endif
87
+
88
+ #Greenyellow:**pre_commit**|
89
+
90
+ :save answers;
91
+ note right: unless noop or dont-save-answers
92
+ :save current scenario as the last used one;
93
+ note right: unless noop or dont-save-answers
94
+
95
+ #Greenyellow:**pre**|
96
+
97
+ :setup HieraConfigurer and save configs;
98
+
99
+ #Gold:run puppet;
100
+ repeat
101
+ :parse puppet output;
102
+ :update installer logs;
103
+ :update progress bar;
104
+ repeat while (puppet runs?)
105
+
106
+ #Greenyellow:**post**|
107
+
108
+ stop
109
+ @enduml
@@ -24,7 +24,6 @@ module Kafo
24
24
  :answer_file => './config/answers.yaml',
25
25
  :installer_dir => '.',
26
26
  :module_dirs => ['./modules'],
27
- :default_values_dir => '/tmp',
28
27
  :colors => Kafo::ColorScheme.colors_possible?,
29
28
  :color_of_background => :dark,
30
29
  :hook_dirs => [],
@@ -52,9 +51,14 @@ module Kafo
52
51
 
53
52
  def save_configuration(configuration)
54
53
  return true unless @persist
55
- FileUtils.touch @config_file
56
- File.chmod 0600, @config_file
57
- File.open(@config_file, 'w') { |file| file.write(format(YAML.dump(configuration))) }
54
+ begin
55
+ FileUtils.touch @config_file
56
+ File.chmod 0600, @config_file
57
+ File.open(@config_file, 'w') { |file| file.write(format(YAML.dump(configuration))) }
58
+ rescue Errno::EACCES
59
+ puts "Insufficient permissions to write to #{@config_file}, can not continue"
60
+ KafoConfigure.exit(:insufficient_permissions)
61
+ end
58
62
  end
59
63
 
60
64
  def configure_application
@@ -133,7 +137,7 @@ module Kafo
133
137
 
134
138
  def migrate_configuration(from_config, options={})
135
139
  keys_to_skip = options.fetch(:skip, [])
136
- keys = [:log_dir, :log_name, :log_level, :no_prefix, :default_values_dir,
140
+ keys = [:log_dir, :log_name, :log_level, :no_prefix,
137
141
  :colors, :color_of_background, :custom, :password, :verbose_log_level]
138
142
  keys += options.fetch(:with, [])
139
143
  keys.each do |key|
@@ -145,15 +149,19 @@ module Kafo
145
149
 
146
150
  def params_default_values
147
151
  @params_default_values ||= begin
148
- @logger.debug "Creating tmp dir within #{app[:default_values_dir]}..."
149
- temp_dir = Dir.mktmpdir(nil, app[:default_values_dir])
150
- KafoConfigure.exit_handler.register_cleanup_path temp_dir
151
-
152
152
  puppetconf = PuppetConfigurer.new('noop' => true)
153
153
  KafoConfigure.exit_handler.register_cleanup_path puppetconf.config_path
154
154
 
155
+ dump_manifest = <<EOS
156
+ #{includes}
157
+ class { '::kafo_configure::dump_values':
158
+ lookups => [#{param_lookups_to_dump}],
159
+ variables => [#{params_to_dump}],
160
+ }
161
+ EOS
162
+
155
163
  @logger.info 'Loading default values from puppet modules...'
156
- command = PuppetCommand.new("$temp_dir=\"#{temp_dir}\" #{includes} dump_values(#{params_to_dump})", [], puppetconf, self).append('2>&1').command
164
+ command = PuppetCommand.new(dump_manifest, [], puppetconf, self).append('2>&1').command
157
165
  result = `#{command}`
158
166
  @logger.debug result
159
167
  unless $?.exitstatus == 0
@@ -165,7 +173,8 @@ module Kafo
165
173
  KafoConfigure.exit(:defaults_error)
166
174
  end
167
175
  @logger.info "... finished"
168
- load_yaml_file(File.join(temp_dir, 'default_values.yaml'))
176
+
177
+ load_yaml_from_output(result.split($/))
169
178
  end
170
179
  end
171
180
 
@@ -304,6 +313,10 @@ module Kafo
304
313
  params.select(&:dump_default_needed?).map(&:dump_default).join(',')
305
314
  end
306
315
 
316
+ def param_lookups_to_dump
317
+ params.select { |p| p.manifest_default.nil? }.map { |p| %{"#{p.identifier}"} }.join(',')
318
+ end
319
+
307
320
  def format(data)
308
321
  data.gsub('!ruby/sym ', ':')
309
322
  end
@@ -312,6 +325,18 @@ module Kafo
312
325
  YAML.load_file(filename)
313
326
  end
314
327
 
328
+ # Loads YAML from mixed output, finding the "---" and "..." document start/end delimiters
329
+ def load_yaml_from_output(lines)
330
+ start = lines.find_index { |l| l.start_with?('---') }
331
+ last = lines[start..-1].find_index("...")
332
+ if start.nil? || last.nil?
333
+ puts "Could not find default values in output"
334
+ @logger.error 'Could not find default values in Puppet output, cannot continue'
335
+ KafoConfigure.exit(:defaults_error)
336
+ end
337
+ YAML.load(lines[start,last].join($/))
338
+ end
339
+
315
340
  def register_data_types
316
341
  module_dirs.each do |module_dir|
317
342
  Dir[File.join(module_dir, '*', 'types', '**', '*.pp')].each do |type_file|
@@ -18,7 +18,8 @@ module Kafo
18
18
  :defaults_error => 25,
19
19
  :unset_scenario => 26,
20
20
  :scenario_error => 27,
21
- :missing_argument => 28
21
+ :missing_argument => 28,
22
+ :insufficient_permissions => 29
22
23
  }
23
24
  end
24
25
 
@@ -113,6 +113,14 @@ module Kafo
113
113
  self.class.logger
114
114
  end
115
115
 
116
+ def run(*args)
117
+ started_at = Time.now
118
+ logger.info("Running installer with args #{args.inspect}")
119
+ super
120
+ ensure
121
+ logger.info("Installer finished in #{Time.now - started_at} seconds")
122
+ end
123
+
116
124
  def execute
117
125
  parse_cli_arguments
118
126
 
@@ -306,8 +314,8 @@ module Kafo
306
314
  self.class.app_option ['-S', '--scenario'], 'SCENARIO', 'Use installation scenario'
307
315
  self.class.app_option ['--disable-scenario'], 'SCENARIO', 'Disable installation scenario'
308
316
  self.class.app_option ['--enable-scenario'], 'SCENARIO', 'Enable installation scenario'
309
- self.class.app_option ['--list-scenarios'], :flag, 'List available installation scenaraios'
310
- self.class.app_option ['--force'], :flag, 'Force change of installation scenaraio'
317
+ self.class.app_option ['--list-scenarios'], :flag, 'List available installation scenarios'
318
+ self.class.app_option ['--force'], :flag, 'Force change of installation scenario'
311
319
  self.class.app_option ['--compare-scenarios'], :flag, 'Show changes between last used scenario and the scenario specified with -S or --scenario argument'
312
320
  self.class.app_option ['--migrations-only'], :flag, 'Apply migrations to a selected scenario and exit'
313
321
  self.class.app_option ['--[no-]parser-cache'], :flag, 'Force use or bypass of Puppet module parser cache'
@@ -425,7 +433,7 @@ module Kafo
425
433
  'hiera_config' => hiera.config_path,
426
434
  'noop' => !!noop?,
427
435
  'profile' => !!profile?,
428
- 'show_diff' => false
436
+ 'show_diff' => true
429
437
  )
430
438
  self.class.exit_handler.register_cleanup_path(puppetconf.config_path)
431
439
 
@@ -17,6 +17,10 @@ module Kafo
17
17
  @type = DataType.new_from_string(type)
18
18
  end
19
19
 
20
+ def identifier
21
+ @module ? "#{@module.identifier}::#{name}" : name
22
+ end
23
+
20
24
  def groups
21
25
  @groups || []
22
26
  end
@@ -37,10 +41,10 @@ module Kafo
37
41
  @value = nil
38
42
  end
39
43
 
40
- # For literal default values, only use 'manifest_default'. For variable values, use the value
41
- # loaded back from the dump in 'default'.
44
+ # For literal default values, only use 'manifest_default'. For variable or values from a data
45
+ # lookup, use the value loaded back from the dump in 'default'.
42
46
  def default
43
- @type.typecast(dump_default_needed? ? @default : manifest_default)
47
+ @type.typecast(dump_default_needed? || !@default.nil? ? @default : manifest_default)
44
48
  end
45
49
 
46
50
  def default=(default)
@@ -89,6 +93,8 @@ module Kafo
89
93
  # be used. On calling #value, the default will be returned if no overriding value is set.
90
94
  if dump_default_needed? && defaults.has_key?(manifest_default_params_variable)
91
95
  self.default = defaults[manifest_default_params_variable]
96
+ elsif defaults.has_key?(identifier)
97
+ self.default = defaults[identifier]
92
98
  end
93
99
  end
94
100
 
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
  module Kafo
3
3
  PARSER_CACHE_VERSION = 1
4
- VERSION = "1.0.6"
4
+ VERSION = "1.0.7"
5
5
  end
@@ -0,0 +1,14 @@
1
+ # Find values via data lookups for class parameters
2
+ #
3
+ # Wraps the lookup() function for data lookups of class parameters without
4
+ # inline defaults.
5
+ #
6
+ Puppet::Functions.create_function(:dump_lookups) do
7
+ dispatch :dump_lookups do
8
+ param 'Array[String]', :parameters
9
+ end
10
+
11
+ def dump_lookups(parameters)
12
+ Hash[parameters.map { |param| [param, call_function('lookup', [param], 'default_value' => nil)] }]
13
+ end
14
+ end
@@ -1,18 +1,13 @@
1
1
  # Find default values for variables specified as args
2
2
  #
3
3
  module Puppet::Parser::Functions
4
- newfunction(:dump_values) do |args|
4
+ newfunction(:dump_values, :type => :rvalue) do |args|
5
5
  options = []
6
6
  options<< false if Puppet::PUPPETVERSION.start_with?('2.6')
7
- data = args.map do |arg|
7
+ data = args.flatten.map do |arg|
8
8
  found_value = lookupvar(arg, *options)
9
9
  [arg, found_value]
10
10
  end
11
- data = Hash[data]
12
-
13
- dump_dir = lookupvar('temp_dir')
14
- file_name = "#{dump_dir}/default_values.yaml"
15
-
16
- File.open(file_name, File::WRONLY|File::CREAT|File::EXCL, 0600) { |file| file.write(YAML.dump(data)) }
11
+ Hash[data]
17
12
  end
18
13
  end
@@ -0,0 +1,13 @@
1
+ # Returns the given argument as a string containing YAML, with an end of
2
+ # document marker.
3
+ #
4
+ module Puppet::Parser::Functions
5
+ newfunction(:to_yaml, :type => :rvalue) do |args|
6
+ dump = if args.all? { |a| a.is_a?(Hash) }
7
+ args.inject({}) { |m,a| m.merge(a) }
8
+ else
9
+ args.first
10
+ end
11
+ YAML.dump(dump) + "\n...\n"
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # Outputs a YAML hash of variable to its value, for:
2
+ # - variables: a list of variables from params classes that have
3
+ # already been included
4
+ # - lookups: a list of variables to find through lookup()
5
+ #
6
+ # The result will be merged together into one hash.
7
+ class kafo_configure::dump_values($variables, $lookups) {
8
+ $dumped_vars = dump_values($variables)
9
+
10
+ # Data lookups are only supported on Puppet 4 or higher, however depend on
11
+ # 4.5.0 which fixes PUP-6230 where missing data correctly returns the
12
+ # default/undef instead of an empty hash.
13
+ if versioncmp($::puppetversion, '4.5') >= 0 {
14
+ $dumped_lookups = dump_lookups($lookups)
15
+ $dumped = to_yaml($dumped_vars, $dumped_lookups)
16
+ } else {
17
+ $dumped = to_yaml($dumped_vars)
18
+ }
19
+
20
+ notice("\n${dumped}")
21
+ }
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: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marek Hulan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-05 00:00:00.000000000 Z
11
+ date: 2017-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -194,14 +194,13 @@ executables:
194
194
  extensions: []
195
195
  extra_rdoc_files: []
196
196
  files:
197
- - LICENSE.txt
198
- - README.md
199
- - Rakefile
200
197
  - bin/kafo-configure
201
198
  - bin/kafo-export-params
202
199
  - bin/kafofy
203
200
  - config/config_header.txt
204
201
  - config/kafo.yaml.example
202
+ - doc/kafo_run.png
203
+ - doc/kafo_run.uml
205
204
  - lib/kafo.rb
206
205
  - lib/kafo/color_scheme.rb
207
206
  - lib/kafo/condition.rb
@@ -262,10 +261,13 @@ files:
262
261
  - lib/kafo/validator.rb
263
262
  - lib/kafo/version.rb
264
263
  - lib/kafo/wizard.rb
264
+ - modules/kafo_configure/lib/puppet/functions/dump_lookups.rb
265
265
  - modules/kafo_configure/lib/puppet/parser/functions/add_progress.rb
266
266
  - modules/kafo_configure/lib/puppet/parser/functions/decrypt.rb
267
267
  - modules/kafo_configure/lib/puppet/parser/functions/dump_values.rb
268
268
  - modules/kafo_configure/lib/puppet/parser/functions/load_kafo_password.rb
269
+ - modules/kafo_configure/lib/puppet/parser/functions/to_yaml.rb
270
+ - modules/kafo_configure/manifests/dump_values.pp
269
271
  - modules/kafo_configure/manifests/init.pp
270
272
  homepage: https://github.com/theforeman/kafo
271
273
  licenses:
@@ -1,11 +0,0 @@
1
- This program and entire repository is free software: you can redistribute it
2
- and/or modify it under the terms of the GNU General Public License as
3
- published by the Free Software Foundation, either version 3 of the License,
4
- or any later version.
5
-
6
- This program is distributed in the hope that it will be useful, but WITHOUT
7
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9
-
10
- You should have received a copy of the GNU General Public License along with
11
- this program. If not, see http://www.gnu.org/licenses/.