kubernetes/kops · error
waiting for VMSS create/update: %w
Error message
waiting for VMSS create/update: %w
What it means
Wrapped when the long-running VMSS create/update fails during future.PollUntilDone — BeginCreateOrUpdate succeeded but the operation later entered a Failed/Cancelled state or the context ended. Azure-side provisioning problems (capacity, image, extensions) surface here rather than at Begin time.
Source
Thrown at upup/pkg/fi/cloudup/azure/vmscaleset.go:51
List(ctx context.Context, resourceGroupName string) ([]*compute.VirtualMachineScaleSet, error)
Get(ctx context.Context, resourceGroupName string, vmssName string) (*compute.VirtualMachineScaleSet, error)
Delete(ctx context.Context, resourceGroupName, vmssName string) error
}
type vmScaleSetsClientImpl struct {
c *compute.VirtualMachineScaleSetsClient
}
var _ VMScaleSetsClient = (*vmScaleSetsClientImpl)(nil)
func (c *vmScaleSetsClientImpl) CreateOrUpdate(ctx context.Context, resourceGroupName, vmScaleSetName string, parameters compute.VirtualMachineScaleSet) (*compute.VirtualMachineScaleSet, error) {
future, err := c.c.BeginCreateOrUpdate(ctx, resourceGroupName, vmScaleSetName, parameters, nil)
if err != nil {
return nil, fmt.Errorf("creating/updating VMSS: %w", err)
}
resp, err := future.PollUntilDone(ctx, nil)
if err != nil {
return nil, fmt.Errorf("waiting for VMSS create/update: %w", err)
}
return &resp.VirtualMachineScaleSet, nil
}
func (c *vmScaleSetsClientImpl) List(ctx context.Context, resourceGroupName string) ([]*compute.VirtualMachineScaleSet, error) {
if resourceGroupName == "" {
return nil, nil
}
var l []*compute.VirtualMachineScaleSet
pager := c.c.NewListPager(resourceGroupName, nil)
for pager.More() {
resp, err := pager.NextPage(ctx)
if err != nil {
var respErr *azcore.ResponseError
if errors.As(err, &respErr) && respErr.ErrorCode == "ResourceGroupNotFound" {
return nil, nil
}View on GitHub (pinned to 4c8573c808)
Solutions
- Check the VMSS provisioning state and the Azure Activity Log for the failed operation's error detail
- Retry the kops command — long-running operations can be safely re-issued
- If quota/capacity-related, choose a different vmSize/region or request a quota increase
- Avoid cancelling kops mid-roll; increase timeouts for large scale sets
Defensive patterns
Strategy: retry
Validate before calling
// Go: verify VM size quota/capacity in the target region before the long-running operation
sku, err := skuClient.List(ctx, rg, "location eq 'eastus'", nil)
if err == nil {
for _, s := range sku.Value {
if *s.Name == vmSize && len(s.Restrictions) > 0 {
return fmt.Errorf("vmSize %s restricted in region", vmSize)
}
}
} Try / catch
vmss, err := vmssClient.CreateOrUpdate(ctx, rg, name, parameters)
if err != nil {
if ctx.Err() != nil {
return fmt.Errorf("VMSS update interrupted; re-run kops to resume rolling update")
}
return fmt.Errorf("VMSS provisioning failed (quota/capacity/image?) — see Activity Log: %w", err)
} Prevention
- Check regional quota and capacity for the chosen vmSize before scaling
- Avoid cancelling kops during rolling updates
- Use a context timeout exceeding expected VMSS provisioning time
- Retry failed operations — BeginCreateOrUpdate is idempotent for the same spec
When it happens
Trigger: CreateOrUpdate's future.PollUntilDone(ctx, nil) returns an error: VMSS provisioning failed (capacity constraints, quota exceeded, invalid image rollout), the context was cancelled/timed out, or ARM throttling exhausted retries.
Common situations: Regional capacity restrictions for the chosen VM size; subscription vCPU quota exhausted; rolling-update of an existing VMSS interrupted by Ctrl-C; image download failures during provisioning.
Related errors
- creating/updating VMSS: %w
- listing VMSSs: %w
- waiting for virtual network create/update completion: %w
- waiting for virtual network deletion completion: %w
- waiting for VMSS deletion completion: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/78b5cf483abf8cc6.
Report an issue: GitHub.