Skip to content

Commit

Permalink
lxd/network/driver/ovn: Re-use existing transaction for forward and l…
Browse files Browse the repository at this point in the history
…oad-balancer validation

Signed-off-by: Thomas Parrott <[email protected]>
  • Loading branch information
tomponline committed Feb 6, 2025
1 parent f6b5016 commit fcdaad1
Showing 1 changed file with 17 additions and 25 deletions.
42 changes: 17 additions & 25 deletions lxd/network/driver_ovn.go
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,8 @@ func (n *ovn) Validate(config map[string]string) error {
// Load the project and uplink network to validate restrictions.
var p *api.Project
var uplink *api.Network
var forwards map[int64]*api.NetworkForward
var loadBalancers map[int64]*api.NetworkLoadBalancer

err = n.state.DB.Cluster.Transaction(n.state.ShutdownCtx, func(ctx context.Context, tx *db.ClusterTx) error {
project, err := dbCluster.GetProject(ctx, tx.Tx(), n.project)
Expand All @@ -637,6 +639,20 @@ func (n *ovn) Validate(config map[string]string) error {
return fmt.Errorf("Failed to load uplink network %q: %w", uplinkNetworkName, err)
}

memberSpecific := false // OVN doesn't support per-member forwards or load-balancers.

// Get network forwards for validation later.
forwards, err = tx.GetNetworkForwards(ctx, n.ID(), memberSpecific)
if err != nil {
return fmt.Errorf("Failed loading network forwards: %w", err)
}

// Get network load-balancers for validation later.
loadBalancers, err = tx.GetNetworkLoadBalancers(ctx, n.ID(), memberSpecific)
if err != nil {
return fmt.Errorf("Failed loading network load balancers: %w", err)
}

return nil
})
if err != nil {
Expand Down Expand Up @@ -783,19 +799,6 @@ func (n *ovn) Validate(config map[string]string) error {
}

// Check any existing network forward target addresses are suitable for this network's subnet.
memberSpecific := false // OVN doesn't support per-member forwards.

var forwards map[int64]*api.NetworkForward

err = n.state.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
forwards, err = tx.GetNetworkForwards(ctx, n.ID(), memberSpecific)

return err
})
if err != nil {
return fmt.Errorf("Failed loading network forwards: %w", err)
}

for _, forward := range forwards {
if forward.Config["target_address"] != "" {
defaultTargetIP := net.ParseIP(forward.Config["target_address"])
Expand Down Expand Up @@ -824,18 +827,7 @@ func (n *ovn) Validate(config map[string]string) error {
}
}

var loadBalancers map[int64]*api.NetworkLoadBalancer

err = n.state.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
// Check any existing network load balancer backend addresses are suitable for this network's subnet.
loadBalancers, err = tx.GetNetworkLoadBalancers(ctx, n.ID(), memberSpecific)

return err
})
if err != nil {
return fmt.Errorf("Failed loading network load balancers: %w", err)
}

// Check any existing network load balancer backend addresses are suitable for this network's subnet.
for _, loadBalancer := range loadBalancers {
for _, port := range loadBalancer.Backends {
targetIP := net.ParseIP(port.TargetAddress)
Expand Down

0 comments on commit fcdaad1

Please sign in to comment.