mirror of https://github.com/k3s-io/k3s
kubectl: recreating resources for immutable fields when force is applied
parent
41d66aaf87
commit
0af6faed09
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: a
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: test
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- port: 80
|
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: a
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: test
|
||||||
|
clusterIP: 10.0.0.12
|
||||||
|
ports:
|
||||||
|
- port: 80
|
|
@ -753,7 +753,7 @@ func (p *patcher) patch(current runtime.Object, modified []byte, source, namespa
|
||||||
}
|
}
|
||||||
patchBytes, patchObject, err = p.patchSimple(current, modified, source, namespace, name, errOut)
|
patchBytes, patchObject, err = p.patchSimple(current, modified, source, namespace, name, errOut)
|
||||||
}
|
}
|
||||||
if err != nil && errors.IsConflict(err) && p.force {
|
if err != nil && (errors.IsConflict(err) || errors.IsInvalid(err)) && p.force {
|
||||||
patchBytes, patchObject, err = p.deleteAndCreate(current, modified, namespace, name)
|
patchBytes, patchObject, err = p.deleteAndCreate(current, modified, namespace, name)
|
||||||
}
|
}
|
||||||
return patchBytes, patchObject, err
|
return patchBytes, patchObject, err
|
||||||
|
|
|
@ -157,6 +157,25 @@ run_kubectl_apply_tests() {
|
||||||
# cleanup
|
# cleanup
|
||||||
kubectl delete svc prune-svc 2>&1 "${kube_flags[@]}"
|
kubectl delete svc prune-svc 2>&1 "${kube_flags[@]}"
|
||||||
|
|
||||||
|
|
||||||
|
## kubectl apply -f some.yml --force
|
||||||
|
# Pre-condition: no service exists
|
||||||
|
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# apply service a
|
||||||
|
kubectl apply -f hack/testdata/service-revision1.yaml "${kube_flags[@]}"
|
||||||
|
# check right service exists
|
||||||
|
kube::test::get_object_assert 'services a' "{{${id_field}}}" 'a'
|
||||||
|
# change immutable field and apply service a
|
||||||
|
output_message=$(! kubectl apply -f hack/testdata/service-revision2.yaml 2>&1 "${kube_flags[@]}")
|
||||||
|
kube::test::if_has_string "${output_message}" 'field is immutable'
|
||||||
|
# apply --force to recreate resources for immutable fields
|
||||||
|
kubectl apply -f hack/testdata/service-revision2.yaml --force "${kube_flags[@]}"
|
||||||
|
# check immutable field exists
|
||||||
|
kube::test::get_object_assert 'services a' "{{.spec.clusterIP}}" '10.0.0.12'
|
||||||
|
# cleanup
|
||||||
|
kubectl delete -f hack/testdata/service-revision2.yaml "${kube_flags[@]}"
|
||||||
|
|
||||||
|
|
||||||
set +o nounset
|
set +o nounset
|
||||||
set +o errexit
|
set +o errexit
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue