mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Merge pull request #31438 from mwielgus/ns-controller-delete
Automatic merge from submit-queue Proper phase/finalizer logic in federated namespace controller Part 1 of delete logic cleanup. Part 2 will contain namespace content deletion and tests. cc: @quinton-hoole @kubernetes/sig-cluster-federation
This commit is contained in:
commit
23d0937eaf
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/flowcontrol"
|
"k8s.io/kubernetes/pkg/util/flowcontrol"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@ -237,13 +238,8 @@ func (nc *NamespaceController) reconcileNamespace(namespace string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
baseNamespace := baseNamespaceObj.(*api_v1.Namespace)
|
baseNamespace := baseNamespaceObj.(*api_v1.Namespace)
|
||||||
if baseNamespace.Status.Phase == api_v1.NamespaceTerminating {
|
if baseNamespace.DeletionTimestamp != nil {
|
||||||
// TODO: What about namespaces in subclusters ???
|
nc.delete(baseNamespace)
|
||||||
err = nc.federatedApiClient.Core().Namespaces().Delete(baseNamespace.Name, &api.DeleteOptions{})
|
|
||||||
if err != nil {
|
|
||||||
glog.Errorf("Failed to delete namespace %s: %v", baseNamespace.Name, err)
|
|
||||||
nc.deliverNamespace(namespace, 0, true)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,3 +298,51 @@ func (nc *NamespaceController) reconcileNamespace(namespace string) {
|
|||||||
// Evertyhing is in order but lets be double sure
|
// Evertyhing is in order but lets be double sure
|
||||||
nc.deliverNamespace(namespace, nc.namespaceReviewDelay, false)
|
nc.deliverNamespace(namespace, nc.namespaceReviewDelay, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (nc *NamespaceController) delete(namespace *api_v1.Namespace) {
|
||||||
|
// Set Terminating status.
|
||||||
|
updatedNamespace := &api_v1.Namespace{
|
||||||
|
ObjectMeta: namespace.ObjectMeta,
|
||||||
|
Spec: namespace.Spec,
|
||||||
|
Status: api_v1.NamespaceStatus{
|
||||||
|
Phase: api_v1.NamespaceTerminating,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if namespace.Status.Phase != api_v1.NamespaceTerminating {
|
||||||
|
_, err := nc.federatedApiClient.Core().Namespaces().Update(updatedNamespace)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to update namespace %s: %v", updatedNamespace.Name, err)
|
||||||
|
nc.deliverNamespace(namespace.Name, 0, true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: delete all namespace content.
|
||||||
|
|
||||||
|
// Remove kube_api.FinalzerKubernetes
|
||||||
|
if len(updatedNamespace.Spec.Finalizers) != 0 {
|
||||||
|
finalizerSet := sets.NewString()
|
||||||
|
for i := range namespace.Spec.Finalizers {
|
||||||
|
if namespace.Spec.Finalizers[i] != api_v1.FinalizerKubernetes {
|
||||||
|
finalizerSet.Insert(string(namespace.Spec.Finalizers[i]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatedNamespace.Spec.Finalizers = make([]api_v1.FinalizerName, 0, len(finalizerSet))
|
||||||
|
for _, value := range finalizerSet.List() {
|
||||||
|
updatedNamespace.Spec.Finalizers = append(updatedNamespace.Spec.Finalizers, api_v1.FinalizerName(value))
|
||||||
|
}
|
||||||
|
_, err := nc.federatedApiClient.Core().Namespaces().Finalize(updatedNamespace)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to update namespace %s: %v", updatedNamespace.Name, err)
|
||||||
|
nc.deliverNamespace(namespace.Name, 0, true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: What about namespaces in subclusters ???
|
||||||
|
err := nc.federatedApiClient.Core().Namespaces().Delete(updatedNamespace.Name, &api.DeleteOptions{})
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to delete namespace %s: %v", namespace.Name, err)
|
||||||
|
nc.deliverNamespace(namespace.Name, 0, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user