@@ -47,7 +47,7 @@ def __init__(self, namespace, socket=None):
4747 none-zero values.
4848 build: sequentially increase within a minor version domain.
4949 """
50- self .CURRENT_VERSION = 'version_4_0_3 '
50+ self .CURRENT_VERSION = 'version_4_0_4 '
5151
5252 self .TABLE_NAME = 'VERSIONS'
5353 self .TABLE_KEY = 'DATABASE'
@@ -646,6 +646,7 @@ def migrate_feature_timer(self):
646646 config ['delayed' ] = state
647647 config .pop ('has_timer' )
648648 self .configDB .set_entry ('FEATURE' , feature , config )
649+
649650 def migrate_route_table (self ):
650651 """
651652 Handle route table migration. Migrations handled:
@@ -669,6 +670,33 @@ def migrate_route_table(self):
669670 if 'protocol' not in route_attr :
670671 self .appDB .set (self .appDB .APPL_DB , route_key , 'protocol' , '' )
671672
673+ def migrate_dns_nameserver (self ):
674+ """
675+ Handle DNS_NAMESERVER table migration. Migrations handled:
676+ If there's no DNS_NAMESERVER in config_DB, load DNS_NAMESERVER from minigraph
677+ """
678+ if not self .minigraph_data or 'DNS_NAMESERVER' not in self .minigraph_data :
679+ return
680+ dns_table = self .configDB .get_table ('DNS_NAMESERVER' )
681+ if not dns_table :
682+ for addr , config in self .minigraph_data ['DNS_NAMESERVER' ].items ():
683+ self .configDB .set_entry ('DNS_NAMESERVER' , addr , config )
684+
685+ def migrate_routing_config_mode (self ):
686+ # DEVICE_METADATA - synchronous_mode entry
687+ if not self .minigraph_data or 'DEVICE_METADATA' not in self .minigraph_data :
688+ return
689+ device_metadata_old = self .configDB .get_entry ('DEVICE_METADATA' , 'localhost' )
690+ device_metadata_new = self .minigraph_data ['DEVICE_METADATA' ]['localhost' ]
691+ # overwrite the routing-config-mode as per minigraph parser
692+ # Criteria for update:
693+ # if config mode is missing in base OS or if base and target modes are not same
694+ # Eg. in 201811 mode is "unified", and in newer branches mode is "separated"
695+ if ('docker_routing_config_mode' not in device_metadata_old and 'docker_routing_config_mode' in device_metadata_new ) or \
696+ (device_metadata_old .get ('docker_routing_config_mode' ) != device_metadata_new .get ('docker_routing_config_mode' )):
697+ device_metadata_old ['docker_routing_config_mode' ] = device_metadata_new .get ('docker_routing_config_mode' )
698+ self .configDB .set_entry ('DEVICE_METADATA' , 'localhost' , device_metadata_old )
699+
672700 def update_edgezone_aggregator_config (self ):
673701 """
674702 Update cable length configuration in ConfigDB for T0 neighbor interfaces
@@ -1041,19 +1069,29 @@ def version_4_0_3(self):
10411069 Version 4_0_3.
10421070 """
10431071 log .log_info ('Handling version_4_0_3' )
1044-
1045- self .migrate_config_db_switchport_mode ()
1072+
1073+ # Updating DNS nameserver
1074+ self .migrate_dns_nameserver ()
10461075 self .set_version ('version_4_0_4' )
10471076 return 'version_4_0_4'
1048-
1077+
10491078 def version_4_0_4 (self ):
10501079 """
10511080 Version 4_0_4.
1052- This is the latest version for master branch
10531081 """
10541082 log .log_info ('Handling version_4_0_4' )
1083+
1084+ self .migrate_config_db_switchport_mode ()
1085+ self .set_version ('version_4_0_4' )
1086+ return 'version_4_0_5'
1087+
1088+ def version_4_0_5 (self ):
1089+ """
1090+ Version 4_0_5.
1091+ This is the latest version for master branch
1092+ """
1093+ log .log_info ('Handling version_4_0_5' )
10551094 return None
1056-
10571095
10581096 def get_version (self ):
10591097 version = self .configDB .get_entry (self .TABLE_NAME , self .TABLE_KEY )
@@ -1103,6 +1141,8 @@ def common_migration_ops(self):
11031141
11041142 # Updating edgezone aggregator cable length config for T0 devices
11051143 self .update_edgezone_aggregator_config ()
1144+ # update FRR config mode based on minigraph parser on target image
1145+ self .migrate_routing_config_mode ()
11061146
11071147 def migrate (self ):
11081148 version = self .get_version ()
0 commit comments