Class: PuppetLibrary::Forge::Directory

Inherits:
Abstract show all
Defined in:
lib/puppet_library/forge/directory.rb

Overview

A forge that serves modules from a directory on disk.

Note:

  • The modules must be packaged in .tar.gz format

  • The modules must be named in the format author-modulename-version.tar.gz

  • The modules must contain a metadata.json file

That is, the format must be the same as what is produced by puppet module build

Usage:

forge = PuppetLibrary::Forge::Directory.configure do
    # The path to serve the modules from
    path "/var/modules/cache"
end

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Abstract

#collect_dependencies_versions, #get_module_buffer, #get_module_metadata, #get_module_metadata_with_dependencies, #retrieve_all_metadata, #retrieve_metadata, #search_modules

Methods inherited from Forge

#clear_cache, #prime

Methods included from Util::Logging

#debug, #info, #logger, #logs, #warn

Constructor Details

#initialize(module_dir) ⇒ Directory

  • :module_dir - The directory containing the packaged modules.



53
54
55
56
# File 'lib/puppet_library/forge/directory.rb', line 53

def initialize(module_dir)
    super(self)
    @module_dir = module_dir
end

Class Method Details

.configure(&block) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/puppet_library/forge/directory.rb', line 40

def self.configure(&block)
    config_api = PuppetLibrary::Util::ConfigApi.for(Directory) do
        required :path, "path to a directory to serve modules from" do |dir|
            Dir.new(File.expand_path(dir)).tap do |dir|
                raise "Module directory '#{dir}' isn't readable" unless File.executable? dir
            end
        end
    end
    config = config_api.configure(&block)
    Directory.new(config.get_path)
end

Instance Method Details

#get_all_metadataObject



68
69
70
# File 'lib/puppet_library/forge/directory.rb', line 68

def 
    ("*", "*")
end

#get_metadata(author, module_name) ⇒ Object



72
73
74
75
# File 'lib/puppet_library/forge/directory.rb', line 72

def (author, module_name)
    archives = Dir["#{@module_dir.path}/**/#{author}-#{module_name}-*.tar.gz"]
    archives.map {|path| (path) }.compact
end

#get_module(author, name, version) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/puppet_library/forge/directory.rb', line 58

def get_module(author, name, version)
    file_name = "#{author}-#{name}-#{version}.tar.gz"
    path = File.join(File.expand_path(@module_dir.path), file_name)
    if File.exist? path
        File.open(path, 'r')
    else
        nil
    end
end