@@ -2354,25 +2354,35 @@ def add_erspan(session_name, src_ip, dst_ip, dscp, ttl, gre_type, queue, policer
23542354 session_info ['gre_type' ] = gre_type
23552355
23562356 session_info = gather_session_info (session_info , policer , queue , src_port , direction )
2357+ ctx = click .get_current_context ()
23572358
23582359 """
23592360 For multi-npu platforms we need to program all front asic namespaces
23602361 """
23612362 namespaces = multi_asic .get_all_namespaces ()
23622363 if not namespaces ['front_ns' ]:
2363- config_db = ConfigDBConnector ()
2364+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
23642365 config_db .connect ()
2365- if validate_mirror_session_config (config_db , session_name , None , src_port , direction ) is False :
2366- return
2367- config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2366+ if ADHOC_VALIDATION :
2367+ if validate_mirror_session_config (config_db , session_name , None , src_port , direction ) is False :
2368+ return
2369+ try :
2370+ config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2371+ except ValueError as e :
2372+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
2373+
23682374 else :
23692375 per_npu_configdb = {}
23702376 for front_asic_namespaces in namespaces ['front_ns' ]:
2371- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2377+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
23722378 per_npu_configdb [front_asic_namespaces ].connect ()
2373- if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , None , src_port , direction ) is False :
2374- return
2375- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2379+ if ADHOC_VALIDATION :
2380+ if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , None , src_port , direction ) is False :
2381+ return
2382+ try :
2383+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2384+ except ValueError as e :
2385+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
23762386
23772387@mirror_session .group (cls = clicommon .AbbreviationGroup , name = 'span' )
23782388@click .pass_context
@@ -2404,25 +2414,34 @@ def add_span(session_name, dst_port, src_port, direction, queue, policer):
24042414 }
24052415
24062416 session_info = gather_session_info (session_info , policer , queue , src_port , direction )
2417+ ctx = click .get_current_context ()
24072418
24082419 """
24092420 For multi-npu platforms we need to program all front asic namespaces
24102421 """
24112422 namespaces = multi_asic .get_all_namespaces ()
24122423 if not namespaces ['front_ns' ]:
2413- config_db = ConfigDBConnector ()
2424+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
24142425 config_db .connect ()
2415- if validate_mirror_session_config (config_db , session_name , dst_port , src_port , direction ) is False :
2416- return
2417- config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2426+ if ADHOC_VALIDATION :
2427+ if validate_mirror_session_config (config_db , session_name , dst_port , src_port , direction ) is False :
2428+ return
2429+ try :
2430+ config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2431+ except ValueError as e :
2432+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
24182433 else :
24192434 per_npu_configdb = {}
24202435 for front_asic_namespaces in namespaces ['front_ns' ]:
2421- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2436+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
24222437 per_npu_configdb [front_asic_namespaces ].connect ()
2423- if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , dst_port , src_port , direction ) is False :
2424- return
2425- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2438+ if ADHOC_VALIDATION :
2439+ if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , dst_port , src_port , direction ) is False :
2440+ return
2441+ try :
2442+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2443+ except ValueError as e :
2444+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
24262445
24272446
24282447@mirror_session .command ()
@@ -2434,16 +2453,23 @@ def remove(session_name):
24342453 For multi-npu platforms we need to program all front asic namespaces
24352454 """
24362455 namespaces = multi_asic .get_all_namespaces ()
2456+ ctx = click .get_current_context ()
24372457 if not namespaces ['front_ns' ]:
2438- config_db = ConfigDBConnector ()
2458+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
24392459 config_db .connect ()
2440- config_db .set_entry ("MIRROR_SESSION" , session_name , None )
2460+ try :
2461+ config_db .set_entry ("MIRROR_SESSION" , session_name , None )
2462+ except JsonPatchConflict as e :
2463+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
24412464 else :
24422465 per_npu_configdb = {}
24432466 for front_asic_namespaces in namespaces ['front_ns' ]:
2444- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2467+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
24452468 per_npu_configdb [front_asic_namespaces ].connect ()
2446- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , None )
2469+ try :
2470+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , None )
2471+ except JsonPatchConflict as e :
2472+ ctx .fail ("Invalid ConfigDB. Error: {}" .format (e ))
24472473
24482474#
24492475# 'pfcwd' group ('config pfcwd ...')
0 commit comments