{"record":{"id":"7f28c10e24fa2134","repo":"kubernetes/kops","slug":"creating-virtual-networks-client-w","errorCode":null,"errorMessage":"creating virtual networks client: %w","messagePattern":"creating virtual networks client: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/azure/virtualnetwork.go","lineNumber":89,"sourceCode":"\t}\n\treturn l, nil\n}\n\nfunc (c *virtualNetworksClientImpl) Delete(ctx context.Context, resourceGroupName, vnetName string) error {\n\tfuture, err := c.c.BeginDelete(ctx, resourceGroupName, vnetName, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"deleting virtual network: %w\", err)\n\t}\n\tif _, err = future.PollUntilDone(ctx, nil); err != nil {\n\t\treturn fmt.Errorf(\"waiting for virtual network deletion completion: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc newVirtualNetworksClientImpl(subscriptionID string, cred *azidentity.DefaultAzureCredential) (*virtualNetworksClientImpl, error) {\n\tc, err := network.NewVirtualNetworksClient(subscriptionID, cred, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating virtual networks client: %w\", err)\n\t}\n\treturn &virtualNetworksClientImpl{\n\t\tc: c,\n\t}, nil\n}\n","sourceCodeStart":71,"sourceCodeEnd":95,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/azure/virtualnetwork.go#L71-L95","documentation":"Wrapped when construction of the Azure SDK network.NewVirtualNetworksClient fails inside newVirtualNetworksClientImpl, which is invoked by newAzureCloud. This mirrors error 2440 but for the virtual networks data-plane client; the root cause is almost always credential or subscription problems in DefaultAzureCredential, not the vnet itself.","triggerScenarios":"newVirtualNetworksClientImpl calls network.NewVirtualNetworksClient(subscriptionID, cred, nil) and the SDK returns an error — invalid subscription ID format, credential chain exhausted, or client construction failure (bad pipeline options/endpoint).","commonSituations":"First-time kops azure setup without any credentials configured; AZURE_SUBSCRIPTION_ID empty or malformed; environment mixing tokens from multiple tenants; SDK version mismatch after a dependency bump.","solutions":["Configure credentials: az login or AZURE_CLIENT_ID/AZURE_TENANT_ID/AZURE_CLIENT_SECRET/AZURE_SUBSCRIPTION_ID env vars","Validate AZURE_SUBSCRIPTION_ID with az account show --query id","Confirm the kops Azure SDK (sdk/resourcemanager/network) versions are consistent after go.mod changes","Re-run kops after fixing; unwrap the %w chain for the specific azidentity error code"],"exampleFix":"// before: missing env\nexport AZURE_SUBSCRIPTION_ID=\"\"\n// after\nexport AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000\nexport AZURE_TENANT_ID=... AZURE_CLIENT_ID=... AZURE_CLIENT_SECRET=...","handlingStrategy":"validation","validationCode":"// Go: validate inputs before newVirtualNetworksClientImpl\nif subscriptionID == \"\" {\n    return nil, fmt.Errorf(\"subscription ID is required\")\n}\nif _, err := uuid.Parse(subscriptionID); err != nil {\n    return nil, fmt.Errorf(\"subscription ID %q is not a valid GUID: %w\", subscriptionID, err)\n}\nif _, err := cred.GetToken(ctx, policy.TokenRequestOptions{Scopes: []string{\"https://management.azure.com/.default\"}}); err != nil {\n    return nil, fmt.Errorf(\"azure credential chain failed: %w\", err)\n}","typeGuard":"func validSubscriptionID(s string) bool {\n    _, err := uuid.Parse(s)\n    return err == nil\n}","tryCatchPattern":"vnets, err := newVirtualNetworksClientImpl(subscriptionID, cred)\nif err != nil {\n    var iderr *azidentity.CredentialUnavailableError\n    if errors.As(err, &iderr) {\n        return fmt.Errorf(\"no Azure credential available; run 'az login' or set AZURE_* env vars: %w\", err)\n    }\n    return err\n}","preventionTips":["Set AZURE_SUBSCRIPTION_ID (valid GUID) plus tenant/client credentials before kops azure commands","Run az account show to sanity-check the active login","Pin azidentity/azcore versions consistently across go.mod","Prefer explicit service-principal env vars in CI to avoid DefaultAzureCredential chain surprises"],"tags":["azure","go","client-init","authentication"],"backgroundTag":"azure-sdk-client-creation-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}