class Kafo::PuppetModule

Constants

PRIMARY_GROUP_NAME

Attributes

class_name[R]
configuration[R]
dir_name[R]
groups[R]
identifier[R]
manifest_name[R]
manifest_path[R]
name[R]
params[R]
params_class_name[R]
params_path[R]
raw_data[R]

Public Class Methods

find_parser() click to toggle source
# File lib/kafo/puppet_module.rb, line 13
def self.find_parser
  @parser ||= begin
    logger = KafoConfigure.logger
    parser = KafoParsers::Parsers.find_available(:logger => logger)
    if parser
      logger.debug "Using Puppet module parser #{parser}"
      parser
    else
      logger.debug "No available Puppet module parser found"
      :none  # prevent continually re-checking
    end
  end
end
new(identifier, parser = self.class.find_parser, configuration = KafoConfigure.config) click to toggle source
# File lib/kafo/puppet_module.rb, line 27
def initialize(identifier, parser = self.class.find_parser, configuration = KafoConfigure.config)
  @identifier        = identifier
  @configuration     = configuration
  @name              = get_name
  @dir_name          = get_dir_name
  @manifest_name     = get_manifest_name
  @class_name        = get_class_name
  @params            = []
  if @configuration.module_dirs.count == 1
    module_dir       = @configuration.module_dirs.first
  else
    module_dir         = @configuration.module_dirs.find { |dir| File.exists?(File.join(dir, module_manifest_path)) } ||
      warn("Manifest #{module_manifest_path} was not found in #{@configuration.module_dirs.join(', ')}")
  end
  @manifest_path     = File.join(module_dir, module_manifest_path)
  @parser            = parser
  @parser_cache      = @configuration.parser_cache
  @logger            = KafoConfigure.logger
  @groups            = {}
  @params_path       = get_params_path
  @params_class_name = get_params_class_name
  @raw_data          = nil
  @enabled           = nil
end

Public Instance Methods

<=>(o) click to toggle source
# File lib/kafo/puppet_module.rb, line 98
def <=> o
  @configuration.app[:low_priority_modules].each do |module_name|
    return 1 if self.name.include?(module_name) && !o.name.include?(module_name)
    return -1 if !self.name.include?(module_name) && o.name.include?(module_name)
    if self.name.include?(module_name) && o.name.include?(module_name)
      return self.name.sub(/.*#{module_name}/, '') <=> o.name.sub(/.*#{module_name}/, '')
    end
  end

  self.name <=> o.name
end
disable() click to toggle source
# File lib/kafo/puppet_module.rb, line 56
def disable
  @enabled = false
end
enable() click to toggle source
# File lib/kafo/puppet_module.rb, line 60
def enable
  @enabled = true
end
enabled?() click to toggle source
# File lib/kafo/puppet_module.rb, line 52
def enabled?
  @enabled.nil? ? @enabled = @configuration.module_enabled?(self) : @enabled
end
other_parameter_groups() click to toggle source
# File lib/kafo/puppet_module.rb, line 90
def other_parameter_groups
  @groups.select { |g| g.formatted_name != PRIMARY_GROUP_NAME }
end
params_hash() click to toggle source
# File lib/kafo/puppet_module.rb, line 94
def params_hash
  Hash[params.map { |param| [param.name, param.value] }]
end
parse(builder_klass = ParamBuilder) click to toggle source
# File lib/kafo/puppet_module.rb, line 64
def parse(builder_klass = ParamBuilder)
  @raw_data = @parser_cache.get(identifier, manifest_path) if @parser_cache
  if @raw_data.nil?
    if @parser.nil? || @parser == :none
      raise ParserError.new("No Puppet module parser is installed and no cache of the file #{manifest_path} is available. Please check debug logs and install optional dependencies for the parser.")
    else
      @raw_data = @parser.parse(manifest_path)
    end
  end

  builder      = builder_klass.new(self, @raw_data)

  builder.validate
  @params = builder.build_params
  @groups = builder.build_param_groups(@params)

  self
rescue ConfigurationException => e
  @logger.fatal "Unable to continue because of: #{e.message}"
  KafoConfigure.exit(:manifest_error)
end
primary_parameter_group() click to toggle source
# File lib/kafo/puppet_module.rb, line 86
def primary_parameter_group
  @groups.detect { |g| g.formatted_name == PRIMARY_GROUP_NAME } || dummy_primary_group
end

Private Instance Methods

default_dir_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 157
def default_dir_name
  identifier.split('::').first
end
default_manifest_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 165
def default_manifest_name
  identifier.include?('::') ? identifier.split('::')[1..-1].join('/') : 'init'
end
default_params_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 169
def default_params_name
  identifier.include?('::') ? (identifier.split('::')[1..-1] + ['params']).join('/') : 'params'
end
default_params_path() click to toggle source
# File lib/kafo/puppet_module.rb, line 161
def default_params_path
  "#{dir_name}/manifests/#{get_params_name}.pp"
end
dummy_primary_group() click to toggle source

used when user haven't specified any primary group by name, we create a new group that holds all other groups as children, if we have no other groups (no children) we set all parameters that this module hold

# File lib/kafo/puppet_module.rb, line 115
def dummy_primary_group
  group = ParamGroup.new(PRIMARY_GROUP_NAME)
  other_parameter_groups.each { |child| group.add_child(child) }
  @params.each { |p| group.add_param(p) } if group.children.empty?
  group
end
get_class_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 137
def get_class_name
  manifest_name == 'init' ? name : "#{dir_name}::#{manifest_name.gsub('/', '::')}"
end
get_dir_name() click to toggle source

custom module directory name

# File lib/kafo/puppet_module.rb, line 128
def get_dir_name
  mapping[identifier].nil? ? default_dir_name : (mapping[identifier][:dir_name] || default_dir_name)
end
get_manifest_name() click to toggle source

custom manifest filename without .pp extension

# File lib/kafo/puppet_module.rb, line 133
def get_manifest_name
  mapping[identifier].nil? ? default_manifest_name : (mapping[identifier][:manifest_name] || default_manifest_name)
end
get_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 173
def get_name
  identifier.gsub('::', '_')
end
get_params_class_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 149
def get_params_class_name
  name_to_class_name(get_params_name)
end
get_params_name() click to toggle source
# File lib/kafo/puppet_module.rb, line 145
def get_params_name
  mapping[identifier].nil? ? default_params_name : (mapping[identifier][:params_name] || default_params_name)
end
get_params_path() click to toggle source
# File lib/kafo/puppet_module.rb, line 141
def get_params_path
  mapping[identifier].nil? ? default_params_path : (mapping[identifier][:params_path] || default_params_path)
end
mapping() click to toggle source

mapping from configuration with stringified keys

# File lib/kafo/puppet_module.rb, line 123
def mapping
  @mapping ||= Hash[@configuration.app[:mapping].map { |k, v| [k.to_s, v] }]
end
module_manifest_path() click to toggle source
# File lib/kafo/puppet_module.rb, line 153
def module_manifest_path
  "#{dir_name}/manifests/#{manifest_name}.pp"
end
name_to_class_name(name) click to toggle source
# File lib/kafo/puppet_module.rb, line 177
def name_to_class_name(name)
  name.gsub('/', '::')
end