# # 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