mirror of https://github.com/k3s-io/k3s
get the resource.Info out of the conversion business
parent
cb4ce3392d
commit
1e5372b620
|
@ -25,7 +25,6 @@ import (
|
|||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
"k8s.io/kubernetes/pkg/kubectl"
|
||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
|
@ -203,7 +202,7 @@ func (o *SetLastAppliedOptions) RunSetLastApplied() error {
|
|||
}
|
||||
info.Refresh(patchedObj, false)
|
||||
}
|
||||
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -253,7 +253,7 @@ func (o *AutoscaleOptions) Run() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return printer.PrintObj(hpa.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
return printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(hpa.Object, hpa.Mapping), o.Out)
|
||||
}
|
||||
|
||||
if err := kubectl.CreateOrUpdateAnnotation(o.createAnnotation, hpa.Object, cmdutil.InternalVersionJSONEncoder()); err != nil {
|
||||
|
@ -270,7 +270,7 @@ func (o *AutoscaleOptions) Run() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
return printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, hpa.Mapping), o.Out)
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -228,7 +228,7 @@ func (options *CertificateOptions) modifyCertificateCondition(builder *resource.
|
|||
}
|
||||
found++
|
||||
|
||||
return options.PrintObj(info.AsVersioned(legacyscheme.Scheme), options.Out)
|
||||
return options.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), options.Out)
|
||||
})
|
||||
if found == 0 {
|
||||
fmt.Fprintf(options.Out, "No resources found\n")
|
||||
|
|
|
@ -426,7 +426,7 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
|
|||
}
|
||||
|
||||
// ensure we pass a versioned object to the printer
|
||||
obj = info.AsVersioned(legacyscheme.Scheme)
|
||||
obj = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
} else {
|
||||
if meta, err := meta.Accessor(obj); err == nil && nsOverriden {
|
||||
meta.SetNamespace(namespace)
|
||||
|
|
|
@ -739,7 +739,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||
fmt.Printf("error: %v", err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
|
||||
} else {
|
||||
if !o.DryRun {
|
||||
helper := resource.NewHelper(o.restClient, nodeInfo.Mapping)
|
||||
|
@ -765,7 +765,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||
fmt.Fprintf(o.ErrOut, "%v", err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
|
||||
}
|
||||
} else {
|
||||
printer, err := o.ToPrinter("skipped")
|
||||
|
@ -773,7 +773,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||
fmt.Fprintf(o.ErrOut, "%v", err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -339,7 +339,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
|
|||
return err
|
||||
}
|
||||
|
||||
return o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
return o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -156,7 +156,7 @@ func (o PauseConfig) RunPause() error {
|
|||
allErrs = append(allErrs, err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ func (o PauseConfig) RunPause() error {
|
|||
allErrs = append(allErrs, err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
}
|
||||
|
||||
return utilerrors.NewAggregate(allErrs)
|
||||
|
|
|
@ -161,7 +161,7 @@ func (o ResumeConfig) RunResume() error {
|
|||
allErrs = append(allErrs, err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
}
|
||||
|
||||
obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch)
|
||||
|
@ -176,7 +176,7 @@ func (o ResumeConfig) RunResume() error {
|
|||
allErrs = append(allErrs, err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
}
|
||||
|
||||
return utilerrors.NewAggregate(allErrs)
|
||||
|
|
|
@ -168,7 +168,7 @@ func (o *UndoOptions) RunUndo() error {
|
|||
allErrs = append(allErrs, err)
|
||||
continue
|
||||
}
|
||||
printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
}
|
||||
return utilerrors.NewAggregate(allErrs)
|
||||
}
|
||||
|
|
|
@ -696,7 +696,7 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
|
|||
return nil, err
|
||||
}
|
||||
|
||||
versioned = info.AsVersioned(legacyscheme.Scheme)
|
||||
versioned = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
}
|
||||
return &RunObject{
|
||||
Versioned: versioned,
|
||||
|
|
|
@ -327,7 +327,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||
return err
|
||||
}
|
||||
patches := CalculatePatches(infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
_, err := o.updatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||
resolutionErrorsEncountered := false
|
||||
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
||||
|
@ -418,7 +418,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||
}
|
||||
|
||||
if o.Local || o.dryRun {
|
||||
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
|
@ -437,7 +437,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||
return fmt.Errorf("at least one environment variable must be provided")
|
||||
}
|
||||
|
||||
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,7 +211,7 @@ func (o *SetImageOptions) Run() error {
|
|||
|
||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||
transformed := false
|
||||
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||
for name, image := range o.ContainerImages {
|
||||
var (
|
||||
|
@ -275,7 +275,7 @@ func (o *SetImageOptions) Run() error {
|
|||
}
|
||||
|
||||
if o.Local || o.DryRun {
|
||||
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
|
@ -289,7 +289,7 @@ func (o *SetImageOptions) Run() error {
|
|||
}
|
||||
info.Refresh(obj, true)
|
||||
|
||||
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -224,7 +224,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||
allErrs := []error{}
|
||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||
transformed := false
|
||||
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
||||
if len(containers) != 0 {
|
||||
|
@ -277,7 +277,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||
}
|
||||
|
||||
if o.Local || o.DryRun {
|
||||
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
|
@ -290,7 +290,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||
}
|
||||
info.Refresh(obj, true)
|
||||
|
||||
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -204,7 +204,7 @@ func (o *SetSelectorOptions) RunSelector() error {
|
|||
return r.Visit(func(info *resource.Info, err error) error {
|
||||
patch := &Patch{Info: info}
|
||||
CalculatePatch(patch, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||
versioned := info.AsVersioned(legacyscheme.Scheme)
|
||||
versioned := cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
patch.Info.Object = versioned
|
||||
selectErr := updateSelectorForObject(info.Object, *o.selector)
|
||||
if selectErr != nil {
|
||||
|
@ -232,7 +232,7 @@ func (o *SetSelectorOptions) RunSelector() error {
|
|||
}
|
||||
|
||||
info.Refresh(patched, true)
|
||||
return o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
return o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, info.Mapping), o.Out)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman
|
|||
func (o *SetServiceAccountOptions) Run() error {
|
||||
patchErrs := []error{}
|
||||
patchFn := func(info *resource.Info) ([]byte, error) {
|
||||
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
||||
_, err := o.updatePodSpecForObject(info.Object, func(podSpec *v1.PodSpec) error {
|
||||
podSpec.ServiceAccountName = o.serviceAccountName
|
||||
return nil
|
||||
|
@ -198,7 +198,7 @@ func (o *SetServiceAccountOptions) Run() error {
|
|||
continue
|
||||
}
|
||||
if o.local || o.dryRun {
|
||||
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
|
@ -210,7 +210,7 @@ func (o *SetServiceAccountOptions) Run() error {
|
|||
}
|
||||
info.Refresh(patched, true)
|
||||
|
||||
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -230,7 +230,7 @@ func (o *SubjectOptions) Run(fn updateSubjects) error {
|
|||
transformed, err := updateSubjectForObject(info.Object, subjects, fn)
|
||||
if transformed && err == nil {
|
||||
// TODO: switch UpdatePodSpecForObject to work on v1.PodSpec
|
||||
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.AsVersioned(legacyscheme.Scheme))
|
||||
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping))
|
||||
}
|
||||
return nil, err
|
||||
})
|
||||
|
@ -263,7 +263,7 @@ func (o *SubjectOptions) Run(fn updateSubjects) error {
|
|||
}
|
||||
info.Refresh(obj, true)
|
||||
|
||||
return o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||
return o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out)
|
||||
}
|
||||
return utilerrors.NewAggregate(allErrs)
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ go_library(
|
|||
name = "go_default_library",
|
||||
srcs = [
|
||||
"cached_discovery.go",
|
||||
"conversion.go",
|
||||
"factory.go",
|
||||
"factory_builder.go",
|
||||
"factory_client_access.go",
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package util
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
)
|
||||
|
||||
// AsDefaultVersionedOrOriginal returns the object as a Go object in the external form if possible (matching the
|
||||
// group version kind of the mapping if provided, a best guess based on serialization if not provided, or obj if it cannot be converted.
|
||||
// TODO update call sites to specify the scheme they want on their builder.
|
||||
func AsDefaultVersionedOrOriginal(obj runtime.Object, mapping *meta.RESTMapping) runtime.Object {
|
||||
converter := runtime.ObjectConvertor(legacyscheme.Scheme)
|
||||
groupVersioner := runtime.GroupVersioner(schema.GroupVersions(legacyscheme.Registry.RegisteredGroupVersions()))
|
||||
if mapping != nil {
|
||||
groupVersioner = mapping.GroupVersionKind.GroupVersion()
|
||||
}
|
||||
|
||||
if obj, err := converter.ConvertToVersion(obj, groupVersioner); err == nil {
|
||||
return obj
|
||||
}
|
||||
return obj
|
||||
}
|
|
@ -300,7 +300,8 @@ func TestPathBuilderAndVersionedObjectNotDefaulted(t *testing.T) {
|
|||
if info.Name != "update-demo-kitten" || info.Namespace != "" || info.Object == nil {
|
||||
t.Errorf("unexpected info: %#v", info)
|
||||
}
|
||||
obj := info.AsVersioned(legacyscheme.Scheme)
|
||||
|
||||
obj := info.Object
|
||||
version, ok := obj.(*v1.ReplicationController)
|
||||
// versioned object does not have defaulting applied
|
||||
if obj == nil || !ok || version.Spec.Replicas != nil {
|
||||
|
|
|
@ -180,22 +180,6 @@ func (i *Info) ResourceMapping() *meta.RESTMapping {
|
|||
return i.Mapping
|
||||
}
|
||||
|
||||
// Versioned returns the object as a Go type in the mapping's version or returns an error.
|
||||
func (i *Info) versioned(convertor runtime.ObjectConvertor) (runtime.Object, error) {
|
||||
return convertor.ConvertToVersion(i.Object, i.Mapping.GroupVersionKind.GroupVersion())
|
||||
}
|
||||
|
||||
// AsVersioned returns the object as a Go object in the external form if possible (matching the
|
||||
// group version kind of the mapping, or i.Object if it cannot be converted.
|
||||
// Deprecated this function will be removed once calling code is updated to indicate the correct
|
||||
// negoticatedserializers during construction of the builder
|
||||
func (i *Info) AsVersioned(convertor runtime.ObjectConvertor) runtime.Object {
|
||||
if obj, err := i.versioned(convertor); err == nil {
|
||||
return obj
|
||||
}
|
||||
return i.Object
|
||||
}
|
||||
|
||||
// VisitorList implements Visit for the sub visitors it contains. The first error
|
||||
// returned from a child Visitor will terminate iteration.
|
||||
type VisitorList []Visitor
|
||||
|
|
Loading…
Reference in New Issue