@@ -983,7 +983,7 @@ def validate_mirror_session_config(config_db, session_name, dst_port, src_port,
983
983
""" Check if SPAN mirror-session config is valid """
984
984
ctx = click .get_current_context ()
985
985
if len (config_db .get_entry ('MIRROR_SESSION' , session_name )) != 0 :
986
- click .echo ("Error: {} already exists" .format (session_name ))
986
+ click .echo ("Error: {} already exists" .format (session_name )) # TODO: MISSING CONSTRAINT IN YANG MODEL
987
987
return False
988
988
989
989
vlan_member_table = config_db .get_table ('VLAN_MEMBER' )
@@ -2367,25 +2367,35 @@ def add_erspan(session_name, src_ip, dst_ip, dscp, ttl, gre_type, queue, policer
2367
2367
session_info ['gre_type' ] = gre_type
2368
2368
2369
2369
session_info = gather_session_info (session_info , policer , queue , src_port , direction )
2370
+ ctx = click .get_current_context ()
2370
2371
2371
2372
"""
2372
2373
For multi-npu platforms we need to program all front asic namespaces
2373
2374
"""
2374
2375
namespaces = multi_asic .get_all_namespaces ()
2375
2376
if not namespaces ['front_ns' ]:
2376
- config_db = ConfigDBConnector ()
2377
+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
2377
2378
config_db .connect ()
2378
- if validate_mirror_session_config (config_db , session_name , None , src_port , direction ) is False :
2379
- return
2380
- config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2379
+ if ADHOC_VALIDATION :
2380
+ if validate_mirror_session_config (config_db , session_name , None , src_port , direction ) is False :
2381
+ return
2382
+ try :
2383
+ config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2384
+ except ValueError as e :
2385
+ ctx .fail ("Invalid mirror session config. Error: {}" .format (e ))
2386
+
2381
2387
else :
2382
2388
per_npu_configdb = {}
2383
2389
for front_asic_namespaces in namespaces ['front_ns' ]:
2384
- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2390
+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
2385
2391
per_npu_configdb [front_asic_namespaces ].connect ()
2386
- if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , None , src_port , direction ) is False :
2387
- return
2388
- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2392
+ if ADHOC_VALIDATION :
2393
+ if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , None , src_port , direction ) is False :
2394
+ return
2395
+ try :
2396
+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2397
+ except ValueError as e :
2398
+ ctx .fail ("Invalid mirror session config. Error: {}" .format (e ))
2389
2399
2390
2400
@mirror_session .group (cls = clicommon .AbbreviationGroup , name = 'span' )
2391
2401
@click .pass_context
@@ -2417,25 +2427,34 @@ def add_span(session_name, dst_port, src_port, direction, queue, policer):
2417
2427
}
2418
2428
2419
2429
session_info = gather_session_info (session_info , policer , queue , src_port , direction )
2430
+ ctx = click .get_current_context ()
2420
2431
2421
2432
"""
2422
2433
For multi-npu platforms we need to program all front asic namespaces
2423
2434
"""
2424
2435
namespaces = multi_asic .get_all_namespaces ()
2425
2436
if not namespaces ['front_ns' ]:
2426
- config_db = ConfigDBConnector ()
2437
+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
2427
2438
config_db .connect ()
2428
- if validate_mirror_session_config (config_db , session_name , dst_port , src_port , direction ) is False :
2429
- return
2430
- config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2439
+ if ADHOC_VALIDATION :
2440
+ if validate_mirror_session_config (config_db , session_name , dst_port , src_port , direction ) is False :
2441
+ return
2442
+ try :
2443
+ config_db .set_entry ("MIRROR_SESSION" , session_name , session_info )
2444
+ except ValueError as e :
2445
+ ctx .fail ("Invalid mirror session config. Error: {}" .format (e ))
2431
2446
else :
2432
2447
per_npu_configdb = {}
2433
2448
for front_asic_namespaces in namespaces ['front_ns' ]:
2434
- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2449
+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
2435
2450
per_npu_configdb [front_asic_namespaces ].connect ()
2436
- if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , dst_port , src_port , direction ) is False :
2437
- return
2438
- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2451
+ if ADHOC_VALIDATION :
2452
+ if validate_mirror_session_config (per_npu_configdb [front_asic_namespaces ], session_name , dst_port , src_port , direction ) is False :
2453
+ return
2454
+ try :
2455
+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , session_info )
2456
+ except ValueError as e :
2457
+ ctx .fail ("Invalid mirror session config. Error: {}" .format (e ))
2439
2458
2440
2459
2441
2460
@mirror_session .command ()
@@ -2447,16 +2466,23 @@ def remove(session_name):
2447
2466
For multi-npu platforms we need to program all front asic namespaces
2448
2467
"""
2449
2468
namespaces = multi_asic .get_all_namespaces ()
2469
+ ctx = click .get_current_context ()
2450
2470
if not namespaces ['front_ns' ]:
2451
- config_db = ConfigDBConnector ()
2471
+ config_db = ValidatedConfigDBConnector ( ConfigDBConnector () )
2452
2472
config_db .connect ()
2453
- config_db .set_entry ("MIRROR_SESSION" , session_name , None )
2473
+ try :
2474
+ config_db .set_entry ("MIRROR_SESSION" , session_name , None )
2475
+ except JsonPatchConflict :
2476
+ ctx .fail ("Failed to remove MIRROR_SESSION {}" .format (session_name ))
2454
2477
else :
2455
2478
per_npu_configdb = {}
2456
2479
for front_asic_namespaces in namespaces ['front_ns' ]:
2457
- per_npu_configdb [front_asic_namespaces ] = ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces )
2480
+ per_npu_configdb [front_asic_namespaces ] = ValidatedConfigDBConnector ( ConfigDBConnector (use_unix_socket_path = True , namespace = front_asic_namespaces ) )
2458
2481
per_npu_configdb [front_asic_namespaces ].connect ()
2459
- per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , None )
2482
+ try :
2483
+ per_npu_configdb [front_asic_namespaces ].set_entry ("MIRROR_SESSION" , session_name , None )
2484
+ except JsonPatchConflict :
2485
+ ctx .fail ("Failed to remove MIRROR_SESSION {}" .format (session_name ))
2460
2486
2461
2487
#
2462
2488
# 'pfcwd' group ('config pfcwd ...')
0 commit comments