diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-08-15 09:06:43 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-08-15 09:06:43 -0400 |
commit | b862090945322d5ba4b42e180bba92afb860df21 (patch) | |
tree | 1c482adfa9561bad14d82fc442f8f319b33b1d4f /src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py | |
parent | 7890fd0aa5331541c71b893c313553765ca1628e (diff) | |
download | bcfg2-b862090945322d5ba4b42e180bba92afb860df21.tar.gz bcfg2-b862090945322d5ba4b42e180bba92afb860df21.tar.bz2 bcfg2-b862090945322d5ba4b42e180bba92afb860df21.zip |
POSIX:
refactored POSIX tool into multiple files to make it more manageable
Added unit tests for POSIX tool and sub-tools
fixed ACL handling for filesystems mounted noacl
Diffstat (limited to 'src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py')
-rw-r--r-- | src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py b/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py new file mode 100644 index 000000000..569ca3445 --- /dev/null +++ b/src/lib/Bcfg2/Client/Tools/POSIX/Hardlink.py @@ -0,0 +1,39 @@ +import os +import sys +from base import POSIXTool + +class POSIXHardlink(POSIXTool): + __req__ = ['name', 'to'] + + def verify(self, entry, modlist): + rv = True + + try: + if not os.path.samefile(entry.get('name'), entry.get('to')): + msg = "Hardlink %s is incorrect" % entry.get('name') + self.logger.debug("POSIX: " + msg) + entry.set('qtext', "\n".join([entry.get('qtext', ''), msg])) + rv = False + except OSError: + self.logger.debug("POSIX: %s %s does not exist" % + (entry.tag, entry.get("name"))) + entry.set('current_exists', 'false') + return False + + return POSIXTool.verify(self, entry, modlist) and rv + + def install(self, entry): + ondisk = self._exists(entry, remove=True) + if ondisk: + self.logger.info("POSIX: Hardlink %s cleanup failed" % + entry.get('name')) + try: + os.link(entry.get('to'), entry.get('name')) + rv = True + except OSError: + err = sys.exc_info()[1] + self.logger.error("POSIX: Failed to create hardlink %s to %s: %s" % + (entry.get('name'), entry.get('to'), err)) + rv = False + return POSIXTool.install(self, entry) and rv + |