remove todo: switch UpdatePodSpecForObject to work on v1.PodSpec, use info.VersionedObject, and avoid conversion completely
This commit is contained in:
@@ -23,11 +23,11 @@ import (
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||
@@ -61,14 +61,15 @@ type serviceAccountConfig struct {
|
||||
out io.Writer
|
||||
err io.Writer
|
||||
dryRun bool
|
||||
cmd *cobra.Command
|
||||
shortOutput bool
|
||||
all bool
|
||||
record bool
|
||||
output string
|
||||
changeCause string
|
||||
local bool
|
||||
saPrint func(obj runtime.Object) error
|
||||
updatePodSpecForObject func(runtime.Object, func(*api.PodSpec) error) (bool, error)
|
||||
PrintObject func(cmd *cobra.Command, isLocal bool, mapper meta.RESTMapper, obj runtime.Object, out io.Writer) error
|
||||
updatePodSpecForObject func(runtime.Object, func(*v1.PodSpec) error) (bool, error)
|
||||
infos []*resource.Info
|
||||
serviceAccountName string
|
||||
}
|
||||
@@ -113,9 +114,9 @@ func (saConfig *serviceAccountConfig) Complete(f cmdutil.Factory, cmd *cobra.Com
|
||||
saConfig.dryRun = cmdutil.GetDryRunFlag(cmd)
|
||||
saConfig.output = cmdutil.GetFlagString(cmd, "output")
|
||||
saConfig.updatePodSpecForObject = f.UpdatePodSpecForObject
|
||||
saConfig.saPrint = func(obj runtime.Object) error {
|
||||
return f.PrintObject(cmd, saConfig.local, saConfig.mapper, obj, saConfig.out)
|
||||
}
|
||||
saConfig.PrintObject = f.PrintObject
|
||||
saConfig.cmd = cmd
|
||||
|
||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -148,11 +149,11 @@ func (saConfig *serviceAccountConfig) Complete(f cmdutil.Factory, cmd *cobra.Com
|
||||
func (saConfig *serviceAccountConfig) Run() error {
|
||||
patchErrs := []error{}
|
||||
patchFn := func(info *resource.Info) ([]byte, error) {
|
||||
saConfig.updatePodSpecForObject(info.Object, func(podSpec *api.PodSpec) error {
|
||||
saConfig.updatePodSpecForObject(info.VersionedObject, func(podSpec *v1.PodSpec) error {
|
||||
podSpec.ServiceAccountName = saConfig.serviceAccountName
|
||||
return nil
|
||||
})
|
||||
return runtime.Encode(saConfig.encoder, info.Object)
|
||||
return runtime.Encode(saConfig.encoder, info.VersionedObject)
|
||||
}
|
||||
patches := CalculatePatches(saConfig.infos, saConfig.encoder, patchFn)
|
||||
for _, patch := range patches {
|
||||
@@ -162,7 +163,9 @@ func (saConfig *serviceAccountConfig) Run() error {
|
||||
continue
|
||||
}
|
||||
if saConfig.local || saConfig.dryRun {
|
||||
saConfig.saPrint(patch.Info.Object)
|
||||
if err := saConfig.PrintObject(saConfig.cmd, saConfig.local, saConfig.mapper, patch.Info.VersionedObject, saConfig.out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
}
|
||||
patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch)
|
||||
@@ -179,7 +182,14 @@ func (saConfig *serviceAccountConfig) Run() error {
|
||||
}
|
||||
}
|
||||
if len(saConfig.output) > 0 {
|
||||
saConfig.saPrint(patched)
|
||||
versionedObject, err := patch.Info.Mapping.ConvertToVersion(patched, patch.Info.Mapping.GroupVersionKind.GroupVersion())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := saConfig.PrintObject(saConfig.cmd, saConfig.local, saConfig.mapper, versionedObject, saConfig.out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
}
|
||||
cmdutil.PrintSuccess(saConfig.mapper, saConfig.shortOutput, saConfig.out, info.Mapping.Resource, info.Name, saConfig.dryRun, "serviceaccount updated")
|
||||
}
|
||||
|
Reference in New Issue
Block a user