#!/usr/bin/python # # Copyright (c) 2016 SUSE Linux LLC # All Rights Reserved. # # Author: Bo Maryniuk import sys import os import hashlib from zypp_plugin import Plugin class DriftDetector(Plugin): """ Return diff of the installed packages outside the Salt. """ def __init__(self): Plugin.__init__(self) self.ck_path = "/var/cache/salt/minion/rpmdb.cookie" self.rpm_path = "/var/lib/rpm/Packages" def _get_mtime(self): ''' Get the modified time of the RPM Database. Returns: Unix ticks ''' return os.path.exists(self.rpm_path) and int(os.path.getmtime(self.rpm_path)) or 0 def _get_checksum(self): ''' Get the checksum of the RPM Database. Returns: hexdigest ''' digest = hashlib.sha256() with open(self.rpm_path, "rb") as rpm_db_fh: while True: buff = rpm_db_fh.read(0x1000) if not buff: break digest.update(buff) return digest.hexdigest() def PLUGINEND(self, headers, body): """ Hook when plugin closes Zypper's transaction. """ if 'SALT_RUNNING' not in os.environ: with open(self.ck_path, 'w') as ck_fh: ck_fh.write('{chksum} {mtime}\n'.format(chksum=self._get_checksum(), mtime=self._get_mtime())) self.ack() DriftDetector().main()