#
# Extract local Cosmos configuration
#
require 'facter'
Facter.add(:cosmos_repo) do
  setcode do
    Facter::Util::Resolution.exec("sh -c '. /etc/cosmos/cosmos.conf && echo $COSMOS_REPO'")
  end
end

Facter.add(:cosmos_tag_pattern) do
  setcode do
    Facter::Util::Resolution.exec("sh -c '. /etc/cosmos/cosmos.conf && echo $COSMOS_UPDATE_VERIFY_GIT_TAG_PATTERN'")
  end
end

Facter.add(:cosmos_repo_origin_url) do
  setcode do
    Facter::Util::Resolution.exec("sh -c '. /etc/cosmos/cosmos.conf && cd $COSMOS_REPO && git remote show -n origin | grep \"Fetch URL\" | awk \"{print \\$NF }\"'")
  end
end

# Construct the structured facts under $facts['cosmos']
Facter.add('cosmos') do
  require 'yaml'

  # Load YAML file with all the roles and their hosts/addresses
  res_h = YAML.load_file('/etc/puppet/static-cosmos-facts.yaml')

  # Figure out which roles match the current host
  fqdn = Facter.value(:fqdn)

  res = []
  res_h['cosmos'].each do | key, values |
    if key.end_with? '_hosts'
      if values.include? fqdn
        role = key.chomp('_hosts')
        res = res + [role]
      end
    end
  end

  warn("Cosmos roles for host #{fqdn}: #{res}")
  res_h['cosmos']['host_roles'] = res

  setcode do
    res_h['cosmos']
  end
end