{"record":{"id":"6e2a38d9c67fcb48","repo":"kubernetes/kops","slug":"found-vmss-without-network-interface-config-proper","errorCode":null,"errorMessage":"found VMSS without network interface config properties","messagePattern":"found VMSS without network interface config properties","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/azuretasks/vmscaleset.go","lineNumber":133,"sourceCode":"\tif found.Properties.VirtualMachineProfile == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without VM profile\")\n\t}\n\tif found.Properties.VirtualMachineProfile.NetworkProfile == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without network profile\")\n\t}\n\tif found.Properties.VirtualMachineProfile.OSProfile == nil {\n\t\treturn nil, fmt.Errorf(\"found VMSS without OS profile\")\n\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)","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/azuretasks/vmscaleset.go#L115-L151","documentation":"After selecting the single NIC configuration, Find requires its Properties block to be non-nil to read IP configurations. A NIC config without Properties cannot yield subnet or backend-pool information, so reconciliation aborts with this error.","triggerScenarios":"nwConfigs[0].Properties == nil in the returned VMSS — a NIC config entry present but its properties not populated (partial API response or fixture).","commonSituations":"Incomplete Azure response during a concurrent update; test mocks constructing NetworkConfiguration without Properties; SDK type shape changes.","solutions":["Re-run kops apply / re-fetch after the VMSS update completes.","Populate Properties on the mocked NetworkInterfaceConfiguration in tests.","Delete and recreate a persistently malformed VMSS via kops apply."],"exampleFix":"// before\nnic := &compute.VirtualMachineScaleSetNetworkConfiguration{Name: &name}\n// after\nnic := &compute.VirtualMachineScaleSetNetworkConfiguration{Name: &name, Properties: &compute.VirtualMachineScaleSetNetworkConfigurationProperties{}}","handlingStrategy":"validation","validationCode":"nic := nics[0]\nif nic.Properties == nil {\n    return fmt.Errorf(\"NIC config %s has no properties; re-fetch or recreate VMSS\", fi.ValueOf(nic.Name))\n}","typeGuard":"func hasNICProperties(nic *compute.VirtualMachineScaleSetNetworkConfiguration) bool {\n    return nic != nil && nic.Properties != nil\n}","tryCatchPattern":"found, err := task.Find(ctx, cloud)\nif err != nil {\n    if strings.Contains(err.Error(), \"without network interface config properties\") {\n        return refetchAfterUpdate(err)\n    }\n    return err\n}","preventionTips":["Populate Properties on mocked NetworkConfiguration objects.","Wait for in-flight VMSS updates to finish before reconciling.","Re-apply if the API returns sparse entries."],"tags":["azure","vmss","network-interface"],"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"}