Skip to content

Load balancer support#638

Open
eshulman2 wants to merge 3 commits intok-orc:mainfrom
eshulman2:add_lb
Open

Load balancer support#638
eshulman2 wants to merge 3 commits intok-orc:mainfrom
eshulman2:add_lb

Conversation

@eshulman2
Copy link
Contributor

@eshulman2 eshulman2 commented Jan 11, 2026

Add support for OpenStack Octavia Load Balancer resources. This includes:

  • LoadBalancer CRD with support for VIP subnet/network/port references
  • Controller with create, update, delete, and import capabilities
  • Status reporting with provisioning and operating status
  • Dependency resolution for Subnet, Network, Port, and Project references
  • Kuttl tests for create, update, import, and dependency scenarios

@github-actions github-actions bot added the semver:major Breaking change label Jan 11, 2026
@eshulman2 eshulman2 changed the title Add_lb Load balancer support Jan 11, 2026
@eshulman2
Copy link
Contributor Author

/retest

@eshulman2 eshulman2 force-pushed the add_lb branch 8 times, most recently from d616eb6 to 4a22540 Compare February 2, 2026 13:59
- allow testing octavia by enabling it in the e2e job
- increase vm qouta to allow e2e to run
$ go run ./cmd/scaffold-controller -interactive=false     -kind=LoadBalancer     -gophercloud-client=NewLoadBalancerV2     -gophercloud-module=github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/loadbalancers     -optional-create-dependency Subnet     -optional-create-dependency Network     -optional-create-dependency Port     -optional-create-dependency Flavor     -optional-create-dependency Project
Add support for OpenStack Octavia Load Balancer resources. This includes:

- LoadBalancer CRD with support for VIP subnet/network/port references
- Controller with create, update, delete, and import capabilities
- Status reporting with provisioning and operating status
- Dependency resolution for Subnet, Network, Port, and Project references
- Kuttl tests for create, update, import, and dependency scenarios

Closes k-orc#619
Copy link
Contributor

@winiciusallan winiciusallan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @eshulman2, that was a huge job, huh? I've just made a small round of review, and I'll take a look at the missing files this week.

Let me know what you think about the comments.

// vipSubnetRef is the subnet on which to allocate the load balancer's address.
// +optional
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="vipSubnetRef is immutable"
VipSubnetRef *KubernetesNameRef `json:"vipSubnetRef,omitempty"`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: since VIP is an acronym, I would change it to VIPSubnetRef. This counts for all occurrences.

K8s has a convention for this 👉 https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#constants

return progress.WrapError(err)
}

func (actuator loadbalancerActuator) updateResource(ctx context.Context, obj orcObjectPT, osResource *osResourceT) progress.ReconcileStatus {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if we need to check for the Loadbalancer status before performing an update operation, since we can't update the load balancer if it has a PENDING_UPDATE status. I think the controller itself will retry the update when checking the NeedsRefresh. Am I missing something?

metadata:
name: loadbalancer-create-minimal
status:
resource:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add adminStateUp here as well since it has a default value.

kind: Subnet
name: loadbalancer-create-minimal
ref: subnet
assertAll:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could exercise more dynamic checks here, like having an empty description. Is there a default availability zone?

Comment on lines +48 to +50
[[post-config|/etc/nova/nova.conf]]
[quota]
instances = 50
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't get why we need to change the instance quota here. Could you please explain?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this file be here or is it part of a new enhancement proposal?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

semver:major Breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments