Skip to content

Instantly share code, notes, and snippets.

@p120ph37
Created October 15, 2015 18:13
Show Gist options
  • Save p120ph37/190bb7ed1d472956503e to your computer and use it in GitHub Desktop.
Save p120ph37/190bb7ed1d472956503e to your computer and use it in GitHub Desktop.
Facter custom fact to query installed RPMs
Facter.add(:rpms) do
setcode do
gs = "\x1D"
rs = "\x1E"
us = "\x1F"
# see:
# "rpm --querytags"
# http://rpm5.org/docs/api/queryformat.html
# http://www.rpm.org/max-rpm/ch-queryformat-tags.html
rpmtags = {
'name' => "%{NAME}",
'version' => "%{VERSION}",
'release' => "%{RELEASE}",
'epoch' => "%{EPOCH}",
'summary' => "%{SUMMARY}",
'description' => "%{DESCRIPTION}",
'buildtime' => "%{BUILDTIME}",
'buildhost' => "%{BUILDHOST}",
'installtime' => "%{INSTALLTIME}",
'size' => "%{SIZE}",
'distribution' => "%{DISTRIBUTION}",
'vendor' => "%{VENDOR}",
'license' => "%{LICENSE}",
'packager' => "%{PACKAGER}",
'group' => "%{GROUP}",
'arch' => "%{ARCH}",
'requires' => "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}#{us}]",
'providees' => "[%{PROVIDENAME} %{PROVIDEFLAGS:depflags} %{PROVIDEVERSION}#{us}]",
'conflicts' => "[%{CONFLICTNAME} %{CONFLICTFLAGS:depflags} %{CONFLICTVERSION}#{us}]",
'obseletes' => "[%{OBSOLETENAME} %{OBSOLETEFLAGS:depflags} %{OBSOLETEVERSION}#{us}]",
'sigmd5' => "%{SIGMD5}",
'sha1header' => "%{SHA1HEADER}",
}
rpmquery = "rpm -qa --qf '#{rpmtags.values.join(rs)}#{gs}'"
Hash[
Facter::Core::Execution.exec(rpmquery).split(gs).map do |s|
h = Hash[rpmtags.keys.zip(s.split(rs).map{ |v| v.include?(us) ? v.split(us).map{ |v| v.strip } : v.strip })]
[h.delete('name'), h]
end
]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment