kafo 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +56 -98
  3. data/Rakefile +12 -1
  4. data/lib/kafo/color_scheme.rb +3 -3
  5. data/lib/kafo/configuration.rb +5 -7
  6. data/lib/kafo/data_types/aliases.rb +0 -10
  7. data/lib/kafo/data_types/not_undef.rb +2 -0
  8. data/lib/kafo/data_types/optional.rb +2 -0
  9. data/lib/kafo/hiera_configurer.rb +50 -22
  10. data/lib/kafo/hook_context.rb +3 -2
  11. data/lib/kafo/kafo_configure.rb +9 -8
  12. data/lib/kafo/logger.rb +2 -2
  13. data/lib/kafo/param.rb +6 -20
  14. data/lib/kafo/param_builder.rb +1 -8
  15. data/lib/kafo/progress_bar.rb +1 -1
  16. data/lib/kafo/puppet_command.rb +4 -21
  17. data/lib/kafo/puppet_module.rb +2 -13
  18. data/lib/kafo/scenario_manager.rb +6 -6
  19. data/lib/kafo/version.rb +1 -1
  20. data/modules/kafo_configure/Rakefile +1 -0
  21. data/modules/kafo_configure/lib/puppet/functions/{dump_lookups.rb → kafo_configure/dump_lookups.rb} +2 -1
  22. data/modules/kafo_configure/lib/puppet/functions/kafo_configure/dump_variables.rb +13 -0
  23. data/modules/kafo_configure/lib/puppet/functions/kafo_configure/to_yaml.rb +15 -0
  24. data/modules/kafo_configure/manifests/dump_values.pp +11 -12
  25. data/modules/kafo_configure/manifests/init.pp +7 -5
  26. data/modules/kafo_configure/manifests/puppet_version_semver.pp +1 -1
  27. data/modules/kafo_configure/metadata.json +15 -0
  28. data/modules/kafo_configure/spec/classes/dump_values_spec.rb +24 -0
  29. data/modules/kafo_configure/spec/classes/init_spec.rb +17 -0
  30. data/modules/kafo_configure/spec/fixtures/hiera/hiera.yaml +7 -0
  31. data/modules/kafo_configure/spec/fixtures/hiera/test.yaml +4 -0
  32. data/modules/kafo_configure/spec/fixtures/modules/dummy/manifests/init.pp +5 -0
  33. data/modules/kafo_configure/spec/fixtures/modules/dummy/manifests/params.pp +3 -0
  34. data/modules/kafo_configure/spec/functions/dump_lookups_spec.rb +7 -0
  35. data/modules/kafo_configure/spec/functions/dump_variables_spec.rb +10 -0
  36. data/modules/kafo_configure/spec/functions/to_yaml_spec.rb +5 -0
  37. data/modules/kafo_configure/spec/spec_helper.rb +5 -0
  38. metadata +48 -35
  39. data/lib/kafo/params/password.rb +0 -60
  40. data/lib/kafo/validator.rb +0 -122
  41. data/modules/kafo_configure/lib/puppet/parser/functions/decrypt.rb +0 -16
  42. data/modules/kafo_configure/lib/puppet/parser/functions/dump_values.rb +0 -13
  43. data/modules/kafo_configure/lib/puppet/parser/functions/foreman_to_yaml.rb +0 -13
  44. data/modules/kafo_configure/lib/puppet/parser/functions/load_kafo_password.rb +0 -13
  45. data/modules/kafo_configure/manifests/puppet_version_versioncmp.pp +0 -9
@@ -0,0 +1,7 @@
1
+ ---
2
+ :backends:
3
+ - yaml
4
+ :hierarchy:
5
+ - test
6
+ :yaml:
7
+ :datadir: 'spec/fixtures/hiera'
@@ -0,0 +1,4 @@
1
+ ---
2
+ classes:
3
+ - dummy
4
+ my_module::param: override
@@ -0,0 +1,5 @@
1
+ class dummy (
2
+ String $first = $dummy::params::first,
3
+ Optional[Integer] $second = undef,
4
+ ) inherits dummy::params {
5
+ }
@@ -0,0 +1,3 @@
1
+ class dummy::params {
2
+ $first = 'foo'
3
+ }
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'kafo_configure::dump_lookups' do
4
+ let(:hiera_config) { 'spec/fixtures/hiera/hiera.yaml' }
5
+ it { is_expected.to run.with_params([]).and_return({}) }
6
+ it { is_expected.to run.with_params(['my_module::param']).and_return({'my_module::param' => 'override'}) }
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'kafo_configure::dump_variables' do
4
+ it { is_expected.to run.with_params([]).and_return({}) }
5
+
6
+ context 'with values' do
7
+ let(:pre_condition) { 'include dummy' }
8
+ it { is_expected.to run.with_params(['dummy::first']).and_return({'dummy::first' => 'foo'}) }
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'kafo_configure::to_yaml' do
4
+ it { is_expected.to run.with_params({}, {}).and_return("--- {}\n\n...\n") }
5
+ end
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |c|
2
+ c.mock_with :rspec
3
+ end
4
+
5
+ require 'puppetlabs_spec_helper/module_spec_helper'
metadata CHANGED
@@ -1,85 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kafo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.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: 2017-12-18 00:00:00.000000000 Z
11
+ date: 2019-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "<"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: 11.0.0
39
+ version: '0'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - "<"
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: 11.0.0
46
+ version: '0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: minitest
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '4.0'
53
+ version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - "~>"
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '4.0'
60
+ version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: simplecov
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - "<"
65
+ - - ">="
60
66
  - !ruby/object:Gem::Version
61
- version: '0.9'
67
+ version: '0'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - "<"
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
- version: '0.9'
74
+ version: '0'
69
75
  - !ruby/object:Gem::Dependency
70
- name: ci_reporter
76
+ name: ci_reporter_minitest
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - "~>"
79
+ - - ">="
74
80
  - !ruby/object:Gem::Version
75
- version: 1.9.0
81
+ version: '1.0'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - "~>"
86
+ - - ">="
81
87
  - !ruby/object:Gem::Version
82
- version: 1.9.0
88
+ version: '1.0'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: kafo_wizards
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +190,8 @@ dependencies:
184
190
  - - ">="
185
191
  - !ruby/object:Gem::Version
186
192
  version: '0'
187
- description: A gem for making installations based on puppet user friendly
193
+ description: If you write puppet modules for installing your software, you can use
194
+ kafo to create powerful installer
188
195
  email:
189
196
  - ares@igloonet.cz
190
197
  executables:
@@ -247,7 +254,6 @@ files:
247
254
  - lib/kafo/param.rb
248
255
  - lib/kafo/param_builder.rb
249
256
  - lib/kafo/param_group.rb
250
- - lib/kafo/params/password.rb
251
257
  - lib/kafo/parser_cache_reader.rb
252
258
  - lib/kafo/parser_cache_writer.rb
253
259
  - lib/kafo/password_manager.rb
@@ -262,22 +268,30 @@ files:
262
268
  - lib/kafo/store.rb
263
269
  - lib/kafo/string_helper.rb
264
270
  - lib/kafo/system_checker.rb
265
- - lib/kafo/validator.rb
266
271
  - lib/kafo/version.rb
267
272
  - lib/kafo/wizard.rb
268
- - modules/kafo_configure/lib/puppet/functions/dump_lookups.rb
273
+ - modules/kafo_configure/Rakefile
274
+ - modules/kafo_configure/lib/puppet/functions/kafo_configure/dump_lookups.rb
275
+ - modules/kafo_configure/lib/puppet/functions/kafo_configure/dump_variables.rb
276
+ - modules/kafo_configure/lib/puppet/functions/kafo_configure/to_yaml.rb
269
277
  - modules/kafo_configure/lib/puppet/parser/functions/add_progress.rb
270
- - modules/kafo_configure/lib/puppet/parser/functions/decrypt.rb
271
- - modules/kafo_configure/lib/puppet/parser/functions/dump_values.rb
272
- - modules/kafo_configure/lib/puppet/parser/functions/foreman_to_yaml.rb
273
- - modules/kafo_configure/lib/puppet/parser/functions/load_kafo_password.rb
274
278
  - modules/kafo_configure/manifests/dump_values.pp
275
279
  - modules/kafo_configure/manifests/init.pp
276
280
  - modules/kafo_configure/manifests/puppet_version_semver.pp
277
- - modules/kafo_configure/manifests/puppet_version_versioncmp.pp
281
+ - modules/kafo_configure/metadata.json
282
+ - modules/kafo_configure/spec/classes/dump_values_spec.rb
283
+ - modules/kafo_configure/spec/classes/init_spec.rb
284
+ - modules/kafo_configure/spec/fixtures/hiera/hiera.yaml
285
+ - modules/kafo_configure/spec/fixtures/hiera/test.yaml
286
+ - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/init.pp
287
+ - modules/kafo_configure/spec/fixtures/modules/dummy/manifests/params.pp
288
+ - modules/kafo_configure/spec/functions/dump_lookups_spec.rb
289
+ - modules/kafo_configure/spec/functions/dump_variables_spec.rb
290
+ - modules/kafo_configure/spec/functions/to_yaml_spec.rb
291
+ - modules/kafo_configure/spec/spec_helper.rb
278
292
  homepage: https://github.com/theforeman/kafo
279
293
  licenses:
280
- - GPLv3+
294
+ - GPL-3.0+
281
295
  metadata: {}
282
296
  post_install_message:
283
297
  rdoc_options: []
@@ -287,7 +301,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
287
301
  requirements:
288
302
  - - ">="
289
303
  - !ruby/object:Gem::Version
290
- version: '0'
304
+ version: 2.0.0
291
305
  required_rubygems_version: !ruby/object:Gem::Requirement
292
306
  requirements:
293
307
  - - ">="
@@ -295,9 +309,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
295
309
  version: '0'
296
310
  requirements: []
297
311
  rubyforge_project:
298
- rubygems_version: 2.6.8
312
+ rubygems_version: 2.7.6
299
313
  signing_key:
300
314
  specification_version: 4
301
- summary: If you write puppet modules for installing your software, you can use kafo
302
- to create powerful installer
315
+ summary: A gem for making installations based on puppet user friendly
303
316
  test_files: []
@@ -1,60 +0,0 @@
1
- module Kafo
2
- module Params
3
- # A password paramater is stored encrypted in answer file using AES 256 in CBC mode
4
- #
5
- # we use a passphrase that is stored in kafo.yaml for encryption
6
- # encrypted password is prefixed with $1$ (for historical reasons, no connection to
7
- # Modular Crypt Format)
8
- class Password < Param
9
- def value=(value)
10
- super
11
- if @value.nil? || @value.empty?
12
- @value = password_manager.password
13
- end
14
- setup_password if @value.is_a?(::String)
15
- @value
16
- end
17
-
18
- def value
19
- @encrypted
20
- end
21
-
22
- private
23
-
24
- def setup_password
25
- encrypted? ? decrypt : encrypt
26
- end
27
-
28
- def encrypted?
29
- @value.length > 3 && @value[0..2] == '$1$'
30
- end
31
-
32
- def decrypt
33
- @encrypted = @value
34
- @value = password_manager.aes_decrypt(@value[3..-1], phrase)
35
- end
36
-
37
- def encrypt
38
- @encrypted = '$1$' + password_manager.aes_encrypt(@value, phrase)
39
- end
40
-
41
- def password_manager
42
- @password_manager ||= PasswordManager.new
43
- end
44
-
45
- def phrase
46
- @module.configuration.app[:password]
47
- end
48
-
49
- def internal_value_to_s(value)
50
- if value.nil?
51
- super
52
- elsif value.empty?
53
- ''.inspect
54
- else
55
- 'REDACTED'
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,122 +0,0 @@
1
- # encoding: UTF-8
2
- module Kafo
3
- class Validator
4
- attr_reader :errors
5
-
6
- def initialize
7
- @errors = []
8
- @logger = KafoConfigure.logger
9
- end
10
-
11
- def validate_absolute_path(args)
12
- args.each do |arg|
13
- unless arg.to_s.start_with?('/')
14
- error "#{arg.inspect} is not an absolute path"
15
- return false
16
- end
17
- end
18
- return true
19
- end
20
-
21
- def validate_array(args)
22
- args.each do |arg|
23
- unless arg.is_a?(Array)
24
- error "#{arg.inspect} is not a valid array"
25
- return false
26
- end
27
- end
28
- return true
29
- end
30
-
31
- def validate_bool(args)
32
- args.each do |arg|
33
- unless arg.is_a?(TrueClass) || arg.is_a?(FalseClass)
34
- error "#{arg.inspect} is not a valid boolean"
35
- return false
36
- end
37
- end
38
- return true
39
- end
40
-
41
- def validate_hash(args)
42
- args.each do |arg|
43
- unless arg.is_a?(Hash)
44
- error "#{arg.inspect} is not a valid hash"
45
- return false
46
- end
47
- end
48
- return true
49
- end
50
-
51
- def validate_integer(args)
52
- value = args[0]
53
- max = args[1]
54
- min = args[2]
55
- int = Integer(value.to_s)
56
- if min && int < min.to_i
57
- error "#{value} must be at least #{min}"
58
- return false
59
- end
60
- if max && int > max.to_i
61
- error "#{value} must be less than #{max}"
62
- return false
63
- end
64
- return true
65
- rescue TypeError, ArgumentError
66
- error "#{value.inspect} is not a valid integer"
67
- return false
68
- end
69
-
70
- # Non-standard validation is from theforeman/foreman_proxy module
71
- def validate_listen_on(args)
72
- valid_values = ['http', 'https', 'both']
73
- args.each do |arg|
74
- unless valid_values.include?(arg)
75
- error "#{arg.inspect} is not a valid value. Valid values are: #{valid_values.join(", ")}"
76
- return false
77
- end
78
- end
79
- return true
80
- end
81
-
82
- def validate_re(args)
83
- value = args[0]
84
- regexes = args[1]
85
- regexes = [regexes] unless regexes.is_a?(Array)
86
- message = args[2] || "#{value.inspect} does not match the accepted inputs: #{regexes.join(", ")}"
87
-
88
- if regexes.any? { |rx| value =~ Regexp.compile(rx) }
89
- return true
90
- else
91
- error message
92
- return false
93
- end
94
- end
95
-
96
- def validate_string(args)
97
- args.each do |arg|
98
- unless arg.is_a?(String)
99
- error "#{arg.inspect} is not a valid string"
100
- return false
101
- end
102
- end
103
- return true
104
- end
105
-
106
- def method_missing(method, *args, &block)
107
- if method.to_s.start_with?('validate_')
108
- @logger.debug "Skipping validation with #{method} as it's not implemented in Kafo"
109
- return true
110
- else
111
- super
112
- end
113
- end
114
-
115
- private
116
-
117
- def error(message)
118
- @errors << message
119
- @logger.error "Validation error: #{message}"
120
- end
121
- end
122
- end
@@ -1,16 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../../../../../../lib/kafo/password_manager')
2
- # Decrypts an encrypted password using $kafo_configure::password
3
- #
4
- # you can use this function in order to place passwords into your config files
5
- # in form of a plain text
6
- module Puppet::Parser::Functions
7
- newfunction(:decrypt, :type => :rvalue) do |args|
8
- encrypted = args[0]
9
- if encrypted =~ /\A\$1\$/
10
- PasswordManager.new.aes_decrypt(encrypted[3..-1], lookupvar('::kafo_configure::password'))
11
- else
12
- raise Puppet::ParseError, 'wrong format of encrypted string, should start with $1$'
13
- end
14
- end
15
- end
16
-