Skip to content

Commit 49bbed8

Browse files
authored
controller: migrate acl tier after upgrade (#5351)
Signed-off-by: zhangzujian <[email protected]>
1 parent 82ef65f commit 49bbed8

File tree

4 files changed

+74
-1
lines changed

4 files changed

+74
-1
lines changed

mocks/pkg/ovs/interface.go

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/controller/init.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ import (
2828

2929
func (c *Controller) InitOVN() error {
3030
var err error
31+
if err = c.migrateACLTier(); err != nil {
32+
klog.Errorf("failed to migrate ACL tier: %v", err)
33+
return err
34+
}
3135

32-
if err := c.InitDefaultVpc(); err != nil {
36+
if err = c.InitDefaultVpc(); err != nil {
3337
klog.Errorf("init default vpc failed: %v", err)
3438
return err
3539
}
@@ -64,6 +68,13 @@ func (c *Controller) InitOVN() error {
6468
return nil
6569
}
6670

71+
// migrate tier field of ACL rules created in versions prior to v1.13.0
72+
// after upgrading, the tier field has a default value of zero, which is not the value used in versions >= v1.13.0
73+
// we need to migrate the tier field to the correct value
74+
func (c *Controller) migrateACLTier() error {
75+
return c.OVNNbClient.MigrateACLTier()
76+
}
77+
6778
func (c *Controller) InitDefaultVpc() error {
6879
cachedVpc, err := c.vpcsLister.Get(c.config.ClusterRouter)
6980
if err != nil {

pkg/ovs/interface.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ type ACL interface {
171171
DeleteAcls(parentName, parentType, direction string, externalIDs map[string]string) error
172172
DeleteAclsOps(parentName, parentType, direction string, externalIDs map[string]string) ([]ovsdb.Operation, error)
173173
UpdateAnpRuleACLOps(pgName, asName, protocol, aclName string, priority int, aclAction ovnnb.ACLAction, logACLActions []ovnnb.ACLAction, rulePorts []v1alpha1.AdminNetworkPolicyPort, isIngress, isBanp bool) ([]ovsdb.Operation, error)
174+
MigrateACLTier() error
174175
}
175176

176177
type AddressSet interface {

pkg/ovs/ovn-nb-acl.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,3 +1453,36 @@ func newAnpACLMatch(pgName, asName, protocol, direction string, rulePorts []v1al
14531453
}
14541454
return matches
14551455
}
1456+
1457+
func (c *OVNNbClient) MigrateACLTier() error {
1458+
ctx, cancel := context.WithTimeout(context.Background(), c.Timeout)
1459+
defer cancel()
1460+
1461+
var aclList []ovnnb.ACL
1462+
if err := c.ovsDbClient.WhereCache(func(acl *ovnnb.ACL) bool { return acl.Tier == 0 }).List(ctx, &aclList); err != nil {
1463+
err = fmt.Errorf("failed to list acls with tier 0: %w", err)
1464+
klog.Error(err)
1465+
return err
1466+
}
1467+
1468+
ops := make([]ovsdb.Operation, 0, len(aclList))
1469+
for _, acl := range aclList {
1470+
acl.Tier = util.NetpolACLTier
1471+
op, err := c.Where(&acl).Update(&acl, &acl.Tier)
1472+
if err != nil {
1473+
klog.Error(err)
1474+
return fmt.Errorf("failed to generate operations for updating acl %s tier: %w", acl.UUID, err)
1475+
}
1476+
ops = append(ops, op...)
1477+
}
1478+
if len(ops) == 0 {
1479+
return nil
1480+
}
1481+
1482+
if err := c.Transact("acl-migrate-tier", ops); err != nil {
1483+
klog.Error(err)
1484+
return fmt.Errorf("failed to migrate acl tier: %w", err)
1485+
}
1486+
1487+
return nil
1488+
}

0 commit comments

Comments
 (0)