puppetfiler 0.1.5 → 0.2.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 +4 -4
- data/CHANGELOG.rst +18 -0
- data/README.rst +27 -14
- data/data/empty_puppetfile.rb +1 -0
- data/lib/puppetfiler/cli.rb +42 -47
- data/lib/puppetfiler/fixture.rb +61 -0
- data/lib/puppetfiler/metadata.rb +1 -1
- data/lib/puppetfiler/mod.rb +2 -2
- data/lib/puppetfiler/puppetfile.rb +1 -11
- data/lib/puppetfiler/rake_tasks.rb +13 -0
- data/lib/puppetfiler/version.rb +1 -1
- data/lib/puppetfiler.rb +45 -44
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00dccc7d68143e696a7314713198851263fee00e
|
4
|
+
data.tar.gz: 76e038e1307597430b1cfe2f9ef75bf6b0a4f49e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e34855099378cabd5c06c897b228beaef766c695dd6daaf3502c08732715b8e49db85217a4f1db7baf88fe1422a53fac75bac44eb86f1df7d72a2f613f4bab12
|
7
|
+
data.tar.gz: 806f538051bf95a4d4efcf4f9352f209e0ee5b59fa30638170e10d9a1e695ff1a78062e55691ffb411e757aea17750dcea4657535f8462fb5e04fb45c5484dab
|
data/CHANGELOG.rst
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
v0.2.0
|
2
|
+
------
|
3
|
+
|
4
|
+
Bugfixes
|
5
|
+
~~~~~~~~
|
6
|
+
- ``Puppetfiler::Mod`` now correctly checks for the symbolized member
|
7
|
+
'version_requirement' of metadata.json entries.
|
8
|
+
|
9
|
+
Changes
|
10
|
+
~~~~~~~
|
11
|
+
- ``puppetfiler/rake_task`` adds the rake task ``fixture``, which
|
12
|
+
generates the ``.fixtures.yml`` for both environments and modules.
|
13
|
+
Additionally it is set as a requirement for the task ``spec_prep``
|
14
|
+
from ``puppetlabs_spec_helper``.
|
15
|
+
|
16
|
+
- Puppetfiler now has a single calling convention via the core module
|
17
|
+
and figures the target out if none was passed.
|
18
|
+
|
1
19
|
v0.1.5
|
2
20
|
------
|
3
21
|
|
data/README.rst
CHANGED
@@ -27,8 +27,13 @@ Installation
|
|
27
27
|
Usage
|
28
28
|
=====
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
A puppetfile can be specified via ``-p path/to/pf`` or ``--puppetfile path/to/pf``,
|
31
|
+
a metadata file via ``-m path/to/metadata.json`` or ``--metadata
|
32
|
+
path/to/metadata.json``.
|
33
|
+
|
34
|
+
If neither are specified ``puppetfiler`` will check for a file named
|
35
|
+
``Puppetfile`` in the current working directory first, then for a file
|
36
|
+
named ``metadata.json``.
|
32
37
|
|
33
38
|
check
|
34
39
|
-----
|
@@ -46,8 +51,7 @@ to be queried from the forge.
|
|
46
51
|
|
47
52
|
fixture
|
48
53
|
-------
|
49
|
-
Create puppetlabs_spec_helper_ compatible ``.fixtures.yml
|
50
|
-
Puppetfile.
|
54
|
+
Create puppetlabs_spec_helper_ compatible ``.fixtures.yml``.
|
51
55
|
|
52
56
|
.. code:: sh
|
53
57
|
|
@@ -68,23 +72,32 @@ Puppetfile.
|
|
68
72
|
Gerating .fixture.yml when executing rake tasks
|
69
73
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
70
74
|
|
75
|
+
Without modifying the result:
|
76
|
+
|
77
|
+
.. code:: ruby
|
78
|
+
|
79
|
+
require 'puppetfiler/rake_tasks'
|
80
|
+
|
81
|
+
Which adds the task ``fixture``, which is equivalent to runnning
|
82
|
+
``puppetfiler fixture``.
|
83
|
+
|
84
|
+
With modifying the result:
|
85
|
+
|
71
86
|
.. code:: ruby
|
72
87
|
|
73
88
|
require 'puppetfiler'
|
74
89
|
|
75
90
|
desc 'Generate .fixtures.yml'
|
76
|
-
task :
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
/.*/ => {
|
82
|
-
'flags' => '--module_repository https://inhouse.forge.lan/',
|
83
|
-
},
|
91
|
+
task :fixture do
|
92
|
+
modifier = {
|
93
|
+
'forge_modules' => {
|
94
|
+
/.*/ => {
|
95
|
+
'flags' => '--module_repository https://inhouse.forge.lan/',
|
84
96
|
},
|
85
97
|
},
|
86
|
-
|
87
|
-
|
98
|
+
}
|
99
|
+
|
100
|
+
Puppetfiler.fixture(modifier)
|
88
101
|
end
|
89
102
|
|
90
103
|
task :spec => [:fixtures]
|
@@ -0,0 +1 @@
|
|
1
|
+
moduledir 'external_modules'
|
data/lib/puppetfiler/cli.rb
CHANGED
@@ -3,6 +3,14 @@ require 'yaml'
|
|
3
3
|
require 'puppetfiler/puppetfile'
|
4
4
|
require 'puppetfiler/version'
|
5
5
|
|
6
|
+
module SemanticPuppet
|
7
|
+
class Version < Numeric
|
8
|
+
def length
|
9
|
+
to_s.length
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
module Puppetfiler
|
7
15
|
class CLI < Thor
|
8
16
|
class_option :puppetfile, {
|
@@ -18,70 +26,57 @@ module Puppetfiler
|
|
18
26
|
}
|
19
27
|
|
20
28
|
desc 'check', 'Check forge for newer versions of used forge modules'
|
21
|
-
def check
|
22
|
-
|
29
|
+
def check
|
30
|
+
t = [nil, nil]
|
31
|
+
%i{puppetfile metadata}.each do |m|
|
32
|
+
if not options[m].nil?
|
33
|
+
t = [m, options[m]]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
updates = Puppetfiler.check(*t)
|
37
|
+
|
38
|
+
if updates.empty?
|
39
|
+
return
|
40
|
+
end
|
23
41
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
42
|
+
maxlen_name = 0
|
43
|
+
maxlen_val = 0
|
44
|
+
val_count = 0
|
45
|
+
|
46
|
+
updates.each do |name, hash|
|
47
|
+
maxlen_name = name.length if name.length > maxlen_name
|
48
|
+
hash.each do |k, v|
|
49
|
+
val_count += 1
|
50
|
+
maxlen_val = k.length if k.length > maxlen_val
|
51
|
+
maxlen_val = v.length if v.length > maxlen_val
|
52
|
+
end
|
31
53
|
end
|
32
54
|
|
33
|
-
format = "% -#{
|
55
|
+
format = "% -#{maxlen_name}s " + ( "% -#{maxlen_val}s" * val_count )
|
34
56
|
|
35
|
-
puts sprintf(format, 'module',
|
57
|
+
puts sprintf(format, 'module', *updates.first[1].keys)
|
36
58
|
|
37
|
-
|
38
|
-
|
39
|
-
t.updates.each do |name, hash|
|
40
|
-
puts sprintf(format, name, hash[:current], hash[:newest])
|
59
|
+
updates.each do |name, hash|
|
60
|
+
puts sprintf(format, name, *hash.values)
|
41
61
|
end
|
42
62
|
end
|
43
63
|
|
44
64
|
desc 'fixture', 'Create puppetlabs_spec_helper compatible .fixtures.yml from puppetfile or metadata.json'
|
45
65
|
method_option :stdout, :aliases => '-o'
|
46
|
-
def fixture
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
when :metadata
|
53
|
-
f = Puppetfiler::Metadata.new(File.new(target[:result]))
|
54
|
-
else fail "Unkown type: #{target[:type]}"
|
66
|
+
def fixture
|
67
|
+
t = [nil, nil]
|
68
|
+
%i{puppetfile metadata}.each do |m|
|
69
|
+
if not options[m].nil?
|
70
|
+
t = [m, options[m]]
|
71
|
+
end
|
55
72
|
end
|
56
73
|
|
57
|
-
|
58
|
-
|
59
|
-
if options[:stdout]
|
60
|
-
puts f
|
61
|
-
else
|
62
|
-
File.write('.fixtures.yml', f)
|
63
|
-
end
|
74
|
+
Puppetfiler.fixture(*t, {}, options[:stdout])
|
64
75
|
end
|
65
76
|
|
66
77
|
desc 'version', 'Output version'
|
67
78
|
def version
|
68
79
|
puts "puppetfiler v#{Puppetfiler::VERSION}"
|
69
80
|
end
|
70
|
-
|
71
|
-
private
|
72
|
-
def target(opts)
|
73
|
-
{
|
74
|
-
:puppetfile => 'Puppetfile',
|
75
|
-
:metadata => 'metadata.json',
|
76
|
-
}.each do |sym, str|
|
77
|
-
if opts[sym]
|
78
|
-
return { :result => opts[sym], :type => sym }
|
79
|
-
elsif File.exists?(str)
|
80
|
-
return { :result => str, :type => sym }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
fail 'No Puppetfile or metadata.json found, aborting'
|
85
|
-
end
|
86
81
|
end
|
87
82
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Puppetfiler
|
2
|
+
class Fixture
|
3
|
+
def self.fixture(modules, repos, modifiers = {})
|
4
|
+
fixtures = {}
|
5
|
+
|
6
|
+
%w{forge_modules repositories}.each do |k|
|
7
|
+
modifiers[k] = {} if not modifiers.has_key?(k)
|
8
|
+
end
|
9
|
+
|
10
|
+
modules.each do |name, mod|
|
11
|
+
short = name.split('/')[1]
|
12
|
+
value = {
|
13
|
+
'repo' => name,
|
14
|
+
'ref' => mod.version.to_s,
|
15
|
+
}
|
16
|
+
|
17
|
+
modifiers['forge_modules'].each do |modifier, merger|
|
18
|
+
# TODO use x.match?(y) on ruby 2.4
|
19
|
+
value.merge!(merger) if name =~ /#{modifier}/
|
20
|
+
end
|
21
|
+
|
22
|
+
fixtures['forge_modules'] = {} if not fixtures.has_key?('forge_modules')
|
23
|
+
fixtures['forge_modules'][short] = value
|
24
|
+
end
|
25
|
+
|
26
|
+
repos.each do |name, hash|
|
27
|
+
if hash.has_key?(:ref)
|
28
|
+
content = {
|
29
|
+
'repo' => hash[:uri],
|
30
|
+
'ref' => hash[:ref],
|
31
|
+
}
|
32
|
+
|
33
|
+
modifiers['repositories'].each do |modifier, merger|
|
34
|
+
content.merge!(merger) if name =~ /#{modifier}/
|
35
|
+
end
|
36
|
+
else
|
37
|
+
content = hash[:uri]
|
38
|
+
|
39
|
+
modifiers['repositories'].each do |modifier, merger|
|
40
|
+
if name =~ /#{modifier}/
|
41
|
+
if merger.is_a?(String)
|
42
|
+
content = merger
|
43
|
+
else
|
44
|
+
content = {
|
45
|
+
'repo' => hash[:uri],
|
46
|
+
}
|
47
|
+
|
48
|
+
content.merge!(merger)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
fixtures['repositories'] = {} if not fixtures.has_key?('repositories')
|
55
|
+
fixtures['repositories'][name] = content
|
56
|
+
end
|
57
|
+
|
58
|
+
return { 'fixtures' => fixtures }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/puppetfiler/metadata.rb
CHANGED
data/lib/puppetfiler/mod.rb
CHANGED
@@ -19,7 +19,7 @@ module Puppetfiler
|
|
19
19
|
@forge = PuppetForge::Module.find(@slug)
|
20
20
|
|
21
21
|
@range = nil
|
22
|
-
|
22
|
+
%i{range version_requirement}.each do |v|
|
23
23
|
if args.has_key?(v)
|
24
24
|
if not args[v].is_a?(SemanticPuppet::VersionRange)
|
25
25
|
args[v] = SemanticPuppet::VersionRange.parse(args[v])
|
@@ -30,7 +30,7 @@ module Puppetfiler
|
|
30
30
|
end
|
31
31
|
|
32
32
|
@version = nil
|
33
|
-
|
33
|
+
%i{version}.each do |v|
|
34
34
|
@version = SemanticPuppet::Version.parse(args[v]) if args.has_key?(v)
|
35
35
|
end
|
36
36
|
@version = latest_valid if not @version
|
@@ -5,16 +5,12 @@ module Puppetfiler
|
|
5
5
|
attr :modules
|
6
6
|
attr :repos
|
7
7
|
attr :puppetfile
|
8
|
-
attr :maxlen_name
|
9
8
|
|
10
9
|
def initialize(path = 'Puppetfile')
|
11
10
|
@modules = {}
|
12
11
|
@repos = {}
|
13
12
|
@puppetfile = path
|
14
13
|
|
15
|
-
@maxlen_name = 0
|
16
|
-
@maxlen_ver = 0
|
17
|
-
|
18
14
|
self.evaluate
|
19
15
|
end
|
20
16
|
|
@@ -36,10 +32,6 @@ module Puppetfiler
|
|
36
32
|
end
|
37
33
|
end
|
38
34
|
|
39
|
-
def maxlen_ver
|
40
|
-
[@maxlen_ver, 'current'.length].max
|
41
|
-
end
|
42
|
-
|
43
35
|
def updates
|
44
36
|
updates = {}
|
45
37
|
|
@@ -59,7 +51,7 @@ module Puppetfiler
|
|
59
51
|
end
|
60
52
|
|
61
53
|
def fixture(modifiers = {})
|
62
|
-
Puppetfiler.fixture(@modules, @repos, modifiers)
|
54
|
+
Puppetfiler::Fixture.fixture(@modules, @repos, modifiers)
|
63
55
|
end
|
64
56
|
|
65
57
|
private
|
@@ -75,8 +67,6 @@ module Puppetfiler
|
|
75
67
|
|
76
68
|
@modules[name] = Puppetfiler::Mod.new(:name => name, :version => arg)
|
77
69
|
|
78
|
-
@maxlen_name = name.length if name.length > @maxlen_name
|
79
|
-
@maxlen_ver = arg.length if arg.length > @maxlen_ver
|
80
70
|
else args.is_a?(Hash)
|
81
71
|
|
82
72
|
@repos[name] = {}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc 'Generate .fixtures.yml from metadata.json or Puppetfile'
|
5
|
+
task :fixture do
|
6
|
+
require 'puppetfiler/cli'
|
7
|
+
|
8
|
+
Puppetfiler.fixture
|
9
|
+
end
|
10
|
+
|
11
|
+
if defined?(:PuppetlabsSpec)
|
12
|
+
task :spec_prep => [:fixture]
|
13
|
+
end
|
data/lib/puppetfiler/version.rb
CHANGED
data/lib/puppetfiler.rb
CHANGED
@@ -1,65 +1,66 @@
|
|
1
1
|
require 'puppetfiler/cli'
|
2
|
+
require 'puppetfiler/fixture'
|
2
3
|
require 'puppetfiler/metadata'
|
3
4
|
require 'puppetfiler/mod'
|
4
5
|
require 'puppetfiler/puppetfile'
|
5
6
|
require 'puppetfiler/version'
|
6
7
|
|
7
8
|
module Puppetfiler
|
8
|
-
def self.
|
9
|
-
|
9
|
+
def self.detect(type = nil, target = nil)
|
10
|
+
if (type.nil? && !target.nil?) || (!type.nil? && target.nil?)
|
11
|
+
fail 'Type and target are required to bet both set'
|
12
|
+
elsif !type.nil? && !target.nil?
|
13
|
+
return type, target
|
14
|
+
end
|
10
15
|
|
11
|
-
|
12
|
-
|
16
|
+
{
|
17
|
+
:puppetfile => %w{Puppetfile},
|
18
|
+
:metadata => %w{metadata.json},
|
19
|
+
}.each do |type, targets|
|
20
|
+
targets.each do |target|
|
21
|
+
if File.exists?(target)
|
22
|
+
return type, target
|
23
|
+
end
|
24
|
+
end
|
13
25
|
end
|
14
26
|
|
15
|
-
|
16
|
-
|
17
|
-
value = {
|
18
|
-
'repo' => name,
|
19
|
-
'ref' => mod.version.to_s,
|
20
|
-
}
|
27
|
+
fail 'No valid target found, aborting'
|
28
|
+
end
|
21
29
|
|
22
|
-
|
23
|
-
|
24
|
-
value.merge!(merger) if name =~ /#{modifier}/
|
25
|
-
end
|
30
|
+
def self.check(type = nil, target = nil)
|
31
|
+
type, target = detect(type, target)
|
26
32
|
|
27
|
-
|
28
|
-
|
33
|
+
case type
|
34
|
+
when :puppetfile
|
35
|
+
t = Puppetfiler::Puppetfile.new(target)
|
36
|
+
when :metadata
|
37
|
+
# TODO see below
|
38
|
+
fail 'Checking metadata.json for version range updates is not implemented yet'
|
39
|
+
else fail "Unkown type: #{type}"
|
29
40
|
end
|
30
41
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
'ref' => hash[:ref],
|
36
|
-
}
|
42
|
+
# TODO the updates should be collected asynchronously to
|
43
|
+
# speed up the process
|
44
|
+
return t.updates
|
45
|
+
end
|
37
46
|
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
else
|
42
|
-
content = hash[:uri]
|
47
|
+
def self.fixture(type = nil, target = nil, modifier = {}, stdout = false)
|
48
|
+
type, target = detect(type, target)
|
43
49
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
}
|
50
|
+
case type
|
51
|
+
when :puppetfile
|
52
|
+
f = Puppetfiler::Puppetfile.new(target)
|
53
|
+
when :metadata
|
54
|
+
f = Puppetfiler::Metadata.new(File.new(target))
|
55
|
+
else fail "Unkown type: #{type}"
|
56
|
+
end
|
52
57
|
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
+
f = f.fixture(modifier).to_yaml
|
58
59
|
|
59
|
-
|
60
|
-
|
60
|
+
if stdout
|
61
|
+
puts f
|
62
|
+
else
|
63
|
+
File.write('.fixtures.yml', f)
|
61
64
|
end
|
62
|
-
|
63
|
-
return { 'fixtures' => fixtures }
|
64
65
|
end
|
65
66
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppetfiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nelo-T. Wallus
|
@@ -212,6 +212,7 @@ files:
|
|
212
212
|
- TODO
|
213
213
|
- bin/console
|
214
214
|
- bin/setup
|
215
|
+
- data/empty_puppetfile.rb
|
215
216
|
- data/metadata_emptydeps.json
|
216
217
|
- data/metadata_nodeps.json
|
217
218
|
- data/simple_metadata.json
|
@@ -219,9 +220,11 @@ files:
|
|
219
220
|
- exe/puppetfiler
|
220
221
|
- lib/puppetfiler.rb
|
221
222
|
- lib/puppetfiler/cli.rb
|
223
|
+
- lib/puppetfiler/fixture.rb
|
222
224
|
- lib/puppetfiler/metadata.rb
|
223
225
|
- lib/puppetfiler/mod.rb
|
224
226
|
- lib/puppetfiler/puppetfile.rb
|
227
|
+
- lib/puppetfiler/rake_tasks.rb
|
225
228
|
- lib/puppetfiler/version.rb
|
226
229
|
- puppetfiler.gemspec
|
227
230
|
homepage: https://github.com/ntnn/puppetfiler
|
@@ -244,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
247
|
version: '0'
|
245
248
|
requirements: []
|
246
249
|
rubyforge_project:
|
247
|
-
rubygems_version: 2.
|
250
|
+
rubygems_version: 2.4.5
|
248
251
|
signing_key:
|
249
252
|
specification_version: 4
|
250
253
|
summary: Miscallenous actions on Puppetfiles
|