diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Server/Plugins/Snapshots.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/lib/Server/Plugins/Snapshots.py b/src/lib/Server/Plugins/Snapshots.py index 0da9f6ffc..5ee1e6d62 100644 --- a/src/lib/Server/Plugins/Snapshots.py +++ b/src/lib/Server/Plugins/Snapshots.py @@ -14,10 +14,14 @@ import threading logger = logging.getLogger('Snapshots') +ftypes = ['ConfigFile', 'SymLink', 'Directory'] datafields = { 'Package': ['version'], 'Path': ['type'], 'Service': ['status'], + 'ConfigFile': ['owner', 'group', 'perms'], + 'Directory': ['owner', 'group', 'perms'], + 'SymLink': ['to'], } def build_snap_ent(entry): @@ -28,7 +32,8 @@ def build_snap_ent(entry): state = dict([(key, unicode(entry.get(key))) for key in basefields]) desired.update([(key, unicode(entry.get(key))) for key in \ datafields[entry.tag]]) - if (entry.tag == 'Path') and (entry.get('type') == 'file'): + if entry.tag == 'ConfigFile' or \ + ((entry.tag == 'Path') and (entry.get('type') == 'file')): if entry.text == None: desired['contents'] = None else: @@ -47,7 +52,7 @@ def build_snap_ent(entry): state.update([(key, unicode(entry.get('current_' + key, entry.get(key)))) \ for key in datafields[entry.tag]]) - if entry.tag == 'Path' and entry.get('exists', 'true') == 'false': + if entry.tag in ['ConfigFile', 'Path'] and entry.get('exists', 'true') == 'false': state = None return [desired, state] @@ -91,10 +96,16 @@ class Snapshots(Bcfg2.Server.Plugin.Statistics, for entry in state.find('.//Bad'): data = [False, False, unicode(entry.get('name'))] \ + build_snap_ent(entry) - etag = entry.tag + if entry.tag in ftypes: + etag = 'Path' + else: + etag = entry.tag entries[etag][entry.get('name')] = data for entry in state.find('.//Modified'): - etag = entry.tag + if entry.tag in ftypes: + etag = 'Path' + else: + etag = entry.tag if entry.get('name') in entries[etag]: data = [True, False, unicode(entry.get('name'))] + \ build_snap_ent(entry) |