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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e2e5783e88c6066b2e029741e8246192c59216f
4
- data.tar.gz: c6a19c79436262c91b7d263205de583b5eb5484b
3
+ metadata.gz: 00dccc7d68143e696a7314713198851263fee00e
4
+ data.tar.gz: 76e038e1307597430b1cfe2f9ef75bf6b0a4f49e
5
5
  SHA512:
6
- metadata.gz: 263b769794f7d8aadff453d04d11a92ab9eaeb7fb1a461fb9d64d83ddd8a8a4b326318adfd75ac8473b1e24279a2e902d19543e257002307702633beacfde14d
7
- data.tar.gz: 49d3855d4009093d043fcdc74e7b3fe1a34f08b0450cd0e26d214db327e2690a7c7bca29006289a3c944d9924ed259d8a1ab52b1e23d76d9e51cc29225be164d
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
- If no Puppetfile has been specified puppetfiler uses the Puppetfile in
31
- the current directory.
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`` from
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 :fixtures do
77
- pf = Puppetfiler::Puppetfile.new('Puppetfile')
78
- fixtures = pf.fixture(
79
- {
80
- 'forge_modules' => {
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
- File.write('.fixtures.yml', fixtures.to_yaml)
98
+ }
99
+
100
+ Puppetfiler.fixture(modifier)
88
101
  end
89
102
 
90
103
  task :spec => [:fixtures]
@@ -0,0 +1 @@
1
+ moduledir 'external_modules'
@@ -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
- target = target(options)
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
- case target[:type]
25
- when :puppetfile
26
- t = Puppetfiler::Puppetfile.new(target[:result])
27
- when :metadata
28
- # TODO see below
29
- fail 'Checking metadata.json for version range updates is not implemented yet'
30
- else fail "Unkown type: #{target[:type]}"
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 = "% -#{t.maxlen_name}s % -#{t.maxlen_ver}s %s"
55
+ format = "% -#{maxlen_name}s " + ( "% -#{maxlen_val}s" * val_count )
34
56
 
35
- puts sprintf(format, 'module', 'current', 'newest')
57
+ puts sprintf(format, 'module', *updates.first[1].keys)
36
58
 
37
- # TODO the updates should be collected asynchronously to
38
- # speed up the process
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
- target = target(options)
48
-
49
- case target[:type]
50
- when :puppetfile
51
- f = Puppetfiler::Puppetfile.new(target[:result])
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
- f = f.fixture.to_yaml
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
@@ -13,7 +13,7 @@ module Puppetfiler
13
13
  end
14
14
 
15
15
  def fixture(modifiers = {})
16
- Puppetfiler.fixture(@dependencies, {}, modifiers)
16
+ Puppetfiler::Fixture.fixture(@dependencies, {}, modifiers)
17
17
  end
18
18
 
19
19
  def eql?(other)
@@ -19,7 +19,7 @@ module Puppetfiler
19
19
  @forge = PuppetForge::Module.find(@slug)
20
20
 
21
21
  @range = nil
22
- [:range, 'range', 'version_requirement'].each do |v|
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
- [:version, 'version'].each do |v|
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
@@ -1,3 +1,3 @@
1
1
  module Puppetfiler
2
- VERSION = '0.1.5'
2
+ VERSION = '0.2.0'
3
3
  end
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.fixture(modules, repos, modifiers = {})
9
- fixtures = {}
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
- %w{forge_modules repositories}.each do |k|
12
- modifiers[k] = {} if not modifiers.has_key?(k)
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
- modules.each do |name, mod|
16
- short = name.split('/')[1]
17
- value = {
18
- 'repo' => name,
19
- 'ref' => mod.version.to_s,
20
- }
27
+ fail 'No valid target found, aborting'
28
+ end
21
29
 
22
- modifiers['forge_modules'].each do |modifier, merger|
23
- # TODO use x.match?(y) on ruby 2.4
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
- fixtures['forge_modules'] = {} if not fixtures.has_key?('forge_modules')
28
- fixtures['forge_modules'][short] = value
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
- repos.each do |name, hash|
32
- if hash.has_key?(:ref)
33
- content = {
34
- 'repo' => hash[:uri],
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
- modifiers['repositories'].each do |modifier, merger|
39
- content.merge!(merger) if name =~ /#{modifier}/
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
- modifiers['repositories'].each do |modifier, merger|
45
- if name =~ /#{modifier}/
46
- if merger.is_a?(String)
47
- content = merger
48
- else
49
- content = {
50
- 'repo' => hash[:uri],
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
- content.merge!(merger)
54
- end
55
- end
56
- end
57
- end
58
+ f = f.fixture(modifier).to_yaml
58
59
 
59
- fixtures['repositories'] = {} if not fixtures.has_key?('repositories')
60
- fixtures['repositories'][name] = content
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.1.5
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.6.10
250
+ rubygems_version: 2.4.5
248
251
  signing_key:
249
252
  specification_version: 4
250
253
  summary: Miscallenous actions on Puppetfiles