mirror of https://github.com/k3s-io/k3s
Merge pull request #75820 from YoubingLi/bugfix
Fixes #75706 - Show warning message when namespace is specified for deleting a cluster-scoped resourcek3s-v1.15.3
commit
9c2df998af
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue