kafo 2.1.0 → 3.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 +5 -5
- data/README.md +56 -98
- data/Rakefile +12 -1
- data/lib/kafo/color_scheme.rb +3 -3
- data/lib/kafo/configuration.rb +5 -7
- data/lib/kafo/data_types/aliases.rb +0 -10
- data/lib/kafo/data_types/not_undef.rb +2 -0
- data/lib/kafo/data_types/optional.rb +2 -0
- data/lib/kafo/hiera_configurer.rb +50 -22
- data/lib/kafo/hook_context.rb +3 -2
- data/lib/kafo/kafo_configure.rb +9 -8
- data/lib/kafo/logger.rb +2 -2
- data/lib/kafo/param.rb +6 -20
- data/lib/kafo/param_builder.rb +1 -8
- data/lib/kafo/progress_bar.rb +1 -1
- data/lib/kafo/puppet_command.rb +4 -21
- data/lib/kafo/puppet_module.rb +2 -13
- data/lib/kafo/scenario_manager.rb +6 -6
- data/lib/kafo/version.rb +1 -1
- data/modules/kafo_configure/Rakefile +1 -0
- data/modules/kafo_configure/lib/puppet/functions/{dump_lookups.rb → kafo_configure/dump_lookups.rb} +2 -1
- data/modules/kafo_configure/lib/puppet/functions/kafo_configure/dump_variables.rb +13 -0
- data/modules/kafo_configure/lib/puppet/functions/kafo_configure/to_yaml.rb +15 -0
- data/modules/kafo_configure/manifests/dump_values.pp +11 -12
- data/modules/kafo_configure/manifests/init.pp +7 -5
- data/modules/kafo_configure/manifests/puppet_version_semver.pp +1 -1
- data/modules/kafo_configure/metadata.json +15 -0
- data/modules/kafo_configure/spec/classes/dump_values_spec.rb +24 -0
- data/modules/kafo_configure/spec/classes/init_spec.rb +17 -0
- data/modules/kafo_configure/spec/fixtures/hiera/hiera.yaml +7 -0
- data/modules/kafo_configure/spec/fixtures/hiera/test.yaml +4 -0
- data/modules/kafo_configure/spec/fixtures/modules/dummy/manifests/init.pp +5 -0
- data/modules/kafo_configure/spec/fixtures/modules/dummy/manifests/params.pp +3 -0
- data/modules/kafo_configure/spec/functions/dump_lookups_spec.rb +7 -0
- data/modules/kafo_configure/spec/functions/dump_variables_spec.rb +10 -0
- data/modules/kafo_configure/spec/functions/to_yaml_spec.rb +5 -0
- data/modules/kafo_configure/spec/spec_helper.rb +5 -0
- metadata +48 -35
- data/lib/kafo/params/password.rb +0 -60
- data/lib/kafo/validator.rb +0 -122
- data/modules/kafo_configure/lib/puppet/parser/functions/decrypt.rb +0 -16
- data/modules/kafo_configure/lib/puppet/parser/functions/dump_values.rb +0 -13
- data/modules/kafo_configure/lib/puppet/parser/functions/foreman_to_yaml.rb +0 -13
- data/modules/kafo_configure/lib/puppet/parser/functions/load_kafo_password.rb +0 -13
- data/modules/kafo_configure/manifests/puppet_version_versioncmp.pp +0 -9
@@ -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
|
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:
|
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:
|
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:
|
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:
|
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: '
|
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: '
|
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
|
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
|
74
|
+
version: '0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
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.
|
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.
|
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:
|
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/
|
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/
|
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
|
-
-
|
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:
|
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
|
312
|
+
rubygems_version: 2.7.6
|
299
313
|
signing_key:
|
300
314
|
specification_version: 4
|
301
|
-
summary:
|
302
|
-
to create powerful installer
|
315
|
+
summary: A gem for making installations based on puppet user friendly
|
303
316
|
test_files: []
|
data/lib/kafo/params/password.rb
DELETED
@@ -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
|
data/lib/kafo/validator.rb
DELETED
@@ -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
|
-
|