puppet-function-updater 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +51 -7
- data/bin/puppet_function_updater +1 -1
- data/lib/pfu/generator.rb +13 -2
- data/lib/pfu/parser.rb +1 -1
- data/lib/pfu/version.rb +1 -1
- data/templates/function_spec.erb +41 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5913312054d42bd2b3bfdcb744600991f0b23aa09a4763153f48f0cddb2f355
|
4
|
+
data.tar.gz: 8734defb6ff4b41c8e99dcd2baad098aa58a3534d2ed4bb61ba244535d405a63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4ddd547257eca3091c81ca70f85a8ce81d371f2f409f335079cb26fc3fe263b2698cf0fe1c71d2a688662f031127b1212a27d169e9d1c6fe9054d9a3b02d83c
|
7
|
+
data.tar.gz: 3b987e1bce14d1b7d4f74c459911975cadd43816b38da43e6ce70d64da5f976f98acb580f91e8276ebcb549f29c81ca807631618ce6f8558322c5f067dbaf764
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -17,8 +17,52 @@ $ gem install puppet-function-updater
|
|
17
17
|
|
18
18
|
## Usage
|
19
19
|
|
20
|
-
Run the command
|
21
|
-
inspect all the generated functions for suitability.
|
20
|
+
Run the command puppet_function_updater in the root of a Puppet module, then
|
21
|
+
inspect all the generated functions for suitability when it’s done. If you pass
|
22
|
+
the --clean argument it will **delete the legacy function file from disk** after
|
23
|
+
validating that the new function works.
|
24
|
+
|
25
|
+
You might see some warnings. Many can be ignored. For example, the following
|
26
|
+
warning just means that the function attempted to require a library file outside
|
27
|
+
of the the function block. You might evaluate whether you could remove the call
|
28
|
+
or move it inside the function declaration so it's lazily loaded.
|
29
|
+
|
30
|
+
```
|
31
|
+
INFO: Creating lib/puppet/functions/stdlib/deep_merge.rb
|
32
|
+
WARN: The function attempted to load libraries outside the function block.
|
33
|
+
WARN: cannot load such file -- puppet/parser/functions (ignored)
|
34
|
+
```
|
35
|
+
|
36
|
+
On the other hand, errors like below indicate that the function code doesn't parse
|
37
|
+
properly after porting. It's generally an issue with the original source code.
|
38
|
+
|
39
|
+
```
|
40
|
+
INFO: Creating lib/puppet/functions/stdlib/validate_x509_rsa_key_pair.rb
|
41
|
+
ERROR: Oh crap; the generated function isn't valid Ruby code!
|
42
|
+
ERROR: <compiled>:47: dynamic constant assignment
|
43
|
+
NUM_ARGS = 2 unless defined? NUM_ARGS
|
44
|
+
^
|
45
|
+
```
|
46
|
+
|
47
|
+
### After porting
|
48
|
+
|
49
|
+
Two files will be generated, the function file and the spec test for that function.
|
50
|
+
|
51
|
+
* `lib/puppet/functions/<namespace>/<function>.rb`
|
52
|
+
* `spec/functions/<namespace>_<function>_spec.rb`
|
53
|
+
|
54
|
+
After porting, you should inspect the generated files. At a minimum, you'll want
|
55
|
+
to clean up the documentation comments, but I'd also suggest reading a bit on the
|
56
|
+
new function API and writing better dispatches to provide proper type checking
|
57
|
+
and reduce the amount of manual argument validation your function must do.
|
58
|
+
|
59
|
+
The test simply validates that the function compiles and defines a function
|
60
|
+
properly, so you'll also want to write more test cases. If your legacy function
|
61
|
+
has unit tests, you might consider porting them to the new function, following
|
62
|
+
the examples provided as comments.
|
63
|
+
|
64
|
+
See a [tutorial](https://binford2k.com/2019/11/27/automagic-function-port/) on its usage on my blog.
|
65
|
+
|
22
66
|
|
23
67
|
### Example:
|
24
68
|
|
@@ -42,7 +86,7 @@ INFO: Creating lib/puppet/functions/stdlib/concat.rb
|
|
42
86
|
INFO: Creating lib/puppet/functions/stdlib/convert_base.rb
|
43
87
|
INFO: Creating lib/puppet/functions/stdlib/count.rb
|
44
88
|
INFO: Creating lib/puppet/functions/stdlib/deep_merge.rb
|
45
|
-
|
89
|
+
WARN: The function attempted to load libraries outside the function block.
|
46
90
|
WARN: cannot load such file -- puppet/parser/functions (ignored)
|
47
91
|
INFO: Creating lib/puppet/functions/stdlib/defined_with_params.rb
|
48
92
|
INFO: Creating lib/puppet/functions/stdlib/delete.rb
|
@@ -60,10 +104,10 @@ INFO: Creating lib/puppet/functions/stdlib/downcase.rb
|
|
60
104
|
INFO: Creating lib/puppet/functions/stdlib/empty.rb
|
61
105
|
INFO: Creating lib/puppet/functions/stdlib/enclose_ipv6.rb
|
62
106
|
INFO: Creating lib/puppet/functions/stdlib/ensure_packages.rb
|
63
|
-
|
107
|
+
WARN: The function attempted to load libraries outside the function block.
|
64
108
|
WARN: cannot load such file -- puppet/parser/functions (ignored)
|
65
109
|
INFO: Creating lib/puppet/functions/stdlib/ensure_resource.rb
|
66
|
-
|
110
|
+
WARN: The function attempted to load libraries outside the function block.
|
67
111
|
WARN: cannot load such file -- puppet/parser/functions (ignored)
|
68
112
|
INFO: Creating lib/puppet/functions/stdlib/ensure_resources.rb
|
69
113
|
INFO: Creating lib/puppet/functions/stdlib/flatten.rb
|
@@ -72,7 +116,7 @@ INFO: Creating lib/puppet/functions/stdlib/fqdn_rand_string.rb
|
|
72
116
|
INFO: Creating lib/puppet/functions/stdlib/fqdn_rotate.rb
|
73
117
|
INFO: Creating lib/puppet/functions/stdlib/fqdn_uuid.rb
|
74
118
|
INFO: Creating lib/puppet/functions/stdlib/get_module_path.rb
|
75
|
-
|
119
|
+
WARN: The function attempted to load libraries outside the function block.
|
76
120
|
WARN: cannot load such file -- puppet/parser/functions (ignored)
|
77
121
|
INFO: Creating lib/puppet/functions/stdlib/getparam.rb
|
78
122
|
INFO: Creating lib/puppet/functions/stdlib/getvar.rb
|
@@ -153,7 +197,7 @@ INFO: Creating lib/puppet/functions/stdlib/validate_absolute_path.rb
|
|
153
197
|
INFO: Creating lib/puppet/functions/stdlib/validate_array.rb
|
154
198
|
INFO: Creating lib/puppet/functions/stdlib/validate_augeas.rb
|
155
199
|
INFO: Creating lib/puppet/functions/stdlib/validate_bool.rb
|
156
|
-
|
200
|
+
WARN: The function attempted to load libraries outside the function block.
|
157
201
|
WARN: cannot load such file -- puppet/util/execution (ignored)
|
158
202
|
INFO: Creating lib/puppet/functions/stdlib/validate_cmd.rb
|
159
203
|
INFO: Creating lib/puppet/functions/stdlib/validate_domain_name.rb
|
data/bin/puppet_function_updater
CHANGED
data/lib/pfu/generator.rb
CHANGED
@@ -4,8 +4,11 @@ require 'fileutils'
|
|
4
4
|
class Pfu::Generator
|
5
5
|
def self.write(opts)
|
6
6
|
newpath = "lib/puppet/functions/#{opts[:namespace]}/#{opts[:name]}.rb"
|
7
|
-
|
8
|
-
|
7
|
+
specpath = "spec/functions/#{opts[:namespace]}_#{opts[:name]}_spec.rb"
|
8
|
+
|
9
|
+
[newpath, specpath].each do |path|
|
10
|
+
next unless File.exist?(path)
|
11
|
+
$logger.error "Cowardly refusing to overwrite #{path}"
|
9
12
|
return
|
10
13
|
end
|
11
14
|
|
@@ -19,6 +22,9 @@ class Pfu::Generator
|
|
19
22
|
template = File.join(File.dirname(__FILE__), '..', '..', 'templates', 'function.erb')
|
20
23
|
contents = ERB.new(File.read(template), nil, '-').result(binding)
|
21
24
|
|
25
|
+
template = File.join(File.dirname(__FILE__), '..', '..', 'templates', 'function_spec.erb')
|
26
|
+
specfile = ERB.new(File.read(template), nil, '-').result(binding)
|
27
|
+
|
22
28
|
$logger.info "Creating #{newpath}"
|
23
29
|
$logger.debug "Function contents:\n#{contents}"
|
24
30
|
|
@@ -26,8 +32,13 @@ class Pfu::Generator
|
|
26
32
|
# syntax check the code before writing it
|
27
33
|
# TODO: validate that it actually creates a puppet function
|
28
34
|
RubyVM::InstructionSequence.compile(contents)
|
35
|
+
|
29
36
|
FileUtils.mkdir_p("lib/puppet/functions/#{opts[:namespace]}")
|
30
37
|
File.write(newpath, contents)
|
38
|
+
|
39
|
+
FileUtils.mkdir_p("spec/functions")
|
40
|
+
File.write(specpath, specfile)
|
41
|
+
|
31
42
|
return true
|
32
43
|
rescue Exception => e
|
33
44
|
$logger.error "Oh crap; the generated function isn't valid Ruby code!"
|
data/lib/pfu/parser.rb
CHANGED
@@ -17,7 +17,7 @@ module Kernel
|
|
17
17
|
def require(*a, &b)
|
18
18
|
original_require(*a, &b)
|
19
19
|
rescue LoadError => e
|
20
|
-
$logger.
|
20
|
+
$logger.warn "The function attempted to load libraries outside the function block."
|
21
21
|
$logger.warn "#{e.message} (ignored)"
|
22
22
|
end
|
23
23
|
end
|
data/lib/pfu/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe '<%= opts[:fullname] %>' do
|
4
|
+
# without knowing details about the implementation, this is the only test
|
5
|
+
# case that we can autogenerate. You should add more examples below!
|
6
|
+
it { is_expected.not_to eq(nil) }
|
7
|
+
|
8
|
+
#################################
|
9
|
+
# Below are some example test cases. You may uncomment and modify them to match
|
10
|
+
# your needs. Notice that they all expect the base error class of `StandardError`.
|
11
|
+
# This is because the autogenerated function uses an untyped array for parameters
|
12
|
+
# and relies on your implementation to do the validation. As you convert your
|
13
|
+
# function to proper dispatches and typed signatures, you should change the
|
14
|
+
# expected error of the argument validation examples to `ArgumentError`.
|
15
|
+
#
|
16
|
+
# Other error types you might encounter include
|
17
|
+
#
|
18
|
+
# * StandardError
|
19
|
+
# * ArgumentError
|
20
|
+
# * Puppet::ParseError
|
21
|
+
#
|
22
|
+
# Read more about writing function unit tests at https://rspec-puppet.com/documentation/functions/
|
23
|
+
#
|
24
|
+
# it 'raises an error if called with no argument' do
|
25
|
+
# is_expected.to run.with_params.and_raise_error(StandardError)
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# it 'raises an error if there is more than 1 arguments' do
|
29
|
+
# is_expected.to run.with_params({ 'foo' => 1 }, 'bar' => 2).and_raise_error(StandardError)
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# it 'raises an error if argument is not the proper type' do
|
33
|
+
# is_expected.to run.with_params('foo').and_raise_error(StandardError)
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# it 'returns the proper output' do
|
37
|
+
# is_expected.to run.with_params(123).and_return('the expected output')
|
38
|
+
# end
|
39
|
+
#################################
|
40
|
+
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-function-updater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Ford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Run this command with a space separated list of either function file paths, or
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- lib/puppet/functions/testing/module.rb
|
34
34
|
- lib/puppet/functions/testing/noopts.rb
|
35
35
|
- templates/function.erb
|
36
|
+
- templates/function_spec.erb
|
36
37
|
homepage:
|
37
38
|
licenses:
|
38
39
|
- Apache-2.0
|