Skip to content

Commit d44d634

Browse files
cony7642Minkang-Tsai
authored andcommitted
[config] Merge duplicate vrf configuration (sonic-net#759)
Merge two vrf configuration to avoid user can't add or delete management VRF through CLI. Co-authored-by: Minkang-Tsai <58835052+Minkang-Tsai@users.noreply.github.com>
1 parent 98e8795 commit d44d634

1 file changed

Lines changed: 16 additions & 43 deletions

File tree

config/main.py

Lines changed: 16 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,59 +1004,26 @@ def mvrf_restart_services():
10041004
cmd="service ntp start"
10051005
os.system (cmd)
10061006

1007-
def vrf_add_management_vrf():
1007+
def vrf_add_management_vrf(config_db):
10081008
"""Enable management vrf in config DB"""
10091009

1010-
config_db = ConfigDBConnector()
1011-
config_db.connect()
10121010
entry = config_db.get_entry('MGMT_VRF_CONFIG', "vrf_global")
10131011
if entry and entry['mgmtVrfEnabled'] == 'true' :
10141012
click.echo("ManagementVRF is already Enabled.")
10151013
return None
10161014
config_db.mod_entry('MGMT_VRF_CONFIG',"vrf_global",{"mgmtVrfEnabled": "true"})
10171015
mvrf_restart_services()
10181016

1019-
def vrf_delete_management_vrf():
1017+
def vrf_delete_management_vrf(config_db):
10201018
"""Disable management vrf in config DB"""
10211019

1022-
config_db = ConfigDBConnector()
1023-
config_db.connect()
10241020
entry = config_db.get_entry('MGMT_VRF_CONFIG', "vrf_global")
10251021
if not entry or entry['mgmtVrfEnabled'] == 'false' :
10261022
click.echo("ManagementVRF is already Disabled.")
10271023
return None
10281024
config_db.mod_entry('MGMT_VRF_CONFIG',"vrf_global",{"mgmtVrfEnabled": "false"})
10291025
mvrf_restart_services()
10301026

1031-
#
1032-
# 'vrf' group ('config vrf ...')
1033-
#
1034-
1035-
@config.group('vrf')
1036-
def vrf():
1037-
"""VRF-related configuration tasks"""
1038-
pass
1039-
1040-
@vrf.command('add')
1041-
@click.argument('vrfname', metavar='<vrfname>. Type mgmt for management VRF', required=True)
1042-
@click.pass_context
1043-
def vrf_add (ctx, vrfname):
1044-
"""Create management VRF and move eth0 into it"""
1045-
if vrfname == 'mgmt' or vrfname == 'management':
1046-
vrf_add_management_vrf()
1047-
else:
1048-
click.echo("Creation of data vrf={} is not yet supported".format(vrfname))
1049-
1050-
@vrf.command('del')
1051-
@click.argument('vrfname', metavar='<vrfname>. Type mgmt for management VRF', required=False)
1052-
@click.pass_context
1053-
def vrf_del (ctx, vrfname):
1054-
"""Delete management VRF and move back eth0 to default VRF"""
1055-
if vrfname == 'mgmt' or vrfname == 'management':
1056-
vrf_delete_management_vrf()
1057-
else:
1058-
click.echo("Deletion of data vrf={} is not yet supported".format(vrfname))
1059-
10601027
@config.group()
10611028
@click.pass_context
10621029
def snmpagentaddress(ctx):
@@ -1581,7 +1548,7 @@ def unbind(ctx, interface_name):
15811548
# 'vrf' group ('config vrf ...')
15821549
#
15831550

1584-
@config.group()
1551+
@config.group('vrf')
15851552
@click.pass_context
15861553
def vrf(ctx):
15871554
"""VRF-related configuration tasks"""
@@ -1597,24 +1564,30 @@ def vrf(ctx):
15971564
def add_vrf(ctx, vrf_name):
15981565
"""Add vrf"""
15991566
config_db = ctx.obj['config_db']
1600-
if not vrf_name.startswith("Vrf"):
1601-
ctx.fail("'vrf_name' is not start with Vrf!")
1567+
if not vrf_name.startswith("Vrf") and not (vrf_name == 'mgmt') and not (vrf_name == 'management'):
1568+
ctx.fail("'vrf_name' is not start with Vrf, mgmt or management!")
16021569
if len(vrf_name) > 15:
16031570
ctx.fail("'vrf_name' is too long!")
1604-
config_db.set_entry('VRF', vrf_name, {"NULL": "NULL"})
1571+
if (vrf_name == 'mgmt' or vrf_name == 'management'):
1572+
vrf_add_management_vrf(config_db)
1573+
else:
1574+
config_db.set_entry('VRF', vrf_name, {"NULL": "NULL"})
16051575

16061576
@vrf.command('del')
16071577
@click.argument('vrf_name', metavar='<vrf_name>', required=True)
16081578
@click.pass_context
16091579
def del_vrf(ctx, vrf_name):
16101580
"""Del vrf"""
16111581
config_db = ctx.obj['config_db']
1612-
if not vrf_name.startswith("Vrf"):
1613-
ctx.fail("'vrf_name' is not start with Vrf!")
1582+
if not vrf_name.startswith("Vrf") and not (vrf_name == 'mgmt') and not (vrf_name == 'management'):
1583+
ctx.fail("'vrf_name' is not start with Vrf, mgmt or management!")
16141584
if len(vrf_name) > 15:
16151585
ctx.fail("'vrf_name' is too long!")
1616-
del_interface_bind_to_vrf(config_db, vrf_name)
1617-
config_db.set_entry('VRF', vrf_name, None)
1586+
if (vrf_name == 'mgmt' or vrf_name == 'management'):
1587+
vrf_delete_management_vrf(config_db)
1588+
else:
1589+
del_interface_bind_to_vrf(config_db, vrf_name)
1590+
config_db.set_entry('VRF', vrf_name, None)
16181591

16191592

16201593
#

0 commit comments

Comments
 (0)