mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #75820 from YoubingLi/bugfix
Fixes #75706 - Show warning message when namespace is specified for deleting a cluster-scoped resource
This commit is contained in:
		@@ -106,6 +106,7 @@ type DeleteOptions struct {
 | 
			
		||||
	ForceDeletion       bool
 | 
			
		||||
	WaitForDeletion     bool
 | 
			
		||||
	Quiet               bool
 | 
			
		||||
	WarnClusterScope    bool
 | 
			
		||||
 | 
			
		||||
	GracePeriod int
 | 
			
		||||
	Timeout     time.Duration
 | 
			
		||||
@@ -149,6 +150,8 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	o.WarnClusterScope = enforceNamespace && !o.DeleteAllNamespaces
 | 
			
		||||
 | 
			
		||||
	if o.DeleteAll || len(o.LabelSelector) > 0 || len(o.FieldSelector) > 0 {
 | 
			
		||||
		if f := cmd.Flags().Lookup("ignore-not-found"); f != nil && !f.Changed {
 | 
			
		||||
			// If the user didn't explicitly set the option, default to ignoring NotFound errors when used with --all, -l, or --field-selector
 | 
			
		||||
@@ -216,6 +219,7 @@ func (o *DeleteOptions) Validate() error {
 | 
			
		||||
	case o.ForceDeletion:
 | 
			
		||||
		fmt.Fprintf(o.ErrOut, "warning: --force is ignored because --grace-period is not 0.\n")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -228,6 +232,7 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error {
 | 
			
		||||
	if o.IgnoreNotFound {
 | 
			
		||||
		r = r.IgnoreErrors(errors.IsNotFound)
 | 
			
		||||
	}
 | 
			
		||||
	warnClusterScope := o.WarnClusterScope
 | 
			
		||||
	deletedInfos := []*resource.Info{}
 | 
			
		||||
	uidMap := cmdwait.UIDMap{}
 | 
			
		||||
	err := r.Visit(func(info *resource.Info, err error) error {
 | 
			
		||||
@@ -247,6 +252,10 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error {
 | 
			
		||||
		}
 | 
			
		||||
		options.PropagationPolicy = &policy
 | 
			
		||||
 | 
			
		||||
		if warnClusterScope && info.Mapping.Scope.Name() == meta.RESTScopeNameRoot {
 | 
			
		||||
			fmt.Fprintf(o.ErrOut, "warning: deleting cluster-scoped resources, not scoped to the provided namespace\n")
 | 
			
		||||
			warnClusterScope = false
 | 
			
		||||
		}
 | 
			
		||||
		response, err := o.deleteResource(info, options)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
 
 | 
			
		||||
@@ -1326,6 +1326,12 @@ run_namespace_tests() {
 | 
			
		||||
  output_message=$(! kubectl get ns/my-namespace 2>&1 "${kube_flags[@]}")
 | 
			
		||||
  kube::test::if_has_string "${output_message}" ' not found'
 | 
			
		||||
 | 
			
		||||
  kubectl create namespace my-namespace
 | 
			
		||||
  kube::test::get_object_assert 'namespaces/my-namespace' "{{$id_field}}" 'my-namespace'
 | 
			
		||||
  output_message=$(! kubectl delete namespace -n my-namespace --all 2>&1 "${kube_flags[@]}")
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'warning: deleting cluster-scoped resources'
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'namespace "my-namespace" deleted'
 | 
			
		||||
 | 
			
		||||
  ######################
 | 
			
		||||
  # Pods in Namespaces #
 | 
			
		||||
  ######################
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,12 @@ run_clusterroles_tests() {
 | 
			
		||||
  kube::test::get_object_assert clusterrolebindings/cluster-admin "{{.metadata.name}}" 'cluster-admin'
 | 
			
		||||
 | 
			
		||||
  # test `kubectl create clusterrole`
 | 
			
		||||
  kubectl create "${kube_flags[@]}" clusterrole pod-admin --verb=* --resource=pods
 | 
			
		||||
  kube::test::get_object_assert clusterrole/pod-admin "{{range.rules}}{{range.verbs}}{{.}}:{{end}}{{end}}" '\*:'
 | 
			
		||||
  output_message=$(kubectl delete clusterrole pod-admin -n test 2>&1 "${kube_flags[@]}")
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'warning: deleting cluster-scoped resources'
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'clusterrole.rbac.authorization.k8s.io "pod-admin" deleted'
 | 
			
		||||
 | 
			
		||||
  kubectl create "${kube_flags[@]}" clusterrole pod-admin --verb=* --resource=pods
 | 
			
		||||
  kube::test::get_object_assert clusterrole/pod-admin "{{range.rules}}{{range.verbs}}{{.}}:{{end}}{{end}}" '\*:'
 | 
			
		||||
  kube::test::get_object_assert clusterrole/pod-admin "{{range.rules}}{{range.resources}}{{.}}:{{end}}{{end}}" 'pods:'
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,13 @@ run_persistent_volumes_tests() {
 | 
			
		||||
  # Post-condition: no PVs
 | 
			
		||||
  kube::test::get_object_assert pv "{{range.items}}{{$id_field}}:{{end}}" ''
 | 
			
		||||
 | 
			
		||||
  kubectl create -f test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml "${kube_flags[@]}"
 | 
			
		||||
  kube::test::get_object_assert pv "{{range.items}}{{$id_field}}:{{end}}" 'pv0001:'
 | 
			
		||||
  output_message=$(kubectl delete pv -n test --all 2>&1 "${kube_flags[@]}")
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'warning: deleting cluster-scoped resources'
 | 
			
		||||
  kube::test::if_has_string "${output_message}" 'persistentvolume "pv0001" deleted'
 | 
			
		||||
  kube::test::get_object_assert pv "{{range.items}}{{$id_field}}:{{end}}" ''
 | 
			
		||||
 | 
			
		||||
  set +o nounset
 | 
			
		||||
  set +o errexit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user