{"record":{"id":"9452a05683cec993","repo":"kubernetes/kops","slug":"name-is-required-for-safety","errorCode":null,"errorMessage":"--name is required (for safety)","messagePattern":"--name is required \\(for safety\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/kops/delete_cluster.go","lineNumber":108,"sourceCode":"\n\tcmd.Flags().BoolVarP(&options.Yes, \"yes\", \"y\", options.Yes, \"Specify --yes to delete the cluster\")\n\tcmd.Flags().BoolVar(&options.Unregister, \"unregister\", options.Unregister, \"Don't delete cloud resources, just unregister the cluster\")\n\tcmd.Flags().BoolVar(&options.External, \"external\", options.External, \"Delete an external cluster\")\n\n\tcmd.Flags().StringVar(&options.Region, \"region\", options.Region, \"External cluster's cloud region\")\n\tcmd.RegisterFlagCompletionFunc(\"region\", completeRegion)\n\n\tcmd.Flags().DurationVar(&options.wait, \"wait\", options.wait, \"Amount of time to wait for the cluster resources to de deleted\")\n\tcmd.Flags().IntVar(&options.count, \"count\", options.count, \"Number of consecutive failures to make progress deleting the cluster resources\")\n\tcmd.Flags().DurationVar(&options.interval, \"interval\", options.interval, \"Time in duration to wait between deletion attempts\")\n\n\treturn cmd\n}\n\nfunc RunDeleteCluster(ctx context.Context, f *util.Factory, out io.Writer, options *DeleteClusterOptions) error {\n\tclusterName := options.ClusterName\n\tif clusterName == \"\" {\n\t\treturn fmt.Errorf(\"--name is required (for safety)\")\n\t}\n\n\tvar cloud fi.Cloud\n\tvar cluster *kopsapi.Cluster\n\tvar err error\n\n\tif options.External {\n\t\tregion := options.Region\n\t\tif region == \"\" {\n\t\t\treturn fmt.Errorf(\"--region is required (when --external)\")\n\t\t}\n\n\t\ttags := map[string]string{\"KubernetesCluster\": clusterName}\n\t\tcloud, err = awsup.NewAWSCloud(region, tags)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error initializing AWS client: %v\", err)\n\t\t}\n\t} else {","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/cmd/kops/delete_cluster.go#L90-L126","documentation":"RunDeleteCluster refuses to proceed without an explicit cluster name. Because cluster deletion is destructive and operates on the state store, kOps requires --name (or the -n flag / KOPS_CLUSTER_NAME) so the exact cluster being destroyed is unambiguous.","triggerScenarios":"Running `kops delete cluster` without --name, without a KOPS_CLUSTER_NAME environment variable, and without a cluster set in the kops context so options.ClusterName is empty.","commonSituations":"Scripted/CI jobs where the env var is unset; users relying on `kubectl` context that kOps does not read; running from a directory without a kops default cluster name.","solutions":["Add `--name <cluster.example.com>` to the `kops delete cluster` command.","Set the KOPS_CLUSTER_NAME environment variable before running the command.","In code/tests calling RunDeleteCluster directly, set options.ClusterName before invoking."],"exampleFix":"// before\nkops delete cluster --yes\n// after\nkops delete cluster --name cluster.example.com --yes","handlingStrategy":"validation","validationCode":"name := os.Getenv(\"KOPS_CLUSTER_NAME\")\nif name == \"\" {\n    return fmt.Errorf(\"pass --name or set KOPS_CLUSTER_NAME before deleting a cluster\")\n}\nargs = append(args, \"--name\", name)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass --name for destructive cluster commands.","Export KOPS_CLUSTER_NAME in CI scripts.","Echo the cluster name in scripts before running delete."],"tags":["cli","validation","missing-flag"],"backgroundTag":"missing-required-flag","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"}