|
8 | 8 | import re
|
9 | 9 |
|
10 | 10 | from sonic_py_common import device_info, logger
|
| 11 | +from swsssdk import ConfigDBConnector, SonicDBConfig |
11 | 12 | from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector, SonicDBConfig
|
| 13 | +from db_migrator_constants import RESTAPI, TELEMETRY, CONSOLE_SWITCH |
12 | 14 |
|
13 | 15 | INIT_CFG_FILE = '/etc/sonic/init_cfg.json'
|
14 | 16 |
|
@@ -485,6 +487,61 @@ def migrate_qos_fieldval_reference_format(self):
|
485 | 487 | self.migrate_qos_db_fieldval_reference_remove(qos_table_list, self.configDB, self.configDB.CONFIG_DB, '|')
|
486 | 488 | return True
|
487 | 489 |
|
| 490 | + def migrate_vxlan_config(self): |
| 491 | + log.log_notice('Migrate VXLAN table config') |
| 492 | + # Collect VXLAN data from config DB |
| 493 | + vxlan_data = self.configDB.keys(self.configDB.CONFIG_DB, "VXLAN_TUNNEL*") |
| 494 | + if not vxlan_data: |
| 495 | + # do nothing if vxlan entries are not present in configdb |
| 496 | + return |
| 497 | + for vxlan_table in vxlan_data: |
| 498 | + vxlan_map_mapping = self.configDB.get_all(self.configDB.CONFIG_DB, vxlan_table) |
| 499 | + tunnel_keys = vxlan_table.split(self.configDB.KEY_SEPARATOR) |
| 500 | + tunnel_keys[0] = tunnel_keys[0] + "_TABLE" |
| 501 | + vxlan_table = self.appDB.get_db_separator(self.appDB.APPL_DB).join(tunnel_keys) |
| 502 | + for field, value in vxlan_map_mapping.items(): |
| 503 | + # add entries from configdb to appdb only when they are missing |
| 504 | + if not self.appDB.hexists(self.appDB.APPL_DB, vxlan_table, field): |
| 505 | + log.log_notice('Copying vxlan entries from configdb to appdb: updated {} with {}:{}'.format( |
| 506 | + vxlan_table, field, value)) |
| 507 | + self.appDB.set(self.appDB.APPL_DB, vxlan_table, field, value) |
| 508 | + |
| 509 | + def migrate_restapi(self): |
| 510 | + # RESTAPI - add missing key |
| 511 | + log.log_notice('Migrate RESTAPI configuration') |
| 512 | + config = self.configDB.get_entry('RESTAPI', 'config') |
| 513 | + if not config: |
| 514 | + self.configDB.set_entry("RESTAPI", "config", RESTAPI.get("config")) |
| 515 | + certs = self.configDB.get_entry('RESTAPI', 'certs') |
| 516 | + if not certs: |
| 517 | + self.configDB.set_entry("RESTAPI", "certs", RESTAPI.get("certs")) |
| 518 | + |
| 519 | + def migrate_telemetry(self): |
| 520 | + # TELEMETRY - add missing key |
| 521 | + log.log_notice('Migrate TELEMETRY configuration') |
| 522 | + gnmi = self.configDB.get_entry('TELEMETRY', 'gnmi') |
| 523 | + if not gnmi: |
| 524 | + self.configDB.set_entry("TELEMETRY", "gnmi", TELEMETRY.get("gnmi")) |
| 525 | + certs = self.configDB.get_entry('TELEMETRY', 'certs') |
| 526 | + if not certs: |
| 527 | + self.configDB.set_entry("TELEMETRY", "certs", TELEMETRY.get("certs")) |
| 528 | + |
| 529 | + def migrate_console_switch(self): |
| 530 | + # CONSOLE_SWITCH - add missing key |
| 531 | + log.log_notice('Migrate CONSOLE_SWITCH configuration') |
| 532 | + console_mgmt = self.configDB.get_entry('CONSOLE_SWITCH', 'console_mgmt') |
| 533 | + if not console_mgmt: |
| 534 | + self.configDB.set_entry("CONSOLE_SWITCH", "console_mgmt", |
| 535 | + CONSOLE_SWITCH.get("console_mgmt")) |
| 536 | + |
| 537 | + def migrate_device_metadata(self): |
| 538 | + # DEVICE_METADATA - synchronous_mode entry |
| 539 | + log.log_notice('Migrate DEVICE_METADATA missing configuration (synchronous_mode=enable)') |
| 540 | + metadata = self.configDB.get_entry('DEVICE_METADATA', 'localhost') |
| 541 | + if 'synchronous_mode' not in metadata: |
| 542 | + metadata['synchronous_mode'] = 'enable' |
| 543 | + self.configDB.set_entry('DEVICE_METADATA', 'localhost', metadata) |
| 544 | + |
488 | 545 | def migrate_port_qos_map_global(self):
|
489 | 546 | """
|
490 | 547 | Generate dscp_to_tc_map for switch.
|
@@ -647,10 +704,25 @@ def version_2_0_0(self):
|
647 | 704 |
|
648 | 705 | def version_2_0_1(self):
|
649 | 706 | """
|
650 |
| - Version 2_0_1. |
651 |
| - This is the latest version for 202012 branch |
| 707 | + Handle and migrate missing config that results from cross branch upgrade to |
| 708 | + 202012 as target. |
652 | 709 | """
|
653 | 710 | log.log_info('Handling version_2_0_1')
|
| 711 | + self.migrate_vxlan_config() |
| 712 | + self.migrate_restapi() |
| 713 | + self.migrate_telemetry() |
| 714 | + self.migrate_console_switch() |
| 715 | + self.migrate_device_metadata() |
| 716 | + |
| 717 | + self.set_version('version_2_0_2') |
| 718 | + return 'version_2_0_2' |
| 719 | + |
| 720 | + def version_2_0_2(self): |
| 721 | + """ |
| 722 | + Version 2_0_2 |
| 723 | + This is the latest version for 202012 branch |
| 724 | + """ |
| 725 | + log.log_info('Handling version_2_0_2') |
654 | 726 | self.set_version('version_3_0_0')
|
655 | 727 | return 'version_3_0_0'
|
656 | 728 |
|
|
0 commit comments