1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/python
- #
- # Copyright (c) 2016 SUSE Linux LLC
- # All Rights Reserved.
- #
- # Author: Bo Maryniuk <bo@suse.de>
- 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()
|