mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 18:24:07 +00:00
Merge pull request #63250 from deads2k/cli-39-typer
Automatic merge from submit-queue (batch tested with PRs 63251, 59166, 63250, 63180, 63169). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. divide statically known typer from dynamically derived restmapper The CLI factory conflated a statically known typer and a dynamically derived restmapper. This produced confusion and unnecessary indirection. This pull separates dynamically known from statically known. A future pull will continue the separation of in the builder to indicate the points of variability for clients, which should logically be limited to a negotiated serializer for decoding and an object typer. @kubernetes/sig-cli-maintainers /assign @soltysh /assign @juanvallejo ```release-note NONE ```
This commit is contained in:
commit
7884cc5453
@ -46,7 +46,6 @@ type SetLastAppliedOptions struct {
|
|||||||
Selector string
|
Selector string
|
||||||
InfoList []*resource.Info
|
InfoList []*resource.Info
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
Namespace string
|
Namespace string
|
||||||
EnforceNamespace bool
|
EnforceNamespace bool
|
||||||
DryRun bool
|
DryRun bool
|
||||||
@ -117,7 +116,7 @@ func (o *SetLastAppliedOptions) Complete(f cmdutil.Factory, cmd *cobra.Command)
|
|||||||
o.Output = cmdutil.GetFlagString(cmd, "output")
|
o.Output = cmdutil.GetFlagString(cmd, "output")
|
||||||
o.ShortOutput = o.Output == "name"
|
o.ShortOutput = o.Output == "name"
|
||||||
|
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
o.Namespace, o.EnforceNamespace, err = f.DefaultNamespace()
|
o.Namespace, o.EnforceNamespace, err = f.DefaultNamespace()
|
||||||
|
@ -146,7 +146,7 @@ func (p *AttachOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, argsIn [
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(namespace).DefaultNamespace()
|
NamespaceParam(namespace).DefaultNamespace()
|
||||||
|
|
||||||
switch len(argsIn) {
|
switch len(argsIn) {
|
||||||
|
@ -16,6 +16,7 @@ go_library(
|
|||||||
"//build/visible_to:pkg_kubectl_cmd_auth_CONSUMERS",
|
"//build/visible_to:pkg_kubectl_cmd_auth_CONSUMERS",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/apis/authorization:go_default_library",
|
"//pkg/apis/authorization:go_default_library",
|
||||||
"//pkg/apis/rbac:go_default_library",
|
"//pkg/apis/rbac:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset/typed/authorization/internalversion:go_default_library",
|
"//pkg/client/clientset_generated/internalclientset/typed/authorization/internalversion:go_default_library",
|
||||||
|
@ -127,7 +127,7 @@ func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
resourceTokens := strings.SplitN(args[1], "/", 2)
|
resourceTokens := strings.SplitN(args[1], "/", 2)
|
||||||
restMapper, _ := f.Object()
|
restMapper := f.RESTMapper()
|
||||||
o.Resource = o.resourceFor(restMapper, resourceTokens[0])
|
o.Resource = o.resourceFor(restMapper, resourceTokens[0])
|
||||||
if len(resourceTokens) > 1 {
|
if len(resourceTokens) > 1 {
|
||||||
o.ResourceName = resourceTokens[1]
|
o.ResourceName = resourceTokens[1]
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
internalcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
internalcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
||||||
internalrbacclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion"
|
internalrbacclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion"
|
||||||
@ -95,7 +96,7 @@ func (o *ReconcileOptions) Complete(cmd *cobra.Command, f cmdutil.Factory, args
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(namespace).DefaultNamespace().
|
NamespaceParam(namespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, options).
|
FilenameParam(enforceNamespace, options).
|
||||||
|
@ -23,7 +23,6 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
@ -68,7 +67,6 @@ type AutoscaleOptions struct {
|
|||||||
EnforceNamespace bool
|
EnforceNamespace bool
|
||||||
|
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
ClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
ClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)
|
||||||
|
|
||||||
GeneratorFunc func(string, *meta.RESTMapping) (kubectl.StructuredGenerator, error)
|
GeneratorFunc func(string, *meta.RESTMapping) (kubectl.StructuredGenerator, error)
|
||||||
@ -133,7 +131,7 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
|
|||||||
o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag)
|
o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag)
|
||||||
o.Builder = f.NewBuilder()
|
o.Builder = f.NewBuilder()
|
||||||
o.CanBeAutoscaled = f.CanBeAutoscaled
|
o.CanBeAutoscaled = f.CanBeAutoscaled
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
o.ClientForMapping = f.ClientForMapping
|
o.ClientForMapping = f.ClientForMapping
|
||||||
o.BuilderArgs = args
|
o.BuilderArgs = args
|
||||||
o.RecordFlags.Complete(f.Command(cmd, false))
|
o.RecordFlags.Complete(f.Command(cmd, false))
|
||||||
@ -197,7 +195,7 @@ func (o *AutoscaleOptions) Validate(cmd *cobra.Command) error {
|
|||||||
|
|
||||||
func (o *AutoscaleOptions) Run() error {
|
func (o *AutoscaleOptions) Run() error {
|
||||||
r := o.Builder.
|
r := o.Builder.
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace().
|
NamespaceParam(o.Namespace).DefaultNamespace().
|
||||||
FilenameParam(o.EnforceNamespace, o.FilenameOptions).
|
FilenameParam(o.EnforceNamespace, o.FilenameOptions).
|
||||||
@ -231,13 +229,11 @@ func (o *AutoscaleOptions) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resourceMapper := &resource.Mapper{
|
resourceMapper := &resource.Mapper{
|
||||||
ObjectTyper: o.Typer,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
RESTMapper: o.Mapper,
|
RESTMapper: o.Mapper,
|
||||||
ClientMapper: resource.ClientMapperFunc(o.ClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(o.ClientForMapping),
|
||||||
Decoder: cmdutil.InternalVersionDecoder(),
|
Decoder: cmdutil.InternalVersionDecoder(),
|
||||||
}
|
}
|
||||||
hpa, err := resourceMapper.InfoForObject(object, nil)
|
hpa, err := resourceMapper.InfoForObject(object, legacyscheme.Scheme, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -253,7 +249,7 @@ func (o *AutoscaleOptions) Run() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return printer.PrintObj(hpa.AsVersioned(), o.Out)
|
return printer.PrintObj(hpa.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := kubectl.CreateOrUpdateAnnotation(o.CreateAnnotation, hpa.Object, cmdutil.InternalVersionJSONEncoder()); err != nil {
|
if err := kubectl.CreateOrUpdateAnnotation(o.CreateAnnotation, hpa.Object, cmdutil.InternalVersionJSONEncoder()); err != nil {
|
||||||
@ -270,7 +266,7 @@ func (o *AutoscaleOptions) Run() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return printer.PrintObj(info.AsVersioned(), o.Out)
|
return printer.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
@ -203,7 +204,7 @@ func (o *CertificateOptions) RunCertificateDeny(force bool) error {
|
|||||||
func (options *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet internalclientset.Interface, force bool, modify func(csr *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, bool)) error {
|
func (options *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet internalclientset.Interface, force bool, modify func(csr *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, bool)) error {
|
||||||
var found int
|
var found int
|
||||||
r := builder.
|
r := builder.
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
FilenameParam(false, &options.FilenameOptions).
|
FilenameParam(false, &options.FilenameOptions).
|
||||||
ResourceNames("certificatesigningrequest", options.csrNames...).
|
ResourceNames("certificatesigningrequest", options.csrNames...).
|
||||||
@ -227,7 +228,7 @@ func (options *CertificateOptions) modifyCertificateCondition(builder *resource.
|
|||||||
}
|
}
|
||||||
found++
|
found++
|
||||||
|
|
||||||
return options.PrintObj(info.AsVersioned(), options.Out)
|
return options.PrintObj(info.AsVersioned(legacyscheme.Scheme), options.Out)
|
||||||
})
|
})
|
||||||
if found == 0 {
|
if found == 0 {
|
||||||
fmt.Fprintf(options.Out, "No resources found\n")
|
fmt.Fprintf(options.Out, "No resources found\n")
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -95,7 +96,7 @@ func (o *ClusterInfoOptions) Run() error {
|
|||||||
|
|
||||||
// TODO use generalized labels once they are implemented (#341)
|
// TODO use generalized labels once they are implemented (#341)
|
||||||
b := o.Builder.
|
b := o.Builder.
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace().
|
NamespaceParam(o.Namespace).DefaultNamespace().
|
||||||
LabelSelectorParam("kubernetes.io/cluster-service=true").
|
LabelSelectorParam("kubernetes.io/cluster-service=true").
|
||||||
ResourceTypeOrNameArgs(false, []string{"services"}...).
|
ResourceTypeOrNameArgs(false, []string{"services"}...).
|
||||||
|
@ -129,7 +129,7 @@ func (o *ConvertOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) (err er
|
|||||||
|
|
||||||
// build the builder
|
// build the builder
|
||||||
o.builder = f.NewBuilder().
|
o.builder = f.NewBuilder().
|
||||||
Internal().
|
Internal(scheme.Scheme).
|
||||||
LocalParam(o.local)
|
LocalParam(o.local)
|
||||||
if !o.local {
|
if !o.local {
|
||||||
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"))
|
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"))
|
||||||
|
@ -389,9 +389,10 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
mapper, typer := f.Object()
|
mapper := f.RESTMapper()
|
||||||
if !options.DryRun {
|
if !options.DryRun {
|
||||||
gvks, _, err := typer.ObjectKinds(obj)
|
// create subcommands have compiled knowledge of things they create, so type them directly
|
||||||
|
gvks, _, err := legacyscheme.Scheme.ObjectKinds(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -405,12 +406,10 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
resourceMapper := &resource.Mapper{
|
resourceMapper := &resource.Mapper{
|
||||||
ObjectTyper: typer,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
||||||
}
|
}
|
||||||
info, err := resourceMapper.InfoForObject(obj, nil)
|
info, err := resourceMapper.InfoForObject(obj, legacyscheme.Scheme, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -424,7 +423,7 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure we pass a versioned object to the printer
|
// ensure we pass a versioned object to the printer
|
||||||
obj = info.AsVersioned()
|
obj = info.AsVersioned(legacyscheme.Scheme)
|
||||||
} else {
|
} else {
|
||||||
if meta, err := meta.Accessor(obj); err == nil && nsOverriden {
|
if meta, err := meta.Accessor(obj); err == nil && nsOverriden {
|
||||||
meta.SetNamespace(namespace)
|
meta.SetNamespace(namespace)
|
||||||
|
@ -437,7 +437,7 @@ func TestClusterRoleValidate(t *testing.T) {
|
|||||||
|
|
||||||
for name, test := range tests {
|
for name, test := range tests {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
test.clusterRoleOptions.Mapper, _ = tf.Object()
|
test.clusterRoleOptions.Mapper = tf.RESTMapper()
|
||||||
err := test.clusterRoleOptions.Validate()
|
err := test.clusterRoleOptions.Validate()
|
||||||
if test.expectErr && err == nil {
|
if test.expectErr && err == nil {
|
||||||
t.Errorf("%s: expect error happens, but validate passes.", name)
|
t.Errorf("%s: expect error happens, but validate passes.", name)
|
||||||
|
@ -205,7 +205,7 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
|
|||||||
o.ResourceNames = resourceNames
|
o.ResourceNames = resourceNames
|
||||||
|
|
||||||
// Complete other options for Run.
|
// Complete other options for Run.
|
||||||
o.Mapper, _ = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
|
|
||||||
o.DryRun = cmdutil.GetDryRunFlag(cmd)
|
o.DryRun = cmdutil.GetDryRunFlag(cmd)
|
||||||
o.OutputFormat = cmdutil.GetFlagString(cmd, "output")
|
o.OutputFormat = cmdutil.GetFlagString(cmd, "output")
|
||||||
|
@ -339,7 +339,7 @@ func TestValidate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for name, test := range tests {
|
for name, test := range tests {
|
||||||
test.roleOptions.Mapper, _ = tf.Object()
|
test.roleOptions.Mapper = tf.RESTMapper()
|
||||||
err := test.roleOptions.Validate()
|
err := test.roleOptions.Validate()
|
||||||
if test.expectErr && err == nil {
|
if test.expectErr && err == nil {
|
||||||
t.Errorf("%s: expect error happens but validate passes.", name)
|
t.Errorf("%s: expect error happens but validate passes.", name)
|
||||||
|
@ -283,7 +283,7 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace().
|
NamespaceParam(o.Namespace).DefaultNamespace().
|
||||||
ResourceNames("nodes", args...).
|
ResourceNames("nodes", args...).
|
||||||
SingleResourceType().
|
SingleResourceType().
|
||||||
@ -741,7 +741,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||||||
fmt.Printf("error: %v", err)
|
fmt.Printf("error: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
printer.PrintObj(nodeInfo.AsVersioned(), o.Out)
|
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
} else {
|
} else {
|
||||||
if !o.DryRun {
|
if !o.DryRun {
|
||||||
helper := resource.NewHelper(o.restClient, nodeInfo.Mapping)
|
helper := resource.NewHelper(o.restClient, nodeInfo.Mapping)
|
||||||
@ -767,7 +767,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||||||
fmt.Fprintf(o.ErrOut, "%v", err)
|
fmt.Fprintf(o.ErrOut, "%v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
printer.PrintObj(nodeInfo.AsVersioned(), o.Out)
|
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printer, err := o.ToPrinter("skipped")
|
printer, err := o.ToPrinter("skipped")
|
||||||
@ -775,7 +775,7 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
|
|||||||
fmt.Fprintf(o.ErrOut, "%v", err)
|
fmt.Fprintf(o.ErrOut, "%v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
printer.PrintObj(nodeInfo.AsVersioned(), o.Out)
|
printer.PrintObj(nodeInfo.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -836,7 +836,7 @@ func TestDeletePods(t *testing.T) {
|
|||||||
o := DrainOptions{
|
o := DrainOptions{
|
||||||
PrintFlags: printers.NewPrintFlags("drained"),
|
PrintFlags: printers.NewPrintFlags("drained"),
|
||||||
}
|
}
|
||||||
o.mapper, _ = tf.Object()
|
o.mapper = tf.RESTMapper()
|
||||||
o.Out = os.Stdout
|
o.Out = os.Stdout
|
||||||
|
|
||||||
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) {
|
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) {
|
||||||
|
@ -94,7 +94,7 @@ func (o *ExplainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
|
|||||||
o.Recursive = cmdutil.GetFlagBool(cmd, "recursive")
|
o.Recursive = cmdutil.GetFlagBool(cmd, "recursive")
|
||||||
o.ApiVersion = cmdutil.GetFlagString(cmd, "api-version")
|
o.ApiVersion = cmdutil.GetFlagString(cmd, "api-version")
|
||||||
|
|
||||||
o.Mapper, _ = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
o.Schema, err = f.OpenAPISchema()
|
o.Schema, err = f.OpenAPISchema()
|
||||||
|
@ -96,7 +96,6 @@ type ExposeServiceOptions struct {
|
|||||||
|
|
||||||
Namespace string
|
Namespace string
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
|
|
||||||
Builder *resource.Builder
|
Builder *resource.Builder
|
||||||
|
|
||||||
@ -188,7 +187,7 @@ func (o *ExposeServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) e
|
|||||||
o.MapBasedSelectorForObject = f.MapBasedSelectorForObject
|
o.MapBasedSelectorForObject = f.MapBasedSelectorForObject
|
||||||
o.PortsForObject = f.PortsForObject
|
o.PortsForObject = f.PortsForObject
|
||||||
o.ProtocolsForObject = f.ProtocolsForObject
|
o.ProtocolsForObject = f.ProtocolsForObject
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
o.LabelsForObject = f.LabelsForObject
|
o.LabelsForObject = f.LabelsForObject
|
||||||
|
|
||||||
o.Namespace, o.EnforceNamespace, err = f.DefaultNamespace()
|
o.Namespace, o.EnforceNamespace, err = f.DefaultNamespace()
|
||||||
@ -201,7 +200,7 @@ func (o *ExposeServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) e
|
|||||||
|
|
||||||
func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) error {
|
func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) error {
|
||||||
r := o.Builder.
|
r := o.Builder.
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace().
|
NamespaceParam(o.Namespace).DefaultNamespace().
|
||||||
FilenameParam(o.EnforceNamespace, &o.FilenameOptions).
|
FilenameParam(o.EnforceNamespace, &o.FilenameOptions).
|
||||||
@ -312,13 +311,11 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
resourceMapper := &resource.Mapper{
|
resourceMapper := &resource.Mapper{
|
||||||
ObjectTyper: o.Typer,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
RESTMapper: o.Mapper,
|
RESTMapper: o.Mapper,
|
||||||
ClientMapper: resource.ClientMapperFunc(o.ClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(o.ClientForMapping),
|
||||||
Decoder: cmdutil.InternalVersionDecoder(),
|
Decoder: cmdutil.InternalVersionDecoder(),
|
||||||
}
|
}
|
||||||
info, err = resourceMapper.InfoForObject(object, nil)
|
info, err = resourceMapper.InfoForObject(object, legacyscheme.Scheme, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -339,7 +336,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return o.PrintObj(info.AsVersioned(), o.Out)
|
return o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -30,6 +30,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
"k8s.io/kubernetes/pkg/apis/core/validation"
|
"k8s.io/kubernetes/pkg/apis/core/validation"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
@ -201,7 +202,7 @@ func (o *LogsOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Comm
|
|||||||
|
|
||||||
if o.Object == nil {
|
if o.Object == nil {
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace().
|
NamespaceParam(o.Namespace).DefaultNamespace().
|
||||||
SingleResourceType()
|
SingleResourceType()
|
||||||
if o.ResourceArg != "" {
|
if o.ResourceArg != "" {
|
||||||
|
@ -33,6 +33,7 @@ import (
|
|||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/portforward"
|
"k8s.io/client-go/tools/portforward"
|
||||||
"k8s.io/client-go/transport/spdy"
|
"k8s.io/client-go/transport/spdy"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
@ -179,7 +180,7 @@ func (o *PortForwardOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(o.Namespace).DefaultNamespace()
|
NamespaceParam(o.Namespace).DefaultNamespace()
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ go_library(
|
|||||||
"//build/visible_to:pkg_kubectl_cmd_rollout_CONSUMERS",
|
"//build/visible_to:pkg_kubectl_cmd_rollout_CONSUMERS",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/kubectl:go_default_library",
|
"//pkg/kubectl:go_default_library",
|
||||||
"//pkg/kubectl/cmd/set:go_default_library",
|
"//pkg/kubectl/cmd/set:go_default_library",
|
||||||
"//pkg/kubectl/cmd/templates:go_default_library",
|
"//pkg/kubectl/cmd/templates:go_default_library",
|
||||||
@ -29,7 +30,6 @@ go_library(
|
|||||||
"//vendor/github.com/renstrom/dedent:go_default_library",
|
"//vendor/github.com/renstrom/dedent:go_default_library",
|
||||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -81,7 +82,7 @@ func RunHistory(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []str
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, options).
|
FilenameParam(enforceNamespace, options).
|
||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
|
@ -23,9 +23,9 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
@ -41,7 +41,6 @@ type PauseConfig struct {
|
|||||||
|
|
||||||
Pauser func(info *resource.Info) ([]byte, error)
|
Pauser func(info *resource.Info) ([]byte, error)
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
Infos []*resource.Info
|
Infos []*resource.Info
|
||||||
|
|
||||||
Out io.Writer
|
Out io.Writer
|
||||||
@ -100,7 +99,7 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out i
|
|||||||
return cmdutil.UsageErrorf(cmd, "%s", cmd.Use)
|
return cmdutil.UsageErrorf(cmd, "%s", cmd.Use)
|
||||||
}
|
}
|
||||||
|
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
|
|
||||||
o.Pauser = f.Pauser
|
o.Pauser = f.Pauser
|
||||||
o.Out = out
|
o.Out = out
|
||||||
@ -111,7 +110,7 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out i
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
|
@ -23,9 +23,9 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
@ -41,7 +41,6 @@ type ResumeConfig struct {
|
|||||||
|
|
||||||
Resumer func(object *resource.Info) ([]byte, error)
|
Resumer func(object *resource.Info) ([]byte, error)
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
Infos []*resource.Info
|
Infos []*resource.Info
|
||||||
|
|
||||||
Out io.Writer
|
Out io.Writer
|
||||||
@ -98,7 +97,7 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out
|
|||||||
return cmdutil.UsageErrorf(cmd, "%s", cmd.Use)
|
return cmdutil.UsageErrorf(cmd, "%s", cmd.Use)
|
||||||
}
|
}
|
||||||
|
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
|
|
||||||
o.Resumer = f.Resumer
|
o.Resumer = f.Resumer
|
||||||
o.Out = out
|
o.Out = out
|
||||||
@ -109,7 +108,7 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -85,7 +86,7 @@ func RunStatus(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, options).
|
FilenameParam(enforceNamespace, options).
|
||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
|
@ -20,8 +20,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -38,7 +38,6 @@ type UndoOptions struct {
|
|||||||
|
|
||||||
Rollbackers []kubectl.Rollbacker
|
Rollbackers []kubectl.Rollbacker
|
||||||
Mapper meta.RESTMapper
|
Mapper meta.RESTMapper
|
||||||
Typer runtime.ObjectTyper
|
|
||||||
Infos []*resource.Info
|
Infos []*resource.Info
|
||||||
ToRevision int64
|
ToRevision int64
|
||||||
DryRun bool
|
DryRun bool
|
||||||
@ -102,7 +101,7 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io
|
|||||||
}
|
}
|
||||||
|
|
||||||
o.ToRevision = cmdutil.GetFlagInt64(cmd, "to-revision")
|
o.ToRevision = cmdutil.GetFlagInt64(cmd, "to-revision")
|
||||||
o.Mapper, o.Typer = f.Object()
|
o.Mapper = f.RESTMapper()
|
||||||
o.Out = out
|
o.Out = out
|
||||||
o.DryRun = cmdutil.GetDryRunFlag(cmd)
|
o.DryRun = cmdutil.GetDryRunFlag(cmd)
|
||||||
|
|
||||||
@ -112,7 +111,7 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
FilenameParam(enforceNamespace, &o.FilenameOptions).
|
||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
|
@ -458,7 +458,7 @@ func (o *RunOptions) removeCreatedObjects(f cmdutil.Factory, createdObjects []*R
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r := f.NewBuilder().
|
r := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(namespace).DefaultNamespace().
|
NamespaceParam(namespace).DefaultNamespace().
|
||||||
ResourceNames(obj.Mapping.Resource, name).
|
ResourceNames(obj.Mapping.Resource, name).
|
||||||
@ -643,8 +643,9 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper, typer := f.Object()
|
mapper := f.RESTMapper()
|
||||||
groupVersionKinds, _, err := typer.ObjectKinds(obj)
|
// run has compiled knowledge of the thing is is creating
|
||||||
|
groupVersionKinds, _, err := legacyscheme.Scheme.ObjectKinds(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -674,13 +675,11 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
|
|||||||
versioned := obj
|
versioned := obj
|
||||||
if !o.DryRun {
|
if !o.DryRun {
|
||||||
resourceMapper := &resource.Mapper{
|
resourceMapper := &resource.Mapper{
|
||||||
ObjectTyper: typer,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
||||||
Decoder: cmdutil.InternalVersionDecoder(),
|
Decoder: cmdutil.InternalVersionDecoder(),
|
||||||
}
|
}
|
||||||
info, err := resourceMapper.InfoForObject(obj, nil)
|
info, err := resourceMapper.InfoForObject(obj, legacyscheme.Scheme, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -694,7 +693,7 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
versioned = info.AsVersioned()
|
versioned = info.AsVersioned(legacyscheme.Scheme)
|
||||||
}
|
}
|
||||||
return &RunObject{
|
return &RunObject{
|
||||||
Versioned: versioned,
|
Versioned: versioned,
|
||||||
|
@ -253,7 +253,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error {
|
|||||||
|
|
||||||
if len(o.From) != 0 {
|
if len(o.From) != 0 {
|
||||||
b := f.NewBuilder().
|
b := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -321,7 +321,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b := f.NewBuilder().
|
b := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -339,7 +339,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
info.Object = info.AsVersioned()
|
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||||
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||||
resolutionErrorsEncountered := false
|
resolutionErrorsEncountered := false
|
||||||
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
||||||
@ -430,7 +430,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if o.Local || o.DryRun {
|
if o.Local || o.DryRun {
|
||||||
if err := o.PrintObj(patch.Info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -449,7 +449,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error {
|
|||||||
return fmt.Errorf("at least one environment variable must be provided")
|
return fmt.Errorf("at least one environment variable must be provided")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := o.PrintObj(info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package set
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@ -160,7 +161,7 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
|
|||||||
|
|
||||||
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -210,7 +211,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
|
|
||||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
transformed := false
|
transformed := false
|
||||||
info.Object = info.AsVersioned()
|
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||||
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||||
for name, image := range o.ContainerImages {
|
for name, image := range o.ContainerImages {
|
||||||
var (
|
var (
|
||||||
@ -274,7 +275,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if o.Local || o.DryRun {
|
if o.Local || o.DryRun {
|
||||||
if err := o.PrintObj(patch.Info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -288,7 +289,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
}
|
}
|
||||||
info.Refresh(obj, true)
|
info.Refresh(obj, true)
|
||||||
|
|
||||||
if err := o.PrintObj(info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -172,7 +173,7 @@ func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar
|
|||||||
|
|
||||||
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -223,7 +224,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||||||
allErrs := []error{}
|
allErrs := []error{}
|
||||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
transformed := false
|
transformed := false
|
||||||
info.Object = info.AsVersioned()
|
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||||
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
_, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error {
|
||||||
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
|
||||||
if len(containers) != 0 {
|
if len(containers) != 0 {
|
||||||
@ -276,7 +277,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if o.Local || o.DryRun {
|
if o.Local || o.DryRun {
|
||||||
if err := o.PrintObj(patch.Info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -289,7 +290,7 @@ func (o *SetResourcesOptions) Run() error {
|
|||||||
}
|
}
|
||||||
info.Refresh(obj, true)
|
info.Refresh(obj, true)
|
||||||
|
|
||||||
if err := o.PrintObj(info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/validation"
|
"k8s.io/apimachinery/pkg/util/validation"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
@ -139,7 +140,7 @@ func (o *SetSelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper, _ := f.Object()
|
mapper := f.RESTMapper()
|
||||||
o.mapper = mapper
|
o.mapper = mapper
|
||||||
|
|
||||||
o.resources, o.selector, err = getResourcesAndSelector(args)
|
o.resources, o.selector, err = getResourcesAndSelector(args)
|
||||||
@ -149,7 +150,7 @@ func (o *SetSelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
|||||||
|
|
||||||
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
||||||
o.builder = f.NewBuilder().
|
o.builder = f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.local).
|
LocalParam(o.local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -207,7 +208,7 @@ func (o *SetSelectorOptions) RunSelector() error {
|
|||||||
return r.Visit(func(info *resource.Info, err error) error {
|
return r.Visit(func(info *resource.Info, err error) error {
|
||||||
patch := &Patch{Info: info}
|
patch := &Patch{Info: info}
|
||||||
CalculatePatch(patch, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
CalculatePatch(patch, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
versioned := info.AsVersioned()
|
versioned := info.AsVersioned(legacyscheme.Scheme)
|
||||||
patch.Info.Object = versioned
|
patch.Info.Object = versioned
|
||||||
selectErr := updateSelectorForObject(info.Object, *o.selector)
|
selectErr := updateSelectorForObject(info.Object, *o.selector)
|
||||||
if selectErr != nil {
|
if selectErr != nil {
|
||||||
@ -235,7 +236,7 @@ func (o *SetSelectorOptions) RunSelector() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
info.Refresh(patched, true)
|
info.Refresh(patched, true)
|
||||||
return o.PrintObj(patch.Info.AsVersioned(), o.Out)
|
return o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
@ -151,7 +152,7 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman
|
|||||||
resources := args[:len(args)-1]
|
resources := args[:len(args)-1]
|
||||||
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.local).
|
LocalParam(o.local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -173,7 +174,7 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman
|
|||||||
func (o *SetServiceAccountOptions) Run() error {
|
func (o *SetServiceAccountOptions) Run() error {
|
||||||
patchErrs := []error{}
|
patchErrs := []error{}
|
||||||
patchFn := func(info *resource.Info) ([]byte, error) {
|
patchFn := func(info *resource.Info) ([]byte, error) {
|
||||||
info.Object = info.AsVersioned()
|
info.Object = info.AsVersioned(legacyscheme.Scheme)
|
||||||
_, err := o.updatePodSpecForObject(info.Object, func(podSpec *v1.PodSpec) error {
|
_, err := o.updatePodSpecForObject(info.Object, func(podSpec *v1.PodSpec) error {
|
||||||
podSpec.ServiceAccountName = o.serviceAccountName
|
podSpec.ServiceAccountName = o.serviceAccountName
|
||||||
return nil
|
return nil
|
||||||
@ -197,7 +198,7 @@ func (o *SetServiceAccountOptions) Run() error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if o.local || o.dryRun {
|
if o.local || o.dryRun {
|
||||||
if err := o.PrintObj(patch.Info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -209,7 +210,7 @@ func (o *SetServiceAccountOptions) Run() error {
|
|||||||
}
|
}
|
||||||
info.Refresh(patched, true)
|
info.Refresh(patched, true)
|
||||||
|
|
||||||
if err := o.PrintObj(info.AsVersioned(), o.Out); err != nil {
|
if err := o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
@ -136,7 +137,7 @@ func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []
|
|||||||
|
|
||||||
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
includeUninitialized := cmdutil.ShouldIncludeUninitialized(cmd, false)
|
||||||
builder := f.NewBuilder().
|
builder := f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -232,7 +233,7 @@ func (o *SubjectOptions) Run(f cmdutil.Factory, fn updateSubjects) error {
|
|||||||
transformed, err := updateSubjectForObject(info.Object, subjects, fn)
|
transformed, err := updateSubjectForObject(info.Object, subjects, fn)
|
||||||
if transformed && err == nil {
|
if transformed && err == nil {
|
||||||
// TODO: switch UpdatePodSpecForObject to work on v1.PodSpec
|
// TODO: switch UpdatePodSpecForObject to work on v1.PodSpec
|
||||||
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.AsVersioned())
|
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.AsVersioned(legacyscheme.Scheme))
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
})
|
})
|
||||||
@ -265,7 +266,7 @@ func (o *SubjectOptions) Run(f cmdutil.Factory, fn updateSubjects) error {
|
|||||||
}
|
}
|
||||||
info.Refresh(obj, true)
|
info.Refresh(obj, true)
|
||||||
|
|
||||||
return o.PrintObj(info.AsVersioned(), o.Out)
|
return o.PrintObj(info.AsVersioned(legacyscheme.Scheme), o.Out)
|
||||||
}
|
}
|
||||||
return utilerrors.NewAggregate(allErrs)
|
return utilerrors.NewAggregate(allErrs)
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Com
|
|||||||
return cmdutil.UsageErrorf(cmd, err.Error())
|
return cmdutil.UsageErrorf(cmd, err.Error())
|
||||||
}
|
}
|
||||||
o.builder = f.NewBuilder().
|
o.builder = f.NewBuilder().
|
||||||
Internal().
|
Internal(legacyscheme.Scheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(namespace).DefaultNamespace()
|
NamespaceParam(namespace).DefaultNamespace()
|
||||||
if o.selector != "" {
|
if o.selector != "" {
|
||||||
|
@ -337,19 +337,16 @@ func (f *TestFactory) Command(*cobra.Command, bool) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *TestFactory) NewBuilder() *resource.Builder {
|
func (f *TestFactory) NewBuilder() *resource.Builder {
|
||||||
mapper, typer := f.Object()
|
mapper := f.RESTMapper()
|
||||||
|
|
||||||
return resource.NewBuilder(
|
return resource.NewBuilder(
|
||||||
&resource.Mapper{
|
&resource.Mapper{
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ObjectTyper: typer,
|
|
||||||
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(f.ClientForMapping),
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
Decoder: cmdutil.InternalVersionDecoder(),
|
Decoder: cmdutil.InternalVersionDecoder(),
|
||||||
},
|
},
|
||||||
&resource.Mapper{
|
&resource.Mapper{
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ObjectTyper: typer,
|
|
||||||
ClientMapper: resource.ClientMapperFunc(f.UnstructuredClientForMapping),
|
ClientMapper: resource.ClientMapperFunc(f.UnstructuredClientForMapping),
|
||||||
Decoder: unstructured.UnstructuredJSONScheme,
|
Decoder: unstructured.UnstructuredJSONScheme,
|
||||||
},
|
},
|
||||||
@ -428,7 +425,7 @@ func (f *TestFactory) ClientSetForVersion(requiredVersion *schema.GroupVersion)
|
|||||||
return f.ClientSet()
|
return f.ClientSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *TestFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
func (f *TestFactory) RESTMapper() meta.RESTMapper {
|
||||||
groupResources := testDynamicResources()
|
groupResources := testDynamicResources()
|
||||||
mapper := discovery.NewRESTMapper(groupResources)
|
mapper := discovery.NewRESTMapper(groupResources)
|
||||||
// for backwards compatibility with existing tests, allow rest mappings from the scheme to show up
|
// for backwards compatibility with existing tests, allow rest mappings from the scheme to show up
|
||||||
@ -441,10 +438,9 @@ func (f *TestFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: should probably be the external scheme
|
// TODO: should probably be the external scheme
|
||||||
typer := discovery.NewUnstructuredObjectTyper(groupResources, legacyscheme.Scheme)
|
|
||||||
fakeDs := &fakeCachedDiscoveryClient{}
|
fakeDs := &fakeCachedDiscoveryClient{}
|
||||||
expander := cmdutil.NewShortcutExpander(mapper, fakeDs)
|
expander := cmdutil.NewShortcutExpander(mapper, fakeDs)
|
||||||
return expander, typer
|
return expander
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *TestFactory) LogsForObject(object, options runtime.Object, timeout time.Duration) (*restclient.Request, error) {
|
func (f *TestFactory) LogsForObject(object, options runtime.Object, timeout time.Duration) (*restclient.Request, error) {
|
||||||
|
@ -164,7 +164,7 @@ type ClientAccessFactory interface {
|
|||||||
// Generally they provide object typing and functions that build requests based on the negotiated clients.
|
// Generally they provide object typing and functions that build requests based on the negotiated clients.
|
||||||
type ObjectMappingFactory interface {
|
type ObjectMappingFactory interface {
|
||||||
// Returns interfaces for dealing with arbitrary runtime.Objects.
|
// Returns interfaces for dealing with arbitrary runtime.Objects.
|
||||||
Object() (meta.RESTMapper, runtime.ObjectTyper)
|
RESTMapper() meta.RESTMapper
|
||||||
// Returns interface for expanding categories like `all`.
|
// Returns interface for expanding categories like `all`.
|
||||||
CategoryExpander() categories.CategoryExpander
|
CategoryExpander() categories.CategoryExpander
|
||||||
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
|
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
|
||||||
|
@ -25,7 +25,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/client-go/dynamic"
|
"k8s.io/client-go/dynamic"
|
||||||
scaleclient "k8s.io/client-go/scale"
|
scaleclient "k8s.io/client-go/scale"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/plugins"
|
"k8s.io/kubernetes/pkg/kubectl/plugins"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
@ -48,7 +47,7 @@ func NewBuilderFactory(clientAccessFactory ClientAccessFactory, objectMappingFac
|
|||||||
// NewBuilder returns a new resource builder for structured api objects.
|
// NewBuilder returns a new resource builder for structured api objects.
|
||||||
func (f *ring2Factory) NewBuilder() *resource.Builder {
|
func (f *ring2Factory) NewBuilder() *resource.Builder {
|
||||||
clientMapperFunc := resource.ClientMapperFunc(f.objectMappingFactory.ClientForMapping)
|
clientMapperFunc := resource.ClientMapperFunc(f.objectMappingFactory.ClientForMapping)
|
||||||
mapper, typer := f.objectMappingFactory.Object()
|
mapper := f.objectMappingFactory.RESTMapper()
|
||||||
|
|
||||||
unstructuredClientMapperFunc := resource.ClientMapperFunc(f.objectMappingFactory.UnstructuredClientForMapping)
|
unstructuredClientMapperFunc := resource.ClientMapperFunc(f.objectMappingFactory.UnstructuredClientForMapping)
|
||||||
|
|
||||||
@ -57,14 +56,11 @@ func (f *ring2Factory) NewBuilder() *resource.Builder {
|
|||||||
return resource.NewBuilder(
|
return resource.NewBuilder(
|
||||||
&resource.Mapper{
|
&resource.Mapper{
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ObjectTyper: typer,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
ClientMapper: clientMapperFunc,
|
ClientMapper: clientMapperFunc,
|
||||||
Decoder: InternalVersionDecoder(),
|
Decoder: InternalVersionDecoder(),
|
||||||
},
|
},
|
||||||
&resource.Mapper{
|
&resource.Mapper{
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ObjectTyper: typer,
|
|
||||||
ClientMapper: unstructuredClientMapperFunc,
|
ClientMapper: unstructuredClientMapperFunc,
|
||||||
Decoder: unstructured.UnstructuredJSONScheme,
|
Decoder: unstructured.UnstructuredJSONScheme,
|
||||||
},
|
},
|
||||||
@ -101,7 +97,7 @@ func (f *ring2Factory) ScaleClient() (scaleclient.ScalesGetter, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resolver := scaleclient.NewDiscoveryScaleKindResolver(discoClient)
|
resolver := scaleclient.NewDiscoveryScaleKindResolver(discoClient)
|
||||||
mapper, _ := f.objectMappingFactory.Object()
|
mapper := f.objectMappingFactory.RESTMapper()
|
||||||
return scaleclient.New(restClient, mapper, dynamic.LegacyAPIPathResolverFunc, resolver), nil
|
return scaleclient.New(restClient, mapper, dynamic.LegacyAPIPathResolverFunc, resolver), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,33 +76,22 @@ func NewObjectMappingFactory(clientAccessFactory ClientAccessFactory) ObjectMapp
|
|||||||
// the built in mapper if necessary. It supports unstructured objects either way, since
|
// the built in mapper if necessary. It supports unstructured objects either way, since
|
||||||
// the underlying Scheme supports Unstructured. The mapper will return converters that can
|
// the underlying Scheme supports Unstructured. The mapper will return converters that can
|
||||||
// convert versioned types to unstructured and back.
|
// convert versioned types to unstructured and back.
|
||||||
func (f *ring1Factory) objectLoader() (meta.RESTMapper, runtime.ObjectTyper, error) {
|
func (f *ring1Factory) restMapper() (meta.RESTMapper, error) {
|
||||||
discoveryClient, err := f.clientAccessFactory.DiscoveryClient()
|
discoveryClient, err := f.clientAccessFactory.DiscoveryClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(3).Infof("Unable to get a discovery client to find server resources, falling back to hardcoded types: %v", err)
|
glog.V(3).Infof("Unable to get a discovery client to find server resources, falling back to hardcoded types: %v", err)
|
||||||
return legacyscheme.Registry.RESTMapper(), legacyscheme.Scheme, nil
|
return legacyscheme.Registry.RESTMapper(), nil
|
||||||
}
|
|
||||||
|
|
||||||
groupResources, err := discovery.GetAPIGroupResources(discoveryClient)
|
|
||||||
if err != nil && !discoveryClient.Fresh() {
|
|
||||||
discoveryClient.Invalidate()
|
|
||||||
groupResources, err = discovery.GetAPIGroupResources(discoveryClient)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
glog.V(3).Infof("Unable to retrieve API resources, falling back to hardcoded types: %v", err)
|
|
||||||
return legacyscheme.Registry.RESTMapper(), legacyscheme.Scheme, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow conversion between typed and unstructured objects
|
// allow conversion between typed and unstructured objects
|
||||||
mapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient)
|
mapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient)
|
||||||
// TODO: should this also indicate it recognizes typed objects?
|
// TODO: should this also indicate it recognizes typed objects?
|
||||||
typer := discovery.NewUnstructuredObjectTyper(groupResources, legacyscheme.Scheme)
|
|
||||||
expander := NewShortcutExpander(mapper, discoveryClient)
|
expander := NewShortcutExpander(mapper, discoveryClient)
|
||||||
return expander, typer, err
|
return expander, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ring1Factory) Object() (meta.RESTMapper, runtime.ObjectTyper) {
|
func (f *ring1Factory) RESTMapper() meta.RESTMapper {
|
||||||
return meta.NewLazyObjectLoader(f.objectLoader)
|
return meta.NewLazyRESTMapperLoader(f.restMapper)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ring1Factory) CategoryExpander() categories.CategoryExpander {
|
func (f *ring1Factory) CategoryExpander() categories.CategoryExpander {
|
||||||
|
@ -34,7 +34,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
manualfake "k8s.io/client-go/rest/fake"
|
manualfake "k8s.io/client-go/rest/fake"
|
||||||
testcore "k8s.io/client-go/testing"
|
testcore "k8s.io/client-go/testing"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
@ -475,8 +474,6 @@ func TestDiscoveryReplaceAliases(t *testing.T) {
|
|||||||
b := resource.NewBuilder(
|
b := resource.NewBuilder(
|
||||||
&resource.Mapper{
|
&resource.Mapper{
|
||||||
RESTMapper: mapper,
|
RESTMapper: mapper,
|
||||||
ObjectTyper: legacyscheme.Scheme,
|
|
||||||
ObjectConverter: legacyscheme.Scheme,
|
|
||||||
ClientMapper: fakeClient(),
|
ClientMapper: fakeClient(),
|
||||||
Decoder: testapi.Default.Codec(),
|
Decoder: testapi.Default.Codec(),
|
||||||
},
|
},
|
||||||
|
@ -29,6 +29,7 @@ go_library(
|
|||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
@ -55,6 +56,8 @@ go_test(
|
|||||||
],
|
],
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
|
"//pkg/apis/core/install:go_default_library",
|
||||||
"//pkg/kubectl/categories:go_default_library",
|
"//pkg/kubectl/categories:go_default_library",
|
||||||
"//pkg/kubectl/scheme:go_default_library",
|
"//pkg/kubectl/scheme:go_default_library",
|
||||||
"//vendor/github.com/ghodss/yaml:go_default_library",
|
"//vendor/github.com/ghodss/yaml:go_default_library",
|
||||||
|
@ -26,7 +26,9 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
@ -50,6 +52,10 @@ type Builder struct {
|
|||||||
internal *Mapper
|
internal *Mapper
|
||||||
unstructured *Mapper
|
unstructured *Mapper
|
||||||
|
|
||||||
|
// objectTyper is statically determinant per-command invocation based on your internal or unstructured choice
|
||||||
|
// it does not ever need to rely upon discovery.
|
||||||
|
objectTyper runtime.ObjectTyper
|
||||||
|
|
||||||
errs []error
|
errs []error
|
||||||
|
|
||||||
paths []Visitor
|
paths []Visitor
|
||||||
@ -186,8 +192,8 @@ func (b *Builder) Unstructured() *Builder {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
b.mapper = b.unstructured
|
b.mapper = b.unstructured
|
||||||
// the unstructured mapper doesn't do any conversion
|
|
||||||
b.mapper.ObjectConverter = nil
|
b.objectTyper = unstructuredscheme.NewUnstructuredObjectTyper()
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +202,7 @@ func (b *Builder) Unstructured() *Builder {
|
|||||||
// to the server will not be seen by the client code and may result in failure. Only
|
// to the server will not be seen by the client code and may result in failure. Only
|
||||||
// use this mode when working offline, or when generating patches to send to the server.
|
// use this mode when working offline, or when generating patches to send to the server.
|
||||||
// Use Unstructured if you are reading an object and performing a POST or PUT.
|
// Use Unstructured if you are reading an object and performing a POST or PUT.
|
||||||
func (b *Builder) Internal() *Builder {
|
func (b *Builder) Internal(typer runtime.ObjectTyper) *Builder {
|
||||||
if b.internal == nil {
|
if b.internal == nil {
|
||||||
b.errs = append(b.errs, fmt.Errorf("no internal mapper provided"))
|
b.errs = append(b.errs, fmt.Errorf("no internal mapper provided"))
|
||||||
return b
|
return b
|
||||||
@ -206,6 +212,8 @@ func (b *Builder) Internal() *Builder {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
b.mapper = b.internal
|
b.mapper = b.internal
|
||||||
|
|
||||||
|
b.objectTyper = typer
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,6 +644,11 @@ func (b *Builder) mappingFor(resourceOrKindArg string) (*meta.RESTMapping, error
|
|||||||
// if we error out here, it is because we could not match a resource or a kind
|
// if we error out here, it is because we could not match a resource or a kind
|
||||||
// for the given argument. To maintain consistency with previous behavior,
|
// for the given argument. To maintain consistency with previous behavior,
|
||||||
// announce that a resource type could not be found.
|
// announce that a resource type could not be found.
|
||||||
|
// if the error is a URL error, then we had trouble doing discovery, so we should return the original
|
||||||
|
// error since it may help a user diagnose what is actually wrong
|
||||||
|
if _, ok := err.(*url.Error); ok {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("the server doesn't have a resource type %q", groupResource.Resource)
|
return nil, fmt.Errorf("the server doesn't have a resource type %q", groupResource.Resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,7 +775,7 @@ func (b *Builder) visitBySelector() *Result {
|
|||||||
if mapping.Scope.Name() != meta.RESTScopeNameNamespace {
|
if mapping.Scope.Name() != meta.RESTScopeNameNamespace {
|
||||||
selectorNamespace = ""
|
selectorNamespace = ""
|
||||||
}
|
}
|
||||||
visitors = append(visitors, NewSelector(client, mapping, b.mapper.ObjectConverter, selectorNamespace, labelSelector, fieldSelector, b.export, b.includeUninitialized, b.limitChunks))
|
visitors = append(visitors, NewSelector(client, mapping, selectorNamespace, labelSelector, fieldSelector, b.export, b.includeUninitialized, b.limitChunks))
|
||||||
}
|
}
|
||||||
if b.continueOnError {
|
if b.continueOnError {
|
||||||
result.visitor = EagerVisitorList(visitors)
|
result.visitor = EagerVisitorList(visitors)
|
||||||
@ -839,7 +852,6 @@ func (b *Builder) visitByResource() *Result {
|
|||||||
info := &Info{
|
info := &Info{
|
||||||
Client: client,
|
Client: client,
|
||||||
Mapping: mapping,
|
Mapping: mapping,
|
||||||
toVersionedObjectConverter: b.mapper.ObjectConverter,
|
|
||||||
Namespace: selectorNamespace,
|
Namespace: selectorNamespace,
|
||||||
Name: tuple.Name,
|
Name: tuple.Name,
|
||||||
Export: b.export,
|
Export: b.export,
|
||||||
@ -905,7 +917,6 @@ func (b *Builder) visitByName() *Result {
|
|||||||
info := &Info{
|
info := &Info{
|
||||||
Client: client,
|
Client: client,
|
||||||
Mapping: mapping,
|
Mapping: mapping,
|
||||||
toVersionedObjectConverter: b.mapper.ObjectConverter,
|
|
||||||
Namespace: selectorNamespace,
|
Namespace: selectorNamespace,
|
||||||
Name: name,
|
Name: name,
|
||||||
Export: b.export,
|
Export: b.export,
|
||||||
@ -944,7 +955,7 @@ func (b *Builder) visitByPaths() *Result {
|
|||||||
if b.latest {
|
if b.latest {
|
||||||
// must flatten lists prior to fetching
|
// must flatten lists prior to fetching
|
||||||
if b.flatten {
|
if b.flatten {
|
||||||
visitors = NewFlattenListVisitor(visitors, b.mapper)
|
visitors = NewFlattenListVisitor(visitors, b.objectTyper, b.mapper)
|
||||||
}
|
}
|
||||||
// must set namespace prior to fetching
|
// must set namespace prior to fetching
|
||||||
if b.defaultNamespace {
|
if b.defaultNamespace {
|
||||||
@ -975,7 +986,7 @@ func (b *Builder) Do() *Result {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
if b.flatten {
|
if b.flatten {
|
||||||
r.visitor = NewFlattenListVisitor(r.visitor, b.mapper)
|
r.visitor = NewFlattenListVisitor(r.visitor, b.objectTyper, b.mapper)
|
||||||
}
|
}
|
||||||
helpers := []VisitorFunc{}
|
helpers := []VisitorFunc{}
|
||||||
if b.defaultNamespace {
|
if b.defaultNamespace {
|
||||||
|
@ -46,8 +46,12 @@ import (
|
|||||||
"k8s.io/client-go/rest/fake"
|
"k8s.io/client-go/rest/fake"
|
||||||
restclientwatch "k8s.io/client-go/rest/watch"
|
restclientwatch "k8s.io/client-go/rest/watch"
|
||||||
utiltesting "k8s.io/client-go/util/testing"
|
utiltesting "k8s.io/client-go/util/testing"
|
||||||
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/categories"
|
"k8s.io/kubernetes/pkg/kubectl/categories"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
||||||
|
|
||||||
|
// install the pod scheme into the legacy scheme for test typer resolution
|
||||||
|
_ "k8s.io/kubernetes/pkg/apis/core/install"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -271,14 +275,12 @@ func newDefaultBuilderWith(client ClientMapper) *Builder {
|
|||||||
return NewBuilder(
|
return NewBuilder(
|
||||||
&Mapper{
|
&Mapper{
|
||||||
RESTMapper: restmapper,
|
RESTMapper: restmapper,
|
||||||
ObjectTyper: scheme.Scheme,
|
|
||||||
ObjectConverter: scheme.Scheme,
|
|
||||||
ClientMapper: client,
|
ClientMapper: client,
|
||||||
Decoder: corev1Codec,
|
Decoder: corev1Codec,
|
||||||
},
|
},
|
||||||
nil,
|
nil,
|
||||||
categories.LegacyCategoryExpander,
|
categories.LegacyCategoryExpander,
|
||||||
).Internal()
|
).Internal(legacyscheme.Scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPathBuilderAndVersionedObjectNotDefaulted(t *testing.T) {
|
func TestPathBuilderAndVersionedObjectNotDefaulted(t *testing.T) {
|
||||||
@ -297,7 +299,7 @@ func TestPathBuilderAndVersionedObjectNotDefaulted(t *testing.T) {
|
|||||||
if info.Name != "update-demo-kitten" || info.Namespace != "" || info.Object == nil {
|
if info.Name != "update-demo-kitten" || info.Namespace != "" || info.Object == nil {
|
||||||
t.Errorf("unexpected info: %#v", info)
|
t.Errorf("unexpected info: %#v", info)
|
||||||
}
|
}
|
||||||
obj := info.AsVersioned()
|
obj := info.AsVersioned(legacyscheme.Scheme)
|
||||||
version, ok := obj.(*v1.ReplicationController)
|
version, ok := obj.(*v1.ReplicationController)
|
||||||
// versioned object does not have defaulting applied
|
// versioned object does not have defaulting applied
|
||||||
if obj == nil || !ok || version.Spec.Replicas != nil {
|
if obj == nil || !ok || version.Spec.Replicas != nil {
|
||||||
|
@ -28,9 +28,6 @@ import (
|
|||||||
// Mapper is a convenience struct for holding references to the interfaces
|
// Mapper is a convenience struct for holding references to the interfaces
|
||||||
// needed to create Info for arbitrary objects.
|
// needed to create Info for arbitrary objects.
|
||||||
type Mapper struct {
|
type Mapper struct {
|
||||||
ObjectTyper runtime.ObjectTyper
|
|
||||||
ObjectConverter runtime.ObjectConvertor
|
|
||||||
|
|
||||||
RESTMapper meta.RESTMapper
|
RESTMapper meta.RESTMapper
|
||||||
ClientMapper ClientMapper
|
ClientMapper ClientMapper
|
||||||
Decoder runtime.Decoder
|
Decoder runtime.Decoder
|
||||||
@ -62,7 +59,6 @@ func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) {
|
|||||||
return &Info{
|
return &Info{
|
||||||
Client: client,
|
Client: client,
|
||||||
Mapping: mapping,
|
Mapping: mapping,
|
||||||
toVersionedObjectConverter: m.ObjectConverter,
|
|
||||||
|
|
||||||
Source: source,
|
Source: source,
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
@ -76,8 +72,8 @@ func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) {
|
|||||||
// InfoForObject creates an Info object for the given Object. An error is returned
|
// InfoForObject creates an Info object for the given Object. An error is returned
|
||||||
// if the object cannot be introspected. Name and namespace will be set into Info
|
// if the object cannot be introspected. Name and namespace will be set into Info
|
||||||
// if the mapping's MetadataAccessor can retrieve them.
|
// if the mapping's MetadataAccessor can retrieve them.
|
||||||
func (m *Mapper) InfoForObject(obj runtime.Object, preferredGVKs []schema.GroupVersionKind) (*Info, error) {
|
func (m *Mapper) InfoForObject(obj runtime.Object, typer runtime.ObjectTyper, preferredGVKs []schema.GroupVersionKind) (*Info, error) {
|
||||||
groupVersionKinds, _, err := m.ObjectTyper.ObjectKinds(obj)
|
groupVersionKinds, _, err := typer.ObjectKinds(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to get type info from the object %q: %v", reflect.TypeOf(obj), err)
|
return nil, fmt.Errorf("unable to get type info from the object %q: %v", reflect.TypeOf(obj), err)
|
||||||
}
|
}
|
||||||
@ -102,7 +98,6 @@ func (m *Mapper) InfoForObject(obj runtime.Object, preferredGVKs []schema.GroupV
|
|||||||
return &Info{
|
return &Info{
|
||||||
Client: client,
|
Client: client,
|
||||||
Mapping: mapping,
|
Mapping: mapping,
|
||||||
toVersionedObjectConverter: m.ObjectConverter,
|
|
||||||
|
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
Name: name,
|
Name: name,
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,7 +29,6 @@ import (
|
|||||||
type Selector struct {
|
type Selector struct {
|
||||||
Client RESTClient
|
Client RESTClient
|
||||||
Mapping *meta.RESTMapping
|
Mapping *meta.RESTMapping
|
||||||
ObjectConverter runtime.ObjectConvertor
|
|
||||||
Namespace string
|
Namespace string
|
||||||
LabelSelector string
|
LabelSelector string
|
||||||
FieldSelector string
|
FieldSelector string
|
||||||
@ -40,11 +38,10 @@ type Selector struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewSelector creates a resource selector which hides details of getting items by their label selector.
|
// NewSelector creates a resource selector which hides details of getting items by their label selector.
|
||||||
func NewSelector(client RESTClient, mapping *meta.RESTMapping, objectConverter runtime.ObjectConvertor, namespace, labelSelector, fieldSelector string, export, includeUninitialized bool, limitChunks int64) *Selector {
|
func NewSelector(client RESTClient, mapping *meta.RESTMapping, namespace, labelSelector, fieldSelector string, export, includeUninitialized bool, limitChunks int64) *Selector {
|
||||||
return &Selector{
|
return &Selector{
|
||||||
Client: client,
|
Client: client,
|
||||||
Mapping: mapping,
|
Mapping: mapping,
|
||||||
ObjectConverter: objectConverter,
|
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
LabelSelector: labelSelector,
|
LabelSelector: labelSelector,
|
||||||
FieldSelector: fieldSelector,
|
FieldSelector: fieldSelector,
|
||||||
@ -96,7 +93,6 @@ func (r *Selector) Visit(fn VisitorFunc) error {
|
|||||||
info := &Info{
|
info := &Info{
|
||||||
Client: r.Client,
|
Client: r.Client,
|
||||||
Mapping: r.Mapping,
|
Mapping: r.Mapping,
|
||||||
toVersionedObjectConverter: r.ObjectConverter,
|
|
||||||
|
|
||||||
Namespace: r.Namespace,
|
Namespace: r.Namespace,
|
||||||
ResourceVersion: resourceVersion,
|
ResourceVersion: resourceVersion,
|
||||||
|
@ -77,8 +77,6 @@ type Info struct {
|
|||||||
// Mapping may be nil if the object has no available metadata, but is still parseable
|
// Mapping may be nil if the object has no available metadata, but is still parseable
|
||||||
// from disk.
|
// from disk.
|
||||||
Mapping *meta.RESTMapping
|
Mapping *meta.RESTMapping
|
||||||
// ObjectConverter allows conversion
|
|
||||||
toVersionedObjectConverter runtime.ObjectConvertor
|
|
||||||
|
|
||||||
// Namespace will be set if the object is namespaced and has a specified value.
|
// Namespace will be set if the object is namespaced and has a specified value.
|
||||||
Namespace string
|
Namespace string
|
||||||
@ -183,17 +181,16 @@ func (i *Info) ResourceMapping() *meta.RESTMapping {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Versioned returns the object as a Go type in the mapping's version or returns an error.
|
// Versioned returns the object as a Go type in the mapping's version or returns an error.
|
||||||
func (i *Info) Versioned() (runtime.Object, error) {
|
func (i *Info) versioned(convertor runtime.ObjectConvertor) (runtime.Object, error) {
|
||||||
return i.toVersionedObjectConverter.ConvertToVersion(i.Object, i.Mapping.GroupVersionKind.GroupVersion())
|
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
|
// 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.
|
// group version kind of the mapping, or i.Object if it cannot be converted.
|
||||||
func (i *Info) AsVersioned() runtime.Object {
|
// Deprecated this function will be removed once calling code is updated to indicate the correct
|
||||||
if i.toVersionedObjectConverter == nil {
|
// negoticatedserializers during construction of the builder
|
||||||
panic("attempt to call AsVersioned object using .Unstructured builder")
|
func (i *Info) AsVersioned(convertor runtime.ObjectConvertor) runtime.Object {
|
||||||
}
|
if obj, err := i.versioned(convertor); err == nil {
|
||||||
if obj, err := i.Versioned(); err == nil {
|
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
return i.Object
|
return i.Object
|
||||||
@ -389,18 +386,19 @@ func (v ContinueOnErrorVisitor) Visit(fn VisitorFunc) error {
|
|||||||
// the visit.
|
// the visit.
|
||||||
// TODO: allow errors to be aggregated?
|
// TODO: allow errors to be aggregated?
|
||||||
type FlattenListVisitor struct {
|
type FlattenListVisitor struct {
|
||||||
Visitor
|
visitor Visitor
|
||||||
*Mapper
|
typer runtime.ObjectTyper
|
||||||
|
mapper *Mapper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFlattenListVisitor creates a visitor that will expand list style runtime.Objects
|
// NewFlattenListVisitor creates a visitor that will expand list style runtime.Objects
|
||||||
// into individual items and then visit them individually.
|
// into individual items and then visit them individually.
|
||||||
func NewFlattenListVisitor(v Visitor, mapper *Mapper) Visitor {
|
func NewFlattenListVisitor(v Visitor, typer runtime.ObjectTyper, mapper *Mapper) Visitor {
|
||||||
return FlattenListVisitor{v, mapper}
|
return FlattenListVisitor{v, typer, mapper}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v FlattenListVisitor) Visit(fn VisitorFunc) error {
|
func (v FlattenListVisitor) Visit(fn VisitorFunc) error {
|
||||||
return v.Visitor.Visit(func(info *Info, err error) error {
|
return v.visitor.Visit(func(info *Info, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -411,7 +409,7 @@ func (v FlattenListVisitor) Visit(fn VisitorFunc) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fn(info, nil)
|
return fn(info, nil)
|
||||||
}
|
}
|
||||||
if errs := runtime.DecodeList(items, v.Mapper.Decoder); len(errs) > 0 {
|
if errs := runtime.DecodeList(items, v.mapper.Decoder); len(errs) > 0 {
|
||||||
return utilerrors.NewAggregate(errs)
|
return utilerrors.NewAggregate(errs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +420,7 @@ func (v FlattenListVisitor) Visit(fn VisitorFunc) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := range items {
|
for i := range items {
|
||||||
item, err := v.InfoForObject(items[i], preferredGVKs)
|
item, err := v.mapper.InfoForObject(items[i], v.typer, preferredGVKs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -19,27 +19,25 @@ package meta
|
|||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
// lazyObject defers loading the mapper and typer until necessary.
|
// lazyObject defers loading the mapper and typer until necessary.
|
||||||
type lazyObject struct {
|
type lazyObject struct {
|
||||||
loader func() (RESTMapper, runtime.ObjectTyper, error)
|
loader func() (RESTMapper, error)
|
||||||
|
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
loaded bool
|
loaded bool
|
||||||
err error
|
err error
|
||||||
mapper RESTMapper
|
mapper RESTMapper
|
||||||
typer runtime.ObjectTyper
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLazyObjectLoader handles unrecoverable errors when creating a RESTMapper / ObjectTyper by
|
// NewLazyObjectLoader handles unrecoverable errors when creating a RESTMapper / ObjectTyper by
|
||||||
// returning those initialization errors when the interface methods are invoked. This defers the
|
// returning those initialization errors when the interface methods are invoked. This defers the
|
||||||
// initialization and any server calls until a client actually needs to perform the action.
|
// initialization and any server calls until a client actually needs to perform the action.
|
||||||
func NewLazyObjectLoader(fn func() (RESTMapper, runtime.ObjectTyper, error)) (RESTMapper, runtime.ObjectTyper) {
|
func NewLazyRESTMapperLoader(fn func() (RESTMapper, error)) RESTMapper {
|
||||||
obj := &lazyObject{loader: fn}
|
obj := &lazyObject{loader: fn}
|
||||||
return obj, obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
// init lazily loads the mapper and typer, returning an error if initialization has failed.
|
// init lazily loads the mapper and typer, returning an error if initialization has failed.
|
||||||
@ -49,13 +47,12 @@ func (o *lazyObject) init() error {
|
|||||||
if o.loaded {
|
if o.loaded {
|
||||||
return o.err
|
return o.err
|
||||||
}
|
}
|
||||||
o.mapper, o.typer, o.err = o.loader()
|
o.mapper, o.err = o.loader()
|
||||||
o.loaded = true
|
o.loaded = true
|
||||||
return o.err
|
return o.err
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ RESTMapper = &lazyObject{}
|
var _ RESTMapper = &lazyObject{}
|
||||||
var _ runtime.ObjectTyper = &lazyObject{}
|
|
||||||
|
|
||||||
func (o *lazyObject) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) {
|
func (o *lazyObject) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) {
|
||||||
if err := o.init(); err != nil {
|
if err := o.init(); err != nil {
|
||||||
@ -105,17 +102,3 @@ func (o *lazyObject) ResourceSingularizer(resource string) (singular string, err
|
|||||||
}
|
}
|
||||||
return o.mapper.ResourceSingularizer(resource)
|
return o.mapper.ResourceSingularizer(resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *lazyObject) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) {
|
|
||||||
if err := o.init(); err != nil {
|
|
||||||
return nil, false, err
|
|
||||||
}
|
|
||||||
return o.typer.ObjectKinds(obj)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *lazyObject) Recognizes(gvk schema.GroupVersionKind) bool {
|
|
||||||
if err := o.init(); err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return o.typer.Recognizes(gvk)
|
|
||||||
}
|
|
||||||
|
@ -89,6 +89,14 @@ func (t unstructuredObjectTyper) ObjectKinds(obj runtime.Object) ([]schema.Group
|
|||||||
if _, ok := obj.(runtime.Unstructured); !ok {
|
if _, ok := obj.(runtime.Unstructured); !ok {
|
||||||
return nil, false, fmt.Errorf("cannot type %T", obj)
|
return nil, false, fmt.Errorf("cannot type %T", obj)
|
||||||
}
|
}
|
||||||
|
gvk := obj.GetObjectKind().GroupVersionKind()
|
||||||
|
if len(gvk.Kind) == 0 {
|
||||||
|
return nil, false, runtime.NewMissingKindErr("object has no kind field ")
|
||||||
|
}
|
||||||
|
if len(gvk.Version) == 0 {
|
||||||
|
return nil, false, runtime.NewMissingVersionErr("object has no apiVersion field")
|
||||||
|
}
|
||||||
|
|
||||||
return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil
|
return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ func TestServerSidePrint(t *testing.T) {
|
|||||||
printer := newFakePrinter(printersinternal.AddHandlers)
|
printer := newFakePrinter(printersinternal.AddHandlers)
|
||||||
|
|
||||||
factory := util.NewFactory(clientcmd.NewDefaultClientConfig(*createKubeConfig(s.URL), &clientcmd.ConfigOverrides{}))
|
factory := util.NewFactory(clientcmd.NewDefaultClientConfig(*createKubeConfig(s.URL), &clientcmd.ConfigOverrides{}))
|
||||||
mapper, _ := factory.Object()
|
mapper := factory.RESTMapper()
|
||||||
|
|
||||||
for gvk, apiType := range legacyscheme.Scheme.AllKnownTypes() {
|
for gvk, apiType := range legacyscheme.Scheme.AllKnownTypes() {
|
||||||
// we do not care about internal objects or lists // TODO make sure this is always true
|
// we do not care about internal objects or lists // TODO make sure this is always true
|
||||||
|
@ -811,7 +811,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper, _ := util.NewFactory(clientcmd.NewDefaultClientConfig(*clientcmdapi.NewConfig(), &clientcmd.ConfigOverrides{})).Object()
|
mapper := util.NewFactory(clientcmd.NewDefaultClientConfig(*clientcmdapi.NewConfig(), &clientcmd.ConfigOverrides{})).RESTMapper()
|
||||||
|
|
||||||
return client, kvClient, mapper
|
return client, kvClient, mapper
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user