Fix Daemonset controller role missing 'update pod' permission (#104758)

* fix_dsc_rbac_pod_update

* add test for DaemonSet Controller updates label of the pod after "DedupCurHistories"

* rebase

* update parameter of dsc.Run
This commit is contained in:
Shuanglu
2021-10-28 20:24:26 +08:00
committed by GitHub
parent afff019fbc
commit 9bcfa71e31
2 changed files with 142 additions and 5 deletions

View File

@@ -31,6 +31,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/json"
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/controller"
@@ -367,12 +368,18 @@ func (dsc *DaemonSetsController) dedupCurHistories(ctx context.Context, ds *apps
}
for _, pod := range pods {
if pod.Labels[apps.DefaultDaemonSetUniqueLabelKey] != keepCur.Labels[apps.DefaultDaemonSetUniqueLabelKey] {
toUpdate := pod.DeepCopy()
if toUpdate.Labels == nil {
toUpdate.Labels = make(map[string]string)
patchRaw := map[string]interface{}{
"metadata": map[string]interface{}{
"labels": map[string]interface{}{
apps.DefaultDaemonSetUniqueLabelKey: keepCur.Labels[apps.DefaultDaemonSetUniqueLabelKey],
},
},
}
toUpdate.Labels[apps.DefaultDaemonSetUniqueLabelKey] = keepCur.Labels[apps.DefaultDaemonSetUniqueLabelKey]
_, err = dsc.kubeClient.CoreV1().Pods(ds.Namespace).Update(ctx, toUpdate, metav1.UpdateOptions{})
patchJson, err := json.Marshal(patchRaw)
if err != nil {
return nil, err
}
_, err = dsc.kubeClient.CoreV1().Pods(ds.Namespace).Patch(ctx, pod.Name, types.MergePatchType, patchJson, metav1.PatchOptions{})
if err != nil {
return nil, err
}