module PuppetFacts

Public Class Methods

get_meta_supported_platforms() click to toggle source

@api private

# File lib/puppet_facts.rb, line 166
def self.get_meta_supported_platforms
  metadata = get_metadata
  if metadata['operatingsystem_support'].nil?
    fail StandardError, "Unknown operatingsystem support"
  end
  os_sup = metadata['operatingsystem_support']

  os_sup.collect do |os_rel|
    os = meta_to_facts(os_rel['operatingsystem'])
    #os = meta_to_facts[os_sup['operatingsystem']]
    os_rel['operatingsystemrelease'].collect do |release|
      rel = meta_to_facts(release)
      [
        "#{os}-#{rel}-i386",
        "#{os}-#{rel}-x86_64"
      ]
    end
  end.flatten
end
get_metadata() click to toggle source

@api private

# File lib/puppet_facts.rb, line 187
def self.get_metadata
  if ! File.file?('metadata.json')
    fail StandardError, "Can't find metadata.json... dunno why"
  end
  metadata = JSON.parse(File.read('metadata.json'))
  if metadata.nil?
    fail StandardError, "Metadata is empty"
  end
  metadata
end
get_pe_facts_paths() click to toggle source

@api private

# File lib/puppet_facts.rb, line 111
def self.get_pe_facts_paths
  @pe_dirs.collect do |dir|
    Dir[File.join(dir,"*")]
  end.flatten
end
get_pe_platform_facts() click to toggle source

@api private

# File lib/puppet_facts.rb, line 123
def self.get_pe_platform_facts
  pe_facts_paths.inject({}) do |memo,file|
    pe_platform = File.basename(file.gsub(/\.facts/, ''))
    pe_version = File.basename(File.dirname(file))
    memo[pe_version] = Hash.new unless memo[pe_version]
    memo[pe_version][pe_platform] = Hash.new
    File.read(file).each_line do |line|
      key, value = line.split(' => ')
      memo[pe_version][pe_platform][key.to_sym] = value.chomp unless value.nil?
    end
    memo
  end
end
get_pe_platforms() click to toggle source

@api private

# File lib/puppet_facts.rb, line 92
def self.get_pe_platforms
  @pe_dirs.inject({}) do |memo,pe_dir|
    pe_version = File.basename(pe_dir)
    if Dir[File.join(@proj_root,pe_version,"*")].empty?
      fail(StandardError, "Puppet facts missing for #{pe_version}")
    end
    memo[pe_version] = Dir[File.join(@proj_root,pe_version,"*")].collect do |facts|
      File.basename(facts.gsub(/\.facts/, ''))
    end
    memo
  end
end
get_pe_requirement() click to toggle source

@api private

# File lib/puppet_facts.rb, line 199
def self.get_pe_requirement
  metadata = get_metadata
  if metadata['requirements'].nil?
    fail StandardError, 'No requirements in metadata'
  end
  pe_requirement = metadata['requirements'].select do |x|
    x['name'] == 'pe'
  end
  if pe_requirement.empty?
    fail StandardError, 'No PE requirement found in metadata'
  end
  pe_requirement.first['version_requirement']
end
get_pe_versions() click to toggle source

@api private

# File lib/puppet_facts.rb, line 80
def self.get_pe_versions
  @pe_dirs.collect do |dir|
    File.basename(dir)
  end
end
meta_supported_platforms() click to toggle source

@api private

# File lib/puppet_facts.rb, line 138
def self.meta_supported_platforms
  @meta_supported_platforms ||= get_meta_supported_platforms
end
meta_to_facts(input) click to toggle source

@api private

# File lib/puppet_facts.rb, line 143
def self.meta_to_facts(input)
  meta_to_facts = {
    'RedHat' => 'redhat',
    'CentOS' => 'centos',
    'Ubuntu' => 'ubuntu',
    'OracleLinux' => 'oracle',
    'SLES' => 'sles',
    'Scientific' => 'scientific',
    'Debian' => 'debian',
    '14.04' => '1404',
    '12.04' => '1204',
    '10.04' => '1004',
    '11 SP1' => '11',
  }
  ans = meta_to_facts[input]
  if ans
    ans
  else
    input
  end
end
pe_facts_paths() click to toggle source

@api private

# File lib/puppet_facts.rb, line 106
def self.pe_facts_paths
  @pe_facts_paths ||= get_pe_facts_paths
end
pe_platform_facts() click to toggle source

@api private

# File lib/puppet_facts.rb, line 118
def self.pe_platform_facts
  @pe_platform_facts ||= get_pe_platform_facts
end
pe_platforms() click to toggle source

@api private

# File lib/puppet_facts.rb, line 87
def self.pe_platforms
  @pe_platforms ||= get_pe_platforms
end
pe_versions() click to toggle source

Returns array of PE versions

# File lib/puppet_facts.rb, line 75
def self.pe_versions
  @pe_versions ||= get_pe_versions
end

Public Instance Methods

available_pe_platforms(pe_version) click to toggle source

Returns array of PE platforms for given PE version

# File lib/puppet_facts.rb, line 17
def available_pe_platforms(pe_version)
  PuppetFacts.pe_platforms[pe_version]
end
available_pe_versions() click to toggle source
# File lib/puppet_facts.rb, line 12
def available_pe_versions
  PuppetFacts.pe_versions
end
on_pe_supported_platforms(targets=nil) click to toggle source
# File lib/puppet_facts.rb, line 21
def on_pe_supported_platforms(targets=nil)
  targets = Array(targets) if targets

  # TODO This should filter based on set_pe_supported_platforms
  facts = PuppetFacts.pe_platform_facts
  sup_facts = Hash.new
  facts.each do |pe_ver,platforms|
    pe_semver = "#{pe_ver.sub(/^PE/,'')}.0"
    if SemVer[PuppetFacts.get_pe_requirement] === SemVer.new(pe_semver)
      sup_facts[pe_ver] = platforms.select do |platform, facts|
        if targets
          PuppetFacts.meta_supported_platforms.include?(platform) && targets.include?(platform)
        else
          PuppetFacts.meta_supported_platforms.include?(platform)
        end
      end
    end
  end
  sup_facts
end
on_pe_unsupported_platforms(targets=nil) click to toggle source

We need the inverse, this is kind of ugly. I don’t want to cram it into the other method however.

# File lib/puppet_facts.rb, line 44
def on_pe_unsupported_platforms(targets=nil)
  targets = Array(targets) if targets

  # TODO This should filter based on set_pe_supported_platforms
  facts = PuppetFacts.pe_platform_facts
  sup_facts = Hash.new
  facts.each do |pe_ver,platforms|
    pe_semver = "#{pe_ver.sub(/^PE/,'')}.0"
    if SemVer[PuppetFacts.get_pe_requirement] === SemVer.new(pe_semver)
      sup_facts[pe_ver] = platforms.select do |platform, facts|
        if targets
          ! PuppetFacts.meta_supported_platforms.include?(platform) && ! targets.include?(platform)
        else
          ! PuppetFacts.meta_supported_platforms.include?(platform)
        end
      end
    end
  end
  sup_facts
end
set_pe_supported_platforms(metadata_format_hash) click to toggle source
# File lib/puppet_facts.rb, line 8
def set_pe_supported_platforms(metadata_format_hash)
  PuppetFacts.pe_supported_platforms
end