Skip to content

Commit dd4cad2

Browse files
authored
Merge branch 'sonic-net:master' into asic-sdk-health-event
2 parents e6e31f5 + 3d45c0c commit dd4cad2

File tree

9 files changed

+209
-12
lines changed

9 files changed

+209
-12
lines changed

generic_config_updater/gcu_field_operation_validators.conf.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
"helper_data": {
1818
"rdma_config_update_validator": {
1919
"mellanox_asics": {
20-
"spc1": [ "ACS-MSN2700", "ACS-MSN2740", "ACS-MSN2100", "ACS-MSN2410", "ACS-MSN2010", "Mellanox-SN2700", "Mellanox-SN2700-D48C8",
20+
"spc1": [ "ACS-MSN2700", "ACS-MSN2740", "ACS-MSN2100", "ACS-MSN2410", "ACS-MSN2010", "Mellanox-SN2700", "Mellanox-SN2700-C28D8", "Mellanox-SN2700-D40C8S8", "Mellanox-SN2700-D44C10", "Mellanox-SN2700-D48C8",
2121
"ACS-MSN2700-A1", "Mellanox-SN2700-A1", "Mellanox-SN2700-A1-C28D8", "Mellanox-SN2700-A1-D40C8S8", "Mellanox-SN2700-A1-D44C10", "Mellanox-SN2700-A1-D48C8" ],
22-
"spc2": [ "ACS-MSN3800", "Mellanox-SN3800-D112C8" ],
23-
"spc3": [ "ACS-MSN4700", "ACS-MSN4600", "ACS-MSN4600C", "ACS-MSN4410", "Mellanox-SN4600C-D112C8", "Mellanox-SN4600C-C64", "Mellanox-SN4700-O8C48" ],
22+
"spc2": [ "ACS-MSN3800", "Mellanox-SN3800-D112C8", "ACS-MSN3420", "ACS-MSN3700C", "ACS-MSN3700", "Mellanox-SN3800-C64", "Mellanox-SN3800-D100C12S2", "Mellanox-SN3800-D24C52", "Mellanox-SN3800-D28C49S1", "Mellanox-SN3800-D28C50" ],
23+
"spc3": [ "ACS-MSN4700", "ACS-MSN4600", "ACS-MSN4600C", "ACS-MSN4410", "Mellanox-SN4600C-D112C8", "Mellanox-SN4600C-C64", "Mellanox-SN4700-O8C48", "Mellanox-SN4600C-D100C12S2", "Mellanox-SN4600C-D48C40",
24+
"Mellanox-SN4700-A96C8V8", "Mellanox-SN4700-C128", "Mellanox-SN4700-O28", "Mellanox-SN4700-O8V48", "Mellanox-SN4700-V48C32"],
2425
"spc4": [ "ACS-SN5600"]
2526
},
2627
"broadcom_asics": {

scripts/db_migrator.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,30 @@ def migrate_telemetry(self):
618618
if not certs:
619619
self.configDB.set_entry("TELEMETRY", "certs", telemetry_data.get("certs"))
620620

621+
def migrate_gnmi(self):
622+
# If there's GNMI table in CONFIG_DB, no need to migrate
623+
gnmi = self.configDB.get_entry('GNMI', 'gnmi')
624+
certs = self.configDB.get_entry('GNMI', 'certs')
625+
if gnmi and certs:
626+
return
627+
if self.config_src_data:
628+
if 'GNMI' in self.config_src_data:
629+
# If there's GNMI in minigraph or golden config, copy configuration from config_src_data
630+
gnmi_data = self.config_src_data['GNMI']
631+
log.log_notice('Migrate GNMI configuration')
632+
if 'gnmi' in gnmi_data:
633+
self.configDB.set_entry("GNMI", "gnmi", gnmi_data.get('gnmi'))
634+
if 'certs' in gnmi_data:
635+
self.configDB.set_entry("GNMI", "certs", gnmi_data.get('certs'))
636+
else:
637+
# If there's no minigraph or golden config, copy configuration from CONFIG_DB TELEMETRY table
638+
gnmi = self.configDB.get_entry('TELEMETRY', 'gnmi')
639+
if gnmi:
640+
self.configDB.set_entry("GNMI", "gnmi", gnmi)
641+
certs = self.configDB.get_entry('TELEMETRY', 'certs')
642+
if certs:
643+
self.configDB.set_entry("GNMI", "certs", certs)
644+
621645
def migrate_console_switch(self):
622646
# CONSOLE_SWITCH - add missing key
623647
if not self.config_src_data or 'CONSOLE_SWITCH' not in self.config_src_data:
@@ -1137,9 +1161,20 @@ def version_202311_01(self):
11371161
def version_202311_02(self):
11381162
"""
11391163
Version 202311_02.
1140-
This is current last erversion for 202311 branch
11411164
"""
11421165
log.log_info('Handling version_202311_02')
1166+
# Update GNMI table
1167+
self.migrate_gnmi()
1168+
1169+
self.set_version('version_202311_03')
1170+
return 'version_202311_03'
1171+
1172+
def version_202311_03(self):
1173+
"""
1174+
Version 202311_03.
1175+
This is current last erversion for 202311 branch
1176+
"""
1177+
log.log_info('Handling version_202311_03')
11431178
self.set_version('version_202405_01')
11441179
return 'version_202405_01'
11451180

scripts/route_check.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,10 @@ def check_frr_pending_routes():
548548
if entry['vrfName'] != 'default':
549549
continue
550550

551+
# skip if this bgp source prefix is not selected as best
552+
if not entry.get('selected', False):
553+
continue
554+
551555
if not entry.get('offloaded', False):
552556
missed_rt.append(entry)
553557

tests/db_migrator_input/config_db/dns-nameserver-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
"state": "enabled"
77
},
88
"VERSIONS|DATABASE": {
9-
"VERSION": "version_4_0_4"
9+
"VERSION": "version_202405_01"
1010
}
1111
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"GNMI|gnmi": {
3+
"client_auth": "true",
4+
"log_level": "2",
5+
"port": "50051"
6+
},
7+
"GNMI|certs": {
8+
"server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key",
9+
"ca_crt": "/etc/sonic/telemetry/dsmsroot.cer",
10+
"server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer"
11+
},
12+
"VERSIONS|DATABASE": {
13+
"VERSION": "version_202405_01"
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"TELEMETRY|gnmi": {
3+
"client_auth": "true",
4+
"log_level": "2",
5+
"port": "50051"
6+
},
7+
"TELEMETRY|certs": {
8+
"server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key",
9+
"ca_crt": "/etc/sonic/telemetry/dsmsroot.cer",
10+
"server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer"
11+
},
12+
"VERSIONS|DATABASE": {
13+
"VERSION": "version_202311_01"
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"GNMI|gnmi": {
3+
"client_auth": "true",
4+
"log_level": "2",
5+
"port": "50052"
6+
},
7+
"GNMI|certs": {
8+
"server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key",
9+
"ca_crt": "/etc/sonic/telemetry/dsmsroot.cer",
10+
"server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer"
11+
},
12+
"VERSIONS|DATABASE": {
13+
"VERSION": "version_202405_01"
14+
}
15+
}

tests/db_migrator_test.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ def test_dns_nameserver_migrator(self):
379379
dbmgtr.migrate()
380380
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'dns-nameserver-expected')
381381
expected_db = Db()
382-
advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_4_0_4')
382+
advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_202405_01')
383383
resulting_keys = dbmgtr.configDB.keys(dbmgtr.configDB.CONFIG_DB, 'DNS_NAMESERVER*')
384384
expected_keys = expected_db.cfgdb.keys(expected_db.cfgdb.CONFIG_DB, 'DNS_NAMESERVER*')
385385

@@ -767,6 +767,7 @@ def test_fast_reboot_upgrade_to_4_0_3(self):
767767
assert not self.check_config_db(dbmgtr.configDB, expected_db.cfgdb)
768768
assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION'], '{} {}'.format(dbmgtr.CURRENT_VERSION, dbmgtr.get_version())
769769

770+
770771
class TestSflowSampleDirectionMigrator(object):
771772
@classmethod
772773
def setup_class(cls):
@@ -885,3 +886,59 @@ def test_init(self, mock_args):
885886
mock_args.return_value=argparse.Namespace(namespace=None, operation='get_version', socket=None)
886887
import db_migrator
887888
db_migrator.main()
889+
890+
891+
class TestGNMIMigrator(object):
892+
@classmethod
893+
def setup_class(cls):
894+
os.environ['UTILITIES_UNIT_TESTING'] = "2"
895+
896+
@classmethod
897+
def teardown_class(cls):
898+
os.environ['UTILITIES_UNIT_TESTING'] = "0"
899+
dbconnector.dedicated_dbs['CONFIG_DB'] = None
900+
901+
def test_dns_nameserver_migrator_minigraph(self):
902+
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-input')
903+
import db_migrator
904+
dbmgtr = db_migrator.DBMigrator(None)
905+
# Set config_src_data
906+
dbmgtr.config_src_data = {
907+
'GNMI': {
908+
'gnmi': {
909+
"client_auth": "true",
910+
"log_level": "2",
911+
"port": "50052"
912+
},
913+
'certs': {
914+
"server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key",
915+
"ca_crt": "/etc/sonic/telemetry/dsmsroot.cer",
916+
"server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer"
917+
}
918+
}
919+
}
920+
dbmgtr.migrate()
921+
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-minigraph-expected')
922+
expected_db = Db()
923+
advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_202405_01')
924+
resulting_table = dbmgtr.configDB.get_table("GNMI")
925+
expected_table = expected_db.cfgdb.get_table("GNMI")
926+
927+
diff = DeepDiff(resulting_table, expected_table, ignore_order=True)
928+
assert not diff
929+
930+
def test_dns_nameserver_migrator_configdb(self):
931+
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-input')
932+
import db_migrator
933+
dbmgtr = db_migrator.DBMigrator(None)
934+
# Set config_src_data
935+
dbmgtr.config_src_data = {}
936+
dbmgtr.migrate()
937+
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-configdb-expected')
938+
expected_db = Db()
939+
advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_202405_01')
940+
resulting_table = dbmgtr.configDB.get_table("GNMI")
941+
expected_table = expected_db.cfgdb.get_table("GNMI")
942+
943+
diff = DeepDiff(resulting_table, expected_table, ignore_order=True)
944+
assert not diff

tests/route_check_test_data.py

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -394,20 +394,23 @@
394394
"prefix": "0.0.0.0/0",
395395
"vrfName": "default",
396396
"protocol": "bgp",
397-
"offloaded": "true",
397+
"selected": True,
398+
"offloaded": True,
398399
},
399400
],
400401
"10.10.196.12/31": [
401402
{
402403
"prefix": "10.10.196.12/31",
403404
"vrfName": "default",
404405
"protocol": "bgp",
405-
"offloaded": "true",
406+
"selected": True,
407+
"offloaded": True,
406408
},
407409
],
408410
"10.10.196.24/31": [
409411
{
410412
"protocol": "connected",
413+
"selected": True,
411414
},
412415
],
413416
},
@@ -442,30 +445,82 @@
442445
"prefix": "0.0.0.0/0",
443446
"vrfName": "default",
444447
"protocol": "bgp",
445-
"offloaded": "true",
448+
"selected": True,
449+
"offloaded": True,
446450
},
447451
],
448452
"10.10.196.12/31": [
449453
{
450454
"prefix": "10.10.196.12/31",
451455
"vrfName": "default",
452456
"protocol": "bgp",
457+
"selected": True,
453458
},
454459
],
455460
"10.10.196.24/31": [
456461
{
457462
"protocol": "connected",
463+
"selected": True,
458464
},
459465
],
460466
},
461467
RESULT: {
462468
"missed_FRR_routes": [
463-
{"prefix": "10.10.196.12/31", "vrfName": "default", "protocol": "bgp"}
469+
{"prefix": "10.10.196.12/31", "vrfName": "default", "protocol": "bgp", "selected": True}
464470
],
465471
},
466472
RET: -1,
467473
},
468-
"10": {
474+
"12": {
475+
DESCR: "skip bgp routes offloaded check, if not selected as best",
476+
ARGS: "route_check -m INFO -i 1000",
477+
PRE: {
478+
APPL_DB: {
479+
ROUTE_TABLE: {
480+
"0.0.0.0/0" : { "ifname": "portchannel0" },
481+
"10.10.196.12/31" : { "ifname": "portchannel0" },
482+
},
483+
INTF_TABLE: {
484+
"PortChannel1013:10.10.196.24/31": {},
485+
"PortChannel1023:2603:10b0:503:df4::5d/126": {},
486+
"PortChannel1024": {}
487+
}
488+
},
489+
ASIC_DB: {
490+
RT_ENTRY_TABLE: {
491+
RT_ENTRY_KEY_PREFIX + "10.10.196.12/31" + RT_ENTRY_KEY_SUFFIX: {},
492+
RT_ENTRY_KEY_PREFIX + "10.10.196.24/32" + RT_ENTRY_KEY_SUFFIX: {},
493+
RT_ENTRY_KEY_PREFIX + "2603:10b0:503:df4::5d/128" + RT_ENTRY_KEY_SUFFIX: {},
494+
RT_ENTRY_KEY_PREFIX + "0.0.0.0/0" + RT_ENTRY_KEY_SUFFIX: {}
495+
}
496+
},
497+
},
498+
FRR_ROUTES: {
499+
"0.0.0.0/0": [
500+
{
501+
"prefix": "0.0.0.0/0",
502+
"vrfName": "default",
503+
"protocol": "bgp",
504+
"selected": True,
505+
"offloaded": True,
506+
},
507+
],
508+
"10.10.196.12/31": [
509+
{
510+
"prefix": "10.10.196.12/31",
511+
"vrfName": "default",
512+
"protocol": "bgp",
513+
},
514+
],
515+
"10.10.196.24/31": [
516+
{
517+
"protocol": "connected",
518+
"selected": True,
519+
},
520+
],
521+
},
522+
},
523+
"13": {
469524
DESCR: "basic good one with IPv6 address",
470525
ARGS: "route_check -m INFO -i 1000",
471526
PRE: {
@@ -483,7 +538,7 @@
483538
}
484539
}
485540
},
486-
"11": {
541+
"14": {
487542
DESCR: "dualtor ignore vlan neighbor route miss case",
488543
ARGS: "route_check -i 15",
489544
RET: -1,

0 commit comments

Comments
 (0)