mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +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
 | 
						ForceDeletion       bool
 | 
				
			||||||
	WaitForDeletion     bool
 | 
						WaitForDeletion     bool
 | 
				
			||||||
	Quiet               bool
 | 
						Quiet               bool
 | 
				
			||||||
 | 
						WarnClusterScope    bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GracePeriod int
 | 
						GracePeriod int
 | 
				
			||||||
	Timeout     time.Duration
 | 
						Timeout     time.Duration
 | 
				
			||||||
@@ -149,6 +150,8 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						o.WarnClusterScope = enforceNamespace && !o.DeleteAllNamespaces
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if o.DeleteAll || len(o.LabelSelector) > 0 || len(o.FieldSelector) > 0 {
 | 
						if o.DeleteAll || len(o.LabelSelector) > 0 || len(o.FieldSelector) > 0 {
 | 
				
			||||||
		if f := cmd.Flags().Lookup("ignore-not-found"); f != nil && !f.Changed {
 | 
							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
 | 
								// 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:
 | 
						case o.ForceDeletion:
 | 
				
			||||||
		fmt.Fprintf(o.ErrOut, "warning: --force is ignored because --grace-period is not 0.\n")
 | 
							fmt.Fprintf(o.ErrOut, "warning: --force is ignored because --grace-period is not 0.\n")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -228,6 +232,7 @@ func (o *DeleteOptions) DeleteResult(r *resource.Result) error {
 | 
				
			|||||||
	if o.IgnoreNotFound {
 | 
						if o.IgnoreNotFound {
 | 
				
			||||||
		r = r.IgnoreErrors(errors.IsNotFound)
 | 
							r = r.IgnoreErrors(errors.IsNotFound)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						warnClusterScope := o.WarnClusterScope
 | 
				
			||||||
	deletedInfos := []*resource.Info{}
 | 
						deletedInfos := []*resource.Info{}
 | 
				
			||||||
	uidMap := cmdwait.UIDMap{}
 | 
						uidMap := cmdwait.UIDMap{}
 | 
				
			||||||
	err := r.Visit(func(info *resource.Info, err error) error {
 | 
						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
 | 
							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)
 | 
							response, err := o.deleteResource(info, options)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1326,6 +1326,12 @@ run_namespace_tests() {
 | 
				
			|||||||
  output_message=$(! kubectl get ns/my-namespace 2>&1 "${kube_flags[@]}")
 | 
					  output_message=$(! kubectl get ns/my-namespace 2>&1 "${kube_flags[@]}")
 | 
				
			||||||
  kube::test::if_has_string "${output_message}" ' not found'
 | 
					  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 #
 | 
					  # Pods in Namespaces #
 | 
				
			||||||
  ######################
 | 
					  ######################
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,12 @@ run_clusterroles_tests() {
 | 
				
			|||||||
  kube::test::get_object_assert clusterrolebindings/cluster-admin "{{.metadata.name}}" 'cluster-admin'
 | 
					  kube::test::get_object_assert clusterrolebindings/cluster-admin "{{.metadata.name}}" 'cluster-admin'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # test `kubectl create clusterrole`
 | 
					  # 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
 | 
					  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.verbs}}{{.}}:{{end}}{{end}}" '\*:'
 | 
				
			||||||
  kube::test::get_object_assert clusterrole/pod-admin "{{range.rules}}{{range.resources}}{{.}}:{{end}}{{end}}" 'pods:'
 | 
					  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
 | 
					  # Post-condition: no PVs
 | 
				
			||||||
  kube::test::get_object_assert pv "{{range.items}}{{$id_field}}:{{end}}" ''
 | 
					  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 nounset
 | 
				
			||||||
  set +o errexit
 | 
					  set +o errexit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user