@@ -335,6 +335,28 @@ def _update_payload(self, old_listener, listener, service, **kwargs):
335335 if old_listener ['default_pool_id' ] != listener ['default_pool_id' ]:
336336 payload ['persist' ] = create_payload ['persist' ]
337337
338+ snat_enable_or_not = self ._check_snat_changed (old_listener , listener )
339+
340+ LOG .debug ('the create_payload:' )
341+ LOG .debug (create_payload )
342+ if snat_enable_or_not == 'enable' :
343+ LOG .debug ('inside enable' )
344+ payload ['sourceAddressTranslation' ] = {}
345+ if "sourceAddressTranslation" in create_payload and \
346+ create_payload ['sourceAddressTranslation' ].get ('type' ):
347+ payload ['sourceAddressTranslation' ]['type' ] = \
348+ create_payload ['sourceAddressTranslation' ].get ('type' )
349+
350+ if "sourceAddressTranslation" in create_payload and \
351+ create_payload ['sourceAddressTranslation' ].get ('pool' ):
352+ payload ['sourceAddressTranslation' ]['pool' ] = \
353+ create_payload ['sourceAddressTranslation' ].get ('pool' )
354+ elif snat_enable_or_not == 'disable' :
355+ LOG .debug ('inside disable' )
356+ payload ['sourceAddressTranslation' ] = {}
357+ payload ['sourceAddressTranslation' ]['type' ] = None
358+ payload ['sourceAddressTranslation' ]['pool' ] = None
359+
338360 return super (ListenerManager , self )._update_payload (
339361 old_listener , listener , service ,
340362 payload = payload , create_payload = create_payload
@@ -375,11 +397,46 @@ def _check_customized_changed(self, old_listener, listener):
375397 return True
376398 return False
377399
400+ def _check_snat_changed (self , old_listener , listener ):
401+ if not old_listener :
402+ return ''
403+
404+ if 'customized' in listener and listener ['customized' ]:
405+ try :
406+ new_customized_json = json .loads (listener ['customized' ])
407+ new_enable_snat = new_customized_json .get ('enable_snat' )
408+ except ValueError :
409+ LOG .error ('Invalid json.' )
410+ LOG .error ('Due to the error, not handle snat at all.' )
411+ return ''
412+
413+ # might want to modify and compare with old one
414+ # if 'customized' in old_listener and old_listener['customized']:
415+ # try:
416+ # old_customized_json = json.loads(old_listener['customized'])
417+ # old_enable_snat = old_customized_json.get('enable_snat')
418+ # except ValueError:
419+ # LOG.error('Invalid json.')
420+ # LOG.error('Due to the error, not handle snat at all.')
421+
422+ # might want to test agaist other cases as well, e.g '', str, etc
423+ if new_enable_snat == 'True' :
424+ LOG .info ('enable snat' )
425+ return 'enable'
426+ elif new_enable_snat == 'False' :
427+ LOG .info ('disable snat' )
428+ return 'disable'
429+ else :
430+ LOG .info ('seems nothing at all' )
431+ return ''
432+
378433 def _check_update_needed (self , payload , old_listener , listener ):
379434 if not payload or len (payload .keys ()) == 0 :
380435 if self ._check_customized_changed (old_listener , listener ) \
381436 is False and \
382- self ._check_tls_changed (old_listener , listener ) is False :
437+ self ._check_tls_changed (old_listener , listener ) is False and \
438+ not self ._check_snat_changed (old_listener , listener ):
439+ LOG .info ('seems not needed to update' )
383440 return False
384441 return True
385442
0 commit comments