kafo 6.3.0 → 6.4.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: d246040f3b21a35b8ec0091c61333fbd5b3ecc8af9fb7d6ed666de850a101bf9
4
- data.tar.gz: 9ab7731a6e46877cebfdffffbd7b06e5c11951821be90ff2743aa726c889c418
3
+ metadata.gz: 4298932fae581df1967c430be034c621ed435954ac95acf7cf7b23c9b7692d40
4
+ data.tar.gz: 8ce698b286d5ec94c19adfcfc23e541c8b0599cb1399e689ee00b4413668552c
5
5
  SHA512:
6
- metadata.gz: fb5d804b5c587646b9576f4ba6a67c9b0bd3702ddfad877750beb81b61710fd5b104db0fe36b7cf1cfd1f286d1548fb5b48acb9b778652df6c075600176df88d
7
- data.tar.gz: 406667aac6a714122c3ec8d00a90ec630843bd6939167f23142e94bf465be51c8e098380815e869be64af9090b726a2e6a368542e18137a4fdb2493a52ed6246
6
+ metadata.gz: 769146a010f1007993961a0075a03b1cbf9c4055a59bd8259940379662eaa36003ad5a83b746452e8dd0b35ea47640eb1a3064516a7a776d6e8030c6403321a1
7
+ data.tar.gz: dd05194e14a17c54a205b5eacc35677b78fe4f036b8ab851972a8301c59b1e327555dd065772d82476a190d878d50226ed0253afe1c5dc129496ee316555bac3
data/README.md CHANGED
@@ -816,6 +816,32 @@ if app_value(:reset_foreman_db) && !app_value(:noop)
816
816
  end
817
817
  ```
818
818
 
819
+ Hooks can additionally be defined by combining all related stages into a single file
820
+ known as a Multi-stage hook. Multi-stage hooks live in a special directory inside
821
+ the hooks directory: ```$installer_dir/hooks/multi```. Taking the previous example:
822
+
823
+ ```ruby
824
+ # hooks/multi/10-reset_option_feature.rb
825
+ boot do
826
+ app_option '--reset-foreman-db', :flag, 'Drop foreman database first? You will lose all data!', :default => false
827
+ end
828
+
829
+ pre do
830
+ if app_value(:reset_foreman_db) && !app_value(:noop)
831
+ `which foreman-rake > /dev/null 2>&1`
832
+ if $?.success?
833
+ logger.info 'Dropping database!'
834
+ output = `foreman-rake db:drop 2>&1`
835
+ logger.debug output.to_s
836
+ unless $?.success?
837
+ logger.warn "Unable to drop DB, ignoring since it's not fatal, output was: '#{output}''"
838
+ end
839
+ else
840
+ logger.warn 'Foreman not installed yet, can not drop database!'
841
+ end
842
+ end
843
+ end
844
+ ```
819
845
 
820
846
  If you want to add more directories to be search you can use the "hook_dirs" option
821
847
  in the installer configuration file.
@@ -130,7 +130,7 @@ module Kafo
130
130
  def modules
131
131
  @modules ||= begin
132
132
  register_data_types
133
- @data.keys.map { |mod| PuppetModule.new(mod, PuppetModule.find_parser, self).parse }.sort
133
+ @data.keys.map { |mod| PuppetModule.new(mod, configuration: self).parse }.sort
134
134
  end
135
135
  end
136
136
 
@@ -159,7 +159,7 @@ module Kafo
159
159
  end
160
160
 
161
161
  def add_module(name)
162
- mod = PuppetModule.new(name, PuppetModule.find_parser, self).parse
162
+ mod = PuppetModule.new(name, configuration: self).parse
163
163
  unless modules.map(&:name).include?(mod.name)
164
164
  mod.enable
165
165
  @modules << mod
@@ -34,8 +34,8 @@ module Kafo
34
34
  #
35
35
  # @example
36
36
  # app_option ['-n', '--noop'], :flag, 'Run puppet in noop mode?', :default => false
37
- def app_option(*args)
38
- self.kafo.class.app_option(*args)
37
+ def app_option(*args, &block)
38
+ self.kafo.class.app_option(*args, &block)
39
39
  end
40
40
 
41
41
  # Returns whether the given app option exists. This is useful when there's a conditional option that is
data/lib/kafo/hooking.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'kafo/hook_context'
2
+ require 'kafo/multi_stage_hook'
2
3
 
3
4
  module Kafo
4
5
  class Hooking
@@ -36,6 +37,14 @@ module Kafo
36
37
  register(hook_type, file, &hook_block)
37
38
  end
38
39
  end
40
+
41
+ # Multi stage hooks are special
42
+ Dir.glob(File.join(base_dir, 'multi', '*.rb')).sort.each do |file|
43
+ logger.debug "Loading multi stage hook #{file}"
44
+ hook = File.read(file)
45
+ MultiStageHook.new(file, self, TYPES).instance_eval(hook, file, 1)
46
+ end
47
+
39
48
  @loaded = true
40
49
  end
41
50
  self
@@ -0,0 +1,13 @@
1
+ module Kafo
2
+ class MultiStageHook
3
+ def initialize(name, registry, types)
4
+ default_name = name
5
+
6
+ types.each do |hook_type|
7
+ self.class.send(:define_method, hook_type) do |name=nil, &block|
8
+ registry.send(:register, hook_type, name || default_name, &block)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -25,7 +25,7 @@ module Kafo
25
25
  end
26
26
  end
27
27
 
28
- def initialize(identifier, parser = self.class.find_parser, configuration = KafoConfigure.config)
28
+ def initialize(identifier, parser: nil, configuration: KafoConfigure.config)
29
29
  @identifier = identifier
30
30
  @configuration = configuration
31
31
  @name = get_name
@@ -65,6 +65,7 @@ module Kafo
65
65
  def parse(builder_klass = ParamBuilder)
66
66
  @raw_data = @parser_cache.get(identifier, manifest_path) if @parser_cache
67
67
  if @raw_data.nil?
68
+ @parser = self.class.find_parser if @parser.nil?
68
69
  if @parser.nil? || @parser == :none
69
70
  raise ParserError.new("No Puppet module parser is installed and no cache of the file #{manifest_path} is available. Please check debug logs and install optional dependencies for the parser.")
70
71
  else
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.3.0"
4
+ VERSION = "6.4.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: 6.3.0
4
+ version: 6.4.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: 2021-03-25 00:00:00.000000000 Z
11
+ date: 2021-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -262,6 +262,7 @@ files:
262
262
  - lib/kafo/logging.rb
263
263
  - lib/kafo/migration_context.rb
264
264
  - lib/kafo/migrations.rb
265
+ - lib/kafo/multi_stage_hook.rb
265
266
  - lib/kafo/param.rb
266
267
  - lib/kafo/param_builder.rb
267
268
  - lib/kafo/param_group.rb
@@ -319,7 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
319
320
  - !ruby/object:Gem::Version
320
321
  version: '0'
321
322
  requirements: []
322
- rubygems_version: 3.1.4
323
+ rubygems_version: 3.1.6
323
324
  signing_key:
324
325
  specification_version: 4
325
326
  summary: A gem for making installations based on puppet user friendly