kubernetes/kops · error

failed to loadbalancer ACTIVE provisioning status %v: %v

Error message

failed to loadbalancer ACTIVE provisioning status %v: %v

What it means

When creating a new LBPool, RenderOpenstack first waits for the parent load balancer to reach ACTIVE provisioning status via waitLoadbalancerActiveProvisioningStatus. If the wait times out or the LB transitions to ERROR, the error is wrapped with the last observed provisioning status. Creating a pool against a non-ACTIVE LB would be rejected by Octavia anyway.

Source

Thrown at upup/pkg/fi/cloudup/openstacktasks/lbpool.go:132

		}
	} else {
		if changes.ID != nil {
			return fi.CannotChangeField("ID")
		}
		if changes.Name != nil {
			return fi.CannotChangeField("Name")
		}
	}
	return nil
}

func (_ *LBPool) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes *LBPool) error {
	if a == nil {

		// wait that lb is in ACTIVE state
		provisioningStatus, err := waitLoadbalancerActiveProvisioningStatus(t.Cloud.LoadBalancerClient(), fi.ValueOf(e.Loadbalancer.ID))
		if err != nil {
			return fmt.Errorf("failed to loadbalancer ACTIVE provisioning status %v: %v", provisioningStatus, err)
		}

		LbMethod := v2pools.LBMethodRoundRobin
		if fi.ValueOf(e.Loadbalancer.Provider) == "ovn" {
			LbMethod = v2pools.LBMethodSourceIpPort
		}
		poolopts := v2pools.CreateOpts{
			Name:           fi.ValueOf(e.Name),
			LBMethod:       LbMethod,
			Protocol:       v2pools.ProtocolTCP,
			LoadbalancerID: fi.ValueOf(e.Loadbalancer.ID),
		}
		pool, err := t.Cloud.CreatePool(poolopts)
		if err != nil {
			return fmt.Errorf("error creating LB pool: %v", err)
		}
		e.ID = new(pool.ID)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Inspect LB state: openstack loadbalancer status show <lb-id>; fix the fault that left it in ERROR (often a failed listener/member).
  2. Delete and let kops recreate an LB stuck in ERROR: openstack loadbalancer delete --wait, then re-run kops update.
  3. Retry later if it is transient PENDING_* — amphora capacity issues often resolve after minutes.
  4. Check octavia control-plane/amphora health (agent list, image availability) in the cloud.

Example fix

// before: LB stuck in ERROR after failed listener
failed to loadbalancer ACTIVE provisioning status ERROR: timed out waiting
// after
$ openstack loadbalancer delete <lb-id> --wait
$ kops update cluster --name mycluster --yes  # recreates LB then pool
Defensive patterns

Strategy: retry

Validate before calling

lb := octaviaLBShow(lbID)
if lb.ProvisioningStatus == "ERROR" {
	return fmt.Errorf("LB %s is in ERROR state; fix or delete it before pool creation", lbID)
}

Try / catch

if err := kopsUpdate(); err != nil {
	if strings.Contains(err.Error(), "ACTIVE provisioning status") {
		// LB stuck in PENDING_*/ERROR: investigate, possibly delete and recreate
		return inspectOrRecreateLoadBalancer()
	}
	return err
}

Prevention

When it happens

Trigger: The parent LB stays in PENDING_CREATE/PENDING_UPDATE beyond the polling timeout, or its provisioning_status becomes ERROR after a failed earlier operation (listener/member creation) — then pool creation is aborted.

Common situations: Octavia amphora stuck booting (capacity/network issues); a previous task failed leaving LB in ERROR; slow cloud with default wait timeout too short; provider ovn LBs taking long to activate.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/0ccf4e944fa36312. Report an issue: GitHub.