Skip to content

Commit

Permalink
T5941: Migration policy delete orphaned interface policy
Browse files Browse the repository at this point in the history
We can get orphaned interface policy when the policy name was
removed from the interface but the node `policy` still attached
to the interface

For exmaple we have orphaned node policy on interface:
```
set interfaces bonding bond0 vif 995 policy
```

This causes of incorrect migration and we do not see VLANs on
the bonding interface after update.

Delete policy from all interfaces if policy does not exist
  • Loading branch information
sever-sever committed Jan 24, 2024
1 parent d736a9b commit 6ec3e9a
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions src/migration-scripts/policy/4-to-5
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,54 @@ 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']):
print('FOO: ', ['interfaces', iftype, ifname, 'vif', 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 6ec3e9a

Please sign in to comment.