{"record":{"id":"5919bb09005ad6af","repo":"kubernetes/kops","slug":"found-vmss-without-ip-config-properties","errorCode":null,"errorMessage":"found VMSS without IP config properties","messagePattern":"found VMSS without IP config properties","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/azuretasks/vmscaleset.go","lineNumber":141,"sourceCode":"\t}\n\n\tprofile := found.Properties.VirtualMachineProfile\n\n\tnwConfigs := profile.NetworkProfile.NetworkInterfaceConfigurations\n\tif len(nwConfigs) != 1 {\n\t\treturn nil, fmt.Errorf(\"expecting exactly 1 network interface config for %q, found %d: %+v\", *s.Name, len(nwConfigs), nwConfigs)\n\t}\n\tnwConfig := nwConfigs[0]\n\tif nwConfig.Properties == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without network interface config properties\")\n\t}\n\tipConfigs := nwConfig.Properties.IPConfigurations\n\tif len(ipConfigs) != 1 {\n\t\treturn nil, fmt.Errorf(\"expecting exactly 1 network interface IP config for %q, found %d: %+v\", *s.Name, len(ipConfigs), ipConfigs)\n\t}\n\tipConfig := ipConfigs[0]\n\tif ipConfig.Properties == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without IP config properties\")\n\t}\n\tif ipConfig.Properties.Subnet == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without IP config subnet\")\n\t}\n\tif ipConfig.Properties.Subnet.ID == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without IP config subnet ID\")\n\t}\n\tsubnetID, err := azure.ParseSubnetID(*ipConfig.Properties.Subnet.ID)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse subnet ID %s\", *ipConfig.Properties.Subnet.ID)\n\t}\n\n\tvar loadBalancerID *azure.LoadBalancerID\n\tif ipConfig.Properties.LoadBalancerBackendAddressPools != nil {\n\t\tfor _, i := range ipConfig.Properties.LoadBalancerBackendAddressPools {\n\t\t\tif !strings.Contains(*i.ID, \"api\") {\n\t\t\t\tcontinue\n\t\t\t}","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/azuretasks/vmscaleset.go#L123-L159","documentation":"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.","triggerScenarios":"ipConfigs[0].Properties == nil — an IP configuration entry returned with only its name populated, typical of partial responses or incomplete fixtures.","commonSituations":"Mocked SDK responses missing Properties; Azure API returning a sparse entry mid-mutation; SDK version mismatch changing field population.","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."],"exampleFix":"// before\nip := &compute.VirtualMachineScaleSetIPConfiguration{Name: &name}\n// after\nip := &compute.VirtualMachineScaleSetIPConfiguration{Name: &name, Properties: &compute.VirtualMachineScaleSetIPConfigurationProperties{}}","handlingStrategy":"validation","validationCode":"ip := ips[0]\nif ip.Properties == nil {\n    return fmt.Errorf(\"IP config %s has no properties; recreate VMSS\", fi.ValueOf(ip.Name))\n}","typeGuard":"func hasIPProperties(ip *compute.VirtualMachineScaleSetIPConfiguration) bool {\n    return ip != nil && ip.Properties != nil\n}","tryCatchPattern":"found, err := task.Find(ctx, cloud)\nif err != nil {\n    if strings.Contains(err.Error(), \"without IP config properties\") {\n        return refetchAfterUpdate(err)\n    }\n    return err\n}","preventionTips":["Set Properties in every mocked IPConfiguration.","Avoid reconciling while the VMSS is mid-mutation.","Pin the azure-sdk-for-go version used by kops."],"tags":["azure","vmss","ip-configuration"],"backgroundTag":"azure-vmss-invalid-profile","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}