Skip to content

Commit 5f0f3d8

Browse files
logicmindskenyon
authored andcommitted
Fix #51 - Add support for puppetfile resolver
* This adds experimental support for the puppetfile resolver. Since the resolver is better, faster, stronger it might be useful to use this library in the future. A resolve task task has been added but it is not clear what that yet provides.
1 parent eee5054 commit 5f0f3d8

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

lib/ra10ke.rb

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'ra10ke/version'
44
require 'ra10ke/solve'
55
require 'ra10ke/syntax'
6+
require 'ra10ke/resolver'
67
require 'ra10ke/dependencies'
78
require 'ra10ke/deprecation'
89
require 'ra10ke/duplicates'
@@ -20,6 +21,7 @@ class RakeTask < ::Rake::TaskLib
2021
include Ra10ke::Duplicates
2122
include Ra10ke::Install
2223
include Ra10ke::Validate
24+
include Ra10ke::Resolver
2325

2426
attr_accessor :basedir, :moduledir, :puppetfile_path, :puppetfile_name, :force, :purge
2527

@@ -42,6 +44,7 @@ def initialize(*args)
4244
define_task_install(*args)
4345
define_task_validate(*args)
4446
define_task_print_git_conversion(*args)
47+
define_task_resolver(*args)
4548
end
4649
end
4750

lib/ra10ke/resolver.rb

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
require 'puppetfile-resolver'
2+
require 'puppetfile-resolver/puppetfile/parser/r10k_eval'
3+
4+
module Ra10ke
5+
module Resolver
6+
def define_task_resolver(*args)
7+
desc 'Run the puppetfile Resolver'
8+
task :resolver do
9+
resolver = Ra10ke::Resolver::Instance.new(get_puppetfile.puppetfile_path)
10+
result = resolver.resolve
11+
# Output resolution validation errors
12+
result.validation_errors.each { |err| puts "Resolution Validation Error: #{err}\n"}
13+
end
14+
end
15+
16+
class Instance
17+
attr_reader :puppetfile
18+
19+
def initialize(puppetfile_path = File.expand_path(Dir.pwd))
20+
21+
# Parse the Puppetfile into an object model
22+
content = File.open(puppetfile_path, 'rb') { |f| f.read }
23+
24+
@puppetfile = ::PuppetfileResolver::Puppetfile::Parser::R10KEval.parse(content)
25+
26+
# Make sure the Puppetfile is valid
27+
unless puppetfile.valid?
28+
puts 'Puppetfile is not valid'
29+
puppetfile.validation_errors.each { |err| puts err }
30+
exit 1
31+
end
32+
end
33+
34+
def resolve
35+
# Create the resolver
36+
# - Use the document we just parsed (puppetfile)
37+
# - Don't restrict by Puppet version (nil)
38+
resolver = ::PuppetfileResolver::Resolver.new(puppetfile, nil)
39+
40+
# Configure the resolver
41+
cache = nil # Use the default inmemory cache
42+
ui = nil # Don't output any information
43+
module_paths = [] # List of paths to search for modules on the local filesystem
44+
allow_missing_modules = true # Allow missing dependencies to be resolved
45+
opts = { cache: cache, ui: ui, module_paths: module_paths, allow_missing_modules: allow_missing_modules }
46+
47+
# Resolve
48+
result = resolver.resolve(opts)
49+
end
50+
end
51+
end
52+
end

ra10ke.gemspec

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
1818

1919
spec.add_dependency 'git', '~> 1.18'
2020
spec.add_dependency 'puppet_forge', '~> 5.0', '>= 5.0.1'
21+
spec.add_dependency 'puppetfile-resolver'
2122
spec.add_dependency 'r10k', '>= 2.6.5', '< 5'
2223
spec.add_dependency 'rake', '~> 13.0', '>= 13.0.6'
2324
spec.add_dependency 'semverse', '>= 2.0', '< 4'

spec/ra10ke/resolver_spec.rb

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
require 'ra10ke/resolver'
5+
RSpec::Mocks.configuration.allow_message_expectations_on_nil = true
6+
7+
RSpec.describe 'Ra10ke::Resolver::Instance' do
8+
include Ra10ke::Resolver
9+
let(:instance) do
10+
Ra10ke::Resolver::Instance.new(puppetfile)
11+
end
12+
13+
let(:puppetfile) do
14+
File.join(fixtures_dir, 'Puppetfile')
15+
end
16+
17+
it 'resolves the puppetfile' do
18+
expect(instance.resolve).to be nil
19+
end
20+
end

0 commit comments

Comments
 (0)