Skip to content

Commit

Permalink
Merge pull request #2917 from vyos/mergify/bp/sagitta/pr-2890
Browse files Browse the repository at this point in the history
T5941: Migration policy delete orphaned interface policy (backport #2890)
  • Loading branch information
c-po committed Feb 1, 2024
2 parents d5d9e5d + 17937d8 commit 76f85f5
Showing 1 changed file with 47 additions and 1 deletion.
48 changes: 47 additions & 1 deletion src/migration-scripts/policy/4-to-5
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
# Copyright (C) 2022 VyOS maintainers and contributors
# Copyright (C) 2022-2024 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
Expand Down Expand Up @@ -37,7 +37,53 @@ base4 = ['policy', 'route']
base6 = ['policy', 'route6']
config = ConfigTree(config_file)


def delete_orphaned_interface_policy(config, iftype, ifname, vif=None, vifs=None, vifc=None):
"""Delete unexpected policy on interfaces in cases when
policy does not exist but inreface has a policy configuration
Example T5941:
set interfaces bonding bond0 vif 995 policy
"""
if_path = ['interfaces', iftype, ifname]

if vif:
if_path += ['vif', vif]
elif vifs:
if_path += ['vif-s', vifs]
if vifc:
if_path += ['vif-c', vifc]

if not config.exists(if_path + ['policy']):
return

config.delete(if_path + ['policy'])


if not config.exists(base4) and not config.exists(base6):
# Delete orphaned nodes on interfaces T5941
for iftype in config.list_nodes(['interfaces']):
for ifname in config.list_nodes(['interfaces', iftype]):
delete_orphaned_interface_policy(config, iftype, ifname)

if config.exists(['interfaces', iftype, ifname, 'vif']):
for vif in config.list_nodes(['interfaces', iftype, ifname, 'vif']):
delete_orphaned_interface_policy(config, iftype, ifname, vif=vif)

if config.exists(['interfaces', iftype, ifname, 'vif-s']):
for vifs in config.list_nodes(['interfaces', iftype, ifname, 'vif-s']):
delete_orphaned_interface_policy(config, iftype, ifname, vifs=vifs)

if config.exists(['interfaces', iftype, ifname, 'vif-s', vifs, 'vif-c']):
for vifc in config.list_nodes(['interfaces', iftype, ifname, 'vif-s', vifs, 'vif-c']):
delete_orphaned_interface_policy(config, iftype, ifname, vifs=vifs, vifc=vifc)

try:
with open(file_name, 'w') as f:
f.write(config.to_string())
except OSError as e:
print("Failed to save the modified config: {}".format(e))
exit(1)

# Nothing to do
exit(0)

Expand Down

0 comments on commit 76f85f5

Please sign in to comment.