Module: Puppet::ModuleTool Private
- Extended by:
- Util::Colors
- Defined in:
- lib/puppet/module_tool.rb,
lib/puppet/module_tool/errors.rb,
lib/puppet/module_tool/metadata.rb,
lib/puppet/module_tool/checksums.rb,
lib/puppet/module_tool/dependency.rb,
lib/puppet/module_tool/applications.rb,
lib/puppet/module_tool/local_tarball.rb,
lib/puppet/module_tool/install_directory.rb,
lib/puppet/module_tool/installed_modules.rb,
lib/puppet/module_tool/contents_description.rb,
lib/puppet/module_tool/applications/unpacker.rb,
lib/puppet/module_tool/applications/upgrader.rb,
lib/puppet/module_tool/applications/installer.rb,
lib/puppet/module_tool/applications/application.rb,
lib/puppet/module_tool/applications/checksummer.rb,
lib/puppet/module_tool/applications/uninstaller.rb
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Defined Under Namespace
Modules: Applications, Errors, Shared, Tar Classes: Checksums, ContentsDescription, Dependency, InstallDirectory, InstalledModules, LocalTarball, Metadata
Constant Summary collapse
- ARTIFACTS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Directory and names that should not be checksummed.
['pkg', /^\./, /^~/, /^#/, 'coverage', 'checksums.json', 'REVISION']
- FULL_MODULE_NAME_PATTERN =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
%r{\A([^-/|.]+)[-|/](.+)\z}
- REPOSITORY_URL =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Constants included from Util::Colors
Util::Colors::BG_BLUE, Util::Colors::BG_CYAN, Util::Colors::BG_GREEN, Util::Colors::BG_HBLUE, Util::Colors::BG_HCYAN, Util::Colors::BG_HGREEN, Util::Colors::BG_HMAGENTA, Util::Colors::BG_HRED, Util::Colors::BG_HWHITE, Util::Colors::BG_HYELLOW, Util::Colors::BG_MAGENTA, Util::Colors::BG_RED, Util::Colors::BG_WHITE, Util::Colors::BG_YELLOW, Util::Colors::BLACK, Util::Colors::BLUE, Util::Colors::CYAN, Util::Colors::Colormap, Util::Colors::GREEN, Util::Colors::HBLACK, Util::Colors::HBLUE, Util::Colors::HCYAN, Util::Colors::HGREEN, Util::Colors::HMAGENTA, Util::Colors::HRED, Util::Colors::HWHITE, Util::Colors::HYELLOW, Util::Colors::MAGENTA, Util::Colors::RED, Util::Colors::RESET, Util::Colors::WHITE, Util::Colors::YELLOW
Class Method Summary collapse
-
.artifact?(path) ⇒ Boolean
private
Is this a directory that shouldn’t be checksummed?.
- .build_tree(mods, dir) ⇒ Object private
-
.environment_from_options(options) ⇒ Puppet::Node::Environment
private
Given a hash of options, we should discover or create a Node::Environment instance that reflects the provided options.
-
.find_module_root(path) ⇒ Pathname?
private
Find the module root when given a path by checking each directory up from its current location until it finds one that satisfies is_module_root?.
-
.format_tree(nodes, level = 0) ⇒ Object
private
Builds a formatted tree from a list of node hashes containing
:text
and:dependencies
keys. -
.is_module_root?(path) ⇒ Boolean
private
Analyse path to see if it is a module root directory by detecting a file named ‘metadata.json’.
-
.parse_module_dependency(where, dep) ⇒ Array(String, SemanticPuppet::VersionRange, String)
private
Handles parsing of module dependency expressions into proper SemanticPuppet::VersionRanges, including reasonable error handling.
-
.set_option_defaults(options) ⇒ Object
private
modifying the options parameter.
-
.username_and_modname_from(full_module_name) ⇒ Object
private
Return the
username
andmodname
for a givenfull_module_name
, or raise an ArgumentError if the argument isn’t parseable.
Methods included from Util::Colors
colorize, console_color, html_color
Class Method Details
.artifact?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Is this a directory that shouldn’t be checksummed?
TODO: Should this be part of Checksums? TODO: Rename this method to reflect its purpose? TODO: Shouldn’t this be used when building packages too?
24 25 26 27 28 29 30 31 |
# File 'lib/puppet/module_tool.rb', line 24 def self.artifact?(path) case File.basename(path) when *ARTIFACTS true else false end end |
.build_tree(mods, dir) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/puppet/module_tool.rb', line 93 def self.build_tree(mods, dir) mods.each do |mod| version_string = mod[:version].to_s.sub(/^(?!v)/, 'v') if mod[:action] == :upgrade previous_version = mod[:previous_version].to_s.sub(/^(?!v)/, 'v') version_string = "#{previous_version} -> #{version_string}" end mod[:text] = "#{mod[:name]} (#{colorize(:cyan, version_string)})" mod[:text] += " [#{mod[:path]}]" unless mod[:path].to_s == dir.to_s deps = mod[:dependencies] || [] deps.sort_by! { |a| a[:name] } build_tree(deps, dir) end end |
.environment_from_options(options) ⇒ Puppet::Node::Environment
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Given a hash of options, we should discover or create a Node::Environment instance that reflects the provided options.
Generally speaking, the ‘:modulepath` parameter should supersede all others, the `:environment` parameter should follow after that, and we should default to Puppet’s current environment.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/puppet/module_tool.rb', line 147 def self.() if [:modulepath] path = [:modulepath].split(File::PATH_SEPARATOR) Puppet::Node::Environment.create(:anonymous, path, '') elsif [:environment].is_a?(Puppet::Node::Environment) [:environment] elsif [:environment] # This use of looking up an environment is correct since it honours # a request to get a particular environment via environment name. Puppet.lookup(:environments).get!([:environment]) else Puppet.lookup(:current_environment) end end |
.find_module_root(path) ⇒ Pathname?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Find the module root when given a path by checking each directory up from its current location until it finds one that satisfies is_module_root?
50 51 52 53 54 55 56 57 58 |
# File 'lib/puppet/module_tool.rb', line 50 def self.find_module_root(path) path = Pathname.new(path) if path.instance_of?(String) path..ascend do |p| return p if is_module_root?(p) end nil end |
.format_tree(nodes, level = 0) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Builds a formatted tree from a list of node hashes containing :text
and :dependencies
keys.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/puppet/module_tool.rb', line 73 def self.format_tree(nodes, level = 0) str = ''.dup nodes.each_with_index do |node, i| last_node = nodes.length - 1 == i deps = node[:dependencies] || [] str << (indent = " " * level) str << (last_node ? "└" : "├") str << "─" str << (deps.empty? ? "─" : "┬") str << " #{node[:text]}\n" branch = format_tree(deps, level + 1) branch.gsub!(/^#{indent} /, indent + '│') unless last_node str << branch end str end |
.is_module_root?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Analyse path to see if it is a module root directory by detecting a file named ‘metadata.json’
65 66 67 68 69 |
# File 'lib/puppet/module_tool.rb', line 65 def self.is_module_root?(path) path = Pathname.new(path) if path.instance_of?(String) FileTest.file?(path + 'metadata.json') end |
.parse_module_dependency(where, dep) ⇒ Array(String, SemanticPuppet::VersionRange, String)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Handles parsing of module dependency expressions into proper SemanticPuppet::VersionRanges, including reasonable error handling.
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/puppet/module_tool.rb', line 171 def self.parse_module_dependency(where, dep) dep_name = dep['name'].tr('/', '-') range = dep['version_requirement'] || '>= 0.0.0' begin parsed_range = Module.parse_range(range) rescue ArgumentError => e Puppet.debug "Error in #{where} parsing dependency #{dep_name} (#{e.}); using empty range." parsed_range = SemanticPuppet::VersionRange::EMPTY_RANGE end [dep_name, parsed_range, range] end |
.set_option_defaults(options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Validate the above note…
Unfortunately the whole point of this method is the side effect of
modifying the options parameter. This same hash is referenced both when_invoked and when_rendering. For this reason, we are not returning a duplicate. An :environment_instance and a :target_dir are added/updated in the options parameter.
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/puppet/module_tool.rb', line 125 def self.set_option_defaults() current_environment = () modulepath = [[:target_dir]] + current_environment.full_modulepath face_environment = current_environment.override_with(:modulepath => modulepath.compact) [:environment_instance] = face_environment # Note: environment will have expanded the path [:target_dir] = face_environment.full_modulepath.first end |
.username_and_modname_from(full_module_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return the username
and modname
for a given full_module_name
, or raise an ArgumentError if the argument isn’t parseable.
35 36 37 38 39 40 41 42 |
# File 'lib/puppet/module_tool.rb', line 35 def self.username_and_modname_from(full_module_name) matcher = full_module_name.match(FULL_MODULE_NAME_PATTERN) if matcher matcher.captures else raise ArgumentError, _("Not a valid full name: %{full_module_name}") % { full_module_name: full_module_name } end end |