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