Skip to content

Commit 2f5f847

Browse files
committed
ZEN-29068: For upgrades, a separate log file needs to be generated for Monitoring Template changes/conflicts/remediations
1 parent 5afade8 commit 2f5f847

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
##############################################################################
2+
#
3+
# Copyright (C) Zenoss, Inc. 2018, all rights reserved.
4+
#
5+
# This content is made available according to terms specified in
6+
# License.zenoss under the directory where your Zenoss product is installed.
7+
#
8+
##############################################################################
9+
10+
import os
11+
12+
DIFF_DIR = '/home/zenoss/diff/'
13+
14+
15+
class DiffSaver(object):
16+
"""
17+
Diff saver - saves ZenPack template diff into a file.
18+
"""
19+
20+
def __init__(self, log):
21+
self.zpDiffDir = None
22+
self.log = log
23+
24+
def initZPDiffDir(self, zp):
25+
self.zpDiffDir = '{}{}/'.format(DIFF_DIR, zp.id)
26+
if os.path.isdir(self.zpDiffDir):
27+
old_diffs = os.listdir(self.zpDiffDir)
28+
for f in old_diffs:
29+
os.remove('{}/{}'.format(self.zpDiffDir, f))
30+
else:
31+
os.makedirs(self.zpDiffDir)
32+
33+
def saveDiff(self, zp, parent, spec, id, diff):
34+
diffFile = '{}{}.diff'.format(self.zpDiffDir, id)
35+
self.log.info("Existing object {}/{} differs from "
36+
"the newer version included with the {} ZenPack. "
37+
"The existing object will be "
38+
"backed up to '{}'. Please review and reconcile any "
39+
"local changes before deleting the backup".format(
40+
parent.getDmdKey(), spec.name, zp.id, os.path.abspath(diffFile)))
41+
f = open(diffFile, 'w')
42+
f.write(diff)
43+
f.close()
44+
45+
def remEmtyDir(self):
46+
if not os.listdir(self.zpDiffDir):
47+
os.rmdir(self.zpDiffDir)

ZenPacks/zenoss/ZenPackLib/lib/base/ZenPack.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515

1616
from Acquisition import aq_base
1717
from Products.ZenModel.ZenPack import ZenPack as ZenPackBase
18+
from .DiffSaver import DiffSaver
1819
from ..helpers.Dumper import Dumper
1920
from ..helpers.ZenPackLibLog import ZenPackLibLog, new_log
2021
from Products.ZenEvents import ZenEventClasses
2122

2223
LOG = new_log('zpl.ZenPack')
24+
DiffSaver = DiffSaver(LOG)
2325
LOG.setLevel('INFO')
2426
ZenPackLibLog.enable_log_stderr(LOG)
2527

@@ -61,14 +63,15 @@ def _buildDeviceRelations(self, app, batch=10):
6163
def install(self, app):
6264
self.createZProperties(app)
6365
self.create_device_classes(app)
66+
DiffSaver.initZPDiffDir(self)
6467

6568
# Load objects.xml now
6669
super(ZenPack, self).install(app)
6770
if self.NEW_COMPONENT_TYPES:
6871
self.LOG.info('Adding {} relationships to existing devices'.format(self.id))
6972
self._buildDeviceRelations(app)
7073

71-
# load monitoring templates
74+
# Load monitoring templates
7275
for dcname, dcspec in self.device_classes.iteritems():
7376
dcspecparam = self._v_specparams.device_classes.get(dcname)
7477
deviceclass = dcspec.get_organizer(app.zport.dmd)
@@ -77,6 +80,9 @@ def install(self, app):
7780
mtspecparam = dcspecparam.templates.get(mtname)
7881
self.update_object(app, deviceclass, 'rrdTemplates', mtname, mtspec, mtspecparam)
7982

83+
# Remove ZP diff folder if it's empty
84+
DiffSaver.remEmtyDir()
85+
8086
# Load event classes
8187
for ecname, ecspec in self.event_classes.iteritems():
8288
ec_org = ecspec.create_organizer(app.zport.dmd)
@@ -199,12 +205,7 @@ def check_diff(self, app, parent, relname, object, spec, specparam):
199205
time_str = time.strftime("%Y%m%d%H%M", time.localtime())
200206
preupgrade_id = "{}-preupgrade-{}".format(object.id, time_str)
201207
self.move_object(parent, relname, object.id, preupgrade_id)
202-
LOG.info("Existing object {}/{} differs from "
203-
"the newer version included with the {} ZenPack. "
204-
"The existing object will be "
205-
"backed up to '{}'. Please review and reconcile any "
206-
"local changes before deleting the backup: \n{}".format(
207-
parent.getDmdKey(), spec.name, self.id, preupgrade_id, diff))
208+
DiffSaver.saveDiff(self, parent, spec, preupgrade_id, diff)
208209
return True
209210

210211
def get_object(self, parent, relname, object_id):

0 commit comments

Comments
 (0)