@@ -126,7 +126,8 @@ def validateConfigData(self):
126
126
try :
127
127
self .sy .validate_data_tree ()
128
128
except Exception as e :
129
- self .sysLog (msg = 'Data Validation Failed' )
129
+ self .sysLog (doPrint = True , logLevel = syslog .LOG_ERR ,
130
+ msg = 'Data Validation Failed' )
130
131
return False
131
132
132
133
self .sysLog (msg = 'Data Validation successful' , doPrint = True )
@@ -146,7 +147,8 @@ def sysLog(self, logLevel=syslog.LOG_INFO, msg=None, doPrint=False):
146
147
# log debug only if enabled
147
148
if self .DEBUG == False and logLevel == syslog .LOG_DEBUG :
148
149
return
149
- if flags .interactive != 0 and doPrint == True :
150
+ # always print < Info level msg with doPrint flag
151
+ if doPrint == True and (logLevel < syslog .LOG_INFO or flags .interactive != 0 ):
150
152
print ("{}" .format (msg ))
151
153
syslog .openlog (self .SYSLOG_IDENTIFIER )
152
154
syslog .syslog (logLevel , msg )
@@ -712,18 +714,31 @@ def _deleteHandler(diff, inp, outp, config):
712
714
'''
713
715
if isinstance (inp , dict ):
714
716
# Example Case: diff = PORT': {delete: {u'Ethernet1': {...}}}}
717
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
718
+ msg = "Delete Dict diff:{}" .format (diff ))
715
719
for key in diff :
716
720
# make sure keys from diff are present in inp but not in outp
717
721
if key in inp and key not in outp :
718
- # assign key to None(null), redis will delete entire key
719
- config [key ] = None
722
+ if type (inp [key ]) == list :
723
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
724
+ msg = "Delete List key:{}" .format (key ))
725
+ # assign current lists as empty.
726
+ config [key ] = []
727
+ else :
728
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
729
+ msg = "Delete Dict key:{}" .format (key ))
730
+ # assign key to None(null), redis will delete entire key
731
+ config [key ] = None
720
732
else :
721
733
# should not happen
722
734
raise Exception ('Invalid deletion of {} in diff' .format (key ))
723
735
724
736
elif isinstance (inp , list ):
725
- # Example case: {u'VLAN': {u'Vlan100': {'members': {delete: [(95, 'Ethernet1')]}}
726
- # just take list from outputs
737
+ # Example case: diff: [(3, 'Ethernet10'), (2, 'Ethernet8')]
738
+ # inp:['Ethernet0', 'Ethernet4', 'Ethernet8', 'Ethernet10']
739
+ # outp:['Ethernet0', 'Ethernet4']
740
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
741
+ msg = "Delete List diff: {} inp:{} outp:{}" .format (diff , inp , outp ))
727
742
config .extend (outp )
728
743
return
729
744
@@ -733,19 +748,31 @@ def _insertHandler(diff, inp, outp, config):
733
748
'''
734
749
if isinstance (outp , dict ):
735
750
# Example Case: diff = PORT': {insert: {u'Ethernet1': {...}}}}
751
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
752
+ msg = "Insert Dict diff:{}" .format (diff ))
736
753
for key in diff :
737
754
# make sure keys are only in outp
738
755
if key not in inp and key in outp :
756
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
757
+ msg = "Insert Dict key:{}" .format (key ))
739
758
# assign key in config same as outp
740
759
config [key ] = outp [key ]
741
760
else :
742
761
# should not happen
743
762
raise Exception ('Invalid insertion of {} in diff' .format (key ))
744
763
745
764
elif isinstance (outp , list ):
746
- # just take list from output
747
- # Example case: {u'VLAN': {u'Vlan100': {'members': {insert: [(95, 'Ethernet1')]}}
765
+ # Example diff:[(2, 'Ethernet8'), (3, 'Ethernet10')]
766
+ # in:['Ethernet0', 'Ethernet4']
767
+ # out:['Ethernet0', 'Ethernet4', 'Ethernet8', 'Ethernet10']
768
+ self .sysLog (logLevel = syslog .LOG_DEBUG , \
769
+ msg = "Insert list diff:{} inp:{} outp:{}" .format (diff , inp , outp ))
748
770
config .extend (outp )
771
+ # configDb stores []->[""], i.e. empty list as list of empty
772
+ # string. While adding default config for newly created ports,
773
+ # inp can be [""], in that case remove it from delta config.
774
+ if inp == ['' ]:
775
+ config .remove ('' );
749
776
return
750
777
751
778
def _recurCreateConfig (diff , inp , outp , config ):
0 commit comments