kubernetes/kops · error

found VMSS without IP config properties

Error message

found VMSS without IP config properties

What it means

Find requires the selected IP configuration's Properties block to be non-nil in order to read the Subnet reference. An IP config without Properties carries no subnet information, so Find cannot map the VMSS to a kops subnet and returns this error.

Source

Thrown at upup/pkg/fi/cloudup/azuretasks/vmscaleset.go:141

	}

	profile := found.Properties.VirtualMachineProfile

	nwConfigs := profile.NetworkProfile.NetworkInterfaceConfigurations
	if len(nwConfigs) != 1 {
		return nil, fmt.Errorf("expecting exactly 1 network interface config for %q, found %d: %+v", *s.Name, len(nwConfigs), nwConfigs)
	}
	nwConfig := nwConfigs[0]
	if nwConfig.Properties == nil {
		return nil, fmt.Errorf("found VMSS without network interface config properties")
	}
	ipConfigs := nwConfig.Properties.IPConfigurations
	if len(ipConfigs) != 1 {
		return nil, fmt.Errorf("expecting exactly 1 network interface IP config for %q, found %d: %+v", *s.Name, len(ipConfigs), ipConfigs)
	}
	ipConfig := ipConfigs[0]
	if ipConfig.Properties == nil {
		return nil, fmt.Errorf("found VMSS without IP config properties")
	}
	if ipConfig.Properties.Subnet == nil {
		return nil, fmt.Errorf("found VMSS without IP config subnet")
	}
	if ipConfig.Properties.Subnet.ID == nil {
		return nil, fmt.Errorf("found VMSS without IP config subnet ID")
	}
	subnetID, err := azure.ParseSubnetID(*ipConfig.Properties.Subnet.ID)
	if err != nil {
		return nil, fmt.Errorf("failed to parse subnet ID %s", *ipConfig.Properties.Subnet.ID)
	}

	var loadBalancerID *azure.LoadBalancerID
	if ipConfig.Properties.LoadBalancerBackendAddressPools != nil {
		for _, i := range ipConfig.Properties.LoadBalancerBackendAddressPools {
			if !strings.Contains(*i.ID, "api") {
				continue
			}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Re-fetch / re-apply after the VMSS update settles and confirm the error clears.
  2. Set Properties on the mocked VirtualMachineScaleSetIPConfiguration in tests.
  3. Recreate a persistently malformed VMSS via kops apply.

Example fix

// before
ip := &compute.VirtualMachineScaleSetIPConfiguration{Name: &name}
// after
ip := &compute.VirtualMachineScaleSetIPConfiguration{Name: &name, Properties: &compute.VirtualMachineScaleSetIPConfigurationProperties{}}
Defensive patterns

Strategy: validation

Validate before calling

ip := ips[0]
if ip.Properties == nil {
    return fmt.Errorf("IP config %s has no properties; recreate VMSS", fi.ValueOf(ip.Name))
}

Type guard

func hasIPProperties(ip *compute.VirtualMachineScaleSetIPConfiguration) bool {
    return ip != nil && ip.Properties != nil
}

Try / catch

found, err := task.Find(ctx, cloud)
if err != nil {
    if strings.Contains(err.Error(), "without IP config properties") {
        return refetchAfterUpdate(err)
    }
    return err
}

Prevention

When it happens

Trigger: ipConfigs[0].Properties == nil — an IP configuration entry returned with only its name populated, typical of partial responses or incomplete fixtures.

Common situations: Mocked SDK responses missing Properties; Azure API returning a sparse entry mid-mutation; SDK version mismatch changing field population.

Related errors


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