{"record":{"id":"d0131c571e7cf648","repo":"kubernetes/kops","slug":"deletegroup-not-implemented-on-azurecloud","errorCode":null,"errorMessage":"DeleteGroup not implemented on azureCloud","messagePattern":"DeleteGroup not implemented on azureCloud","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/azure/azure_cloud.go","lineNumber":252,"sourceCode":"\t\t}\n\t}\n\treturn nil, nil\n}\n\nfunc (c *azureCloudImplementation) DeleteInstance(i *cloudinstances.CloudInstance) error {\n\tvmssName := i.CloudInstanceGroup.HumanName\n\tinstanceID := strings.TrimPrefix(i.ID, vmssName+\"_\")\n\treturn c.vmscaleSetVMsClient.Delete(context.TODO(), c.resourceGroupName, vmssName, instanceID)\n}\n\n// DeregisterInstance drains a cloud instance and loadbalancers.\nfunc (c *azureCloudImplementation) DeregisterInstance(i *cloudinstances.CloudInstance) error {\n\tklog.V(8).Info(\"Azure DeregisterInstance not implemented\")\n\treturn nil\n}\n\nfunc (c *azureCloudImplementation) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error {\n\treturn errors.New(\"DeleteGroup not implemented on azureCloud\")\n}\n\nfunc (c *azureCloudImplementation) DetachInstance(i *cloudinstances.CloudInstance) error {\n\treturn errors.New(\"DetachInstance not implemented on azureCloud\")\n}\n\n// AddClusterTags adds cluster tags to the resource.\nfunc (c *azureCloudImplementation) AddClusterTags(tags map[string]*string) {\n\tfor k, v := range c.tags {\n\t\ttags[k] = &v\n\t}\n}\n\nfunc (c *azureCloudImplementation) GetApiIngressStatus(cluster *kops.Cluster) ([]fi.ApiIngressStatus, error) {\n\tvar ingresses []fi.ApiIngressStatus\n\trg := cluster.AzureResourceGroupName()\n\n\tlbSpec := cluster.Spec.API.LoadBalancer","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/azure/azure_cloud.go#L234-L270","documentation":"CloudInstanceGroup deletion (rolling-update scale-down / instance group replacement) is not implemented for Azure; DeleteGroup returns this error so no auto-scaling group/vmss backing group is ever deleted through this generic path.","triggerScenarios":"Invoking kops rolling-update cluster or instance-group deletion against an Azure cluster when the rolling-update code asks the cloud to delete a CloudInstanceGroup; any code path calling cloud.DeleteGroup(g) for Azure.","commonSituations":"Rolling a master or node instance group on Azure expecting kops to remove old VMSS/availability-set members; deleting an instance group via kops delete instancegroup on Azure; automated scale-down flows.","solutions":["Manage VMSS / availability set scaling and deletion directly in Azure (portal, az CLI, ARM templates) instead of via this path","Upgrade kops — newer releases implement Azure DeleteGroup via VMSS scaling","Patch azureCloudImplementation.DeleteGroup to resize/delete the backing VMSS"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if c.ProviderID() == kops.CloudProviderAzure {\n\treturn fmt.Errorf(\"DeleteGroup unsupported on Azure; scale the VMSS directly\")\n}","typeGuard":null,"tryCatchPattern":"if err := cloud.DeleteGroup(g); err != nil {\n\tif strings.Contains(err.Error(), \"DeleteGroup not implemented on azureCloud\") {\n\t\t// fall back to Azure-native VMSS scaling\n\t} else { return err }\n}","preventionTips":["Check kops Azure feature parity before automating group lifecycle ops","Perform instance group deletion on Azure via the Azure API/CLI","Gate rolling-update automation on provider capability checks"],"tags":["azure","instance-group","delete","not-implemented","rolling-update"],"backgroundTag":"not-implemented-on-provider","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"}