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