Skip to content

Instantly share code, notes, and snippets.

@jbweber
Last active August 29, 2015 14:05
Show Gist options
  • Save jbweber/b8975b77fb5fa2de8671 to your computer and use it in GitHub Desktop.
Save jbweber/b8975b77fb5fa2de8671 to your computer and use it in GitHub Desktop.
import pprint
import rpm
import yum
package_names = []
packages = []
yb = yum.YumBase()
ts = rpm.TransactionSet()
mi = ts.dbMatch()
details = {}
pp = pprint.PrettyPrinter(indent=2)
for h in mi:
full_name = '%s-%s-%s.%s' % (h['name'], h['version'], h['release'], h['arch'])
if 'gpg-pubkey' in full_name: continue
node = '%s.%s' % (h['name'], h['arch'])
details[node] = {
'arch': h['arch'],
'full_name': full_name,
'name': h['name'],
}
package_names.append(full_name)
packages = yb.pkgSack.returnNewestByName(patterns=package_names, ignore_case=True)
for package in packages:
node = '%s.%s' % (package.name, package.arch)
details[node]['version'] = package.printVer()
details[node]['depends_node'] = set()
dep_packages = yb.findDeps([package])
for dep_package in dep_packages[package]:
first = dep_packages[package][dep_package][0]
for first in dep_packages[package][dep_package]:
dep_name = '%s-%s-%s.%s' % (first.name, first.version, first.release, first.arch)
dep_node = "%s.%s" % (first.name, first.arch)
if dep_name in package_names: details[node]['depends_node'].add(dep_node)
#print 'node,arch,full_name,name,version'
#for detail in sorted(details):
# print '%s,%s,%s,%s,%s' % (detail, details[detail]['arch'],details[detail]['full_name'],details[detail]['name'],details[detail]['version'])
print 'node,depends_node'
for detail in sorted(details):
for dep in details[detail]['depends_node']:
print '%s,%s' % (detail, dep)
LOAD CSV WITH HEADERS FROM "file:///tmp/out.csv" AS csvLine CREATE (r:RPM { id: csvLine.node, arch: csvLine.arch, full_name: csvLine.full_name, name: csvLine.name, version: csvLine.version})
CREATE INDEX ON :RPM(name)
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///tmp/out.csv2" AS csvLine
MATCH (root:RPM { id: csvLine.node }), (dep:RPM { id: csvLine.depends_node})
CREATE (root)-[:DEPENDS_ON]->(dep)
MATCH (root { id: 'hiera.noarch' })<-[:DEPENDS_ON]-(dep) RETURN dep
MATCH (root {id:"puppet.noarch"}) return root
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment