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
- Re-fetch / re-apply after the VMSS update settles and confirm the error clears.
- Set Properties on the mocked VirtualMachineScaleSetIPConfiguration in tests.
- 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
- Set Properties in every mocked IPConfiguration.
- Avoid reconciling while the VMSS is mid-mutation.
- Pin the azure-sdk-for-go version used by kops.
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
- expecting exactly 1 network interface IP config for %q, foun
- expected exactly one subnet for InstanceGroup %q; subnets wa
- unexpected subnet type: for InstanceGroup %q; type was %s
- instance group must have the same min and max size in Azure,
- malformed format of image urn: %s
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/5919bb09005ad6af.
Report an issue: GitHub.