summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Server/Plugins/Snapshots.py19
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)