mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
udpate some examples to use external types
This commit is contained in:
parent
b8aa7baa7d
commit
a53a72e238
@ -591,7 +591,7 @@ type pruner struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *pruner) prune(f cmdutil.Factory, namespace string, mapping *meta.RESTMapping, includeUninitialized bool) error {
|
func (p *pruner) prune(f cmdutil.Factory, namespace string, mapping *meta.RESTMapping, includeUninitialized bool) error {
|
||||||
objList, err := p.dynamicClient.Resource(mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource)).
|
objList, err := p.dynamicClient.Resource(mapping.Resource).
|
||||||
Namespace(namespace).
|
Namespace(namespace).
|
||||||
List(metav1.ListOptions{
|
List(metav1.ListOptions{
|
||||||
LabelSelector: p.labelSelector,
|
LabelSelector: p.labelSelector,
|
||||||
@ -647,7 +647,7 @@ func (p *pruner) delete(namespace, name string, mapping *meta.RESTMapping, scale
|
|||||||
|
|
||||||
func runDelete(namespace, name string, mapping *meta.RESTMapping, c dynamic.DynamicInterface, cascade bool, gracePeriod int, clientsetFunc func() (internalclientset.Interface, error), scaleClient scaleclient.ScalesGetter) error {
|
func runDelete(namespace, name string, mapping *meta.RESTMapping, c dynamic.DynamicInterface, cascade bool, gracePeriod int, clientsetFunc func() (internalclientset.Interface, error), scaleClient scaleclient.ScalesGetter) error {
|
||||||
if !cascade {
|
if !cascade {
|
||||||
return c.Resource(mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource)).Namespace(namespace).Delete(name, nil)
|
return c.Resource(mapping.Resource).Namespace(namespace).Delete(name, nil)
|
||||||
}
|
}
|
||||||
cs, err := clientsetFunc()
|
cs, err := clientsetFunc()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -658,7 +658,7 @@ func runDelete(namespace, name string, mapping *meta.RESTMapping, c dynamic.Dyna
|
|||||||
if _, ok := err.(*kubectl.NoSuchReaperError); !ok {
|
if _, ok := err.(*kubectl.NoSuchReaperError); !ok {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return c.Resource(mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource)).Namespace(namespace).Delete(name, nil)
|
return c.Resource(mapping.Resource).Namespace(namespace).Delete(name, nil)
|
||||||
}
|
}
|
||||||
var options *metav1.DeleteOptions
|
var options *metav1.DeleteOptions
|
||||||
if gracePeriod >= 0 {
|
if gracePeriod >= 0 {
|
||||||
|
@ -421,7 +421,7 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
|
|||||||
if mapping.Scope.Name() == meta.RESTScopeNameRoot {
|
if mapping.Scope.Name() == meta.RESTScopeNameRoot {
|
||||||
namespace = ""
|
namespace = ""
|
||||||
}
|
}
|
||||||
actualObject, err := dynamicClient.Resource(mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource)).Namespace(namespace).Create(asUnstructured)
|
actualObject, err := dynamicClient.Resource(mapping.Resource).Namespace(namespace).Create(asUnstructured)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -346,7 +346,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Serialize the object with the annotation applied.
|
// Serialize the object with the annotation applied.
|
||||||
actualObject, err := o.DynamicClient.Resource(objMapping.GroupVersionKind.GroupVersion().WithResource(objMapping.Resource)).Namespace(o.Namespace).Create(asUnstructured)
|
actualObject, err := o.DynamicClient.Resource(objMapping.Resource).Namespace(o.Namespace).Create(asUnstructured)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,14 @@ go_library(
|
|||||||
"//pkg/kubectl/cmd/util/env:go_default_library",
|
"//pkg/kubectl/cmd/util/env:go_default_library",
|
||||||
"//pkg/kubectl/genericclioptions:go_default_library",
|
"//pkg/kubectl/genericclioptions:go_default_library",
|
||||||
"//pkg/kubectl/resource:go_default_library",
|
"//pkg/kubectl/resource:go_default_library",
|
||||||
|
"//pkg/kubectl/scheme:go_default_library",
|
||||||
"//pkg/kubectl/util/i18n:go_default_library",
|
"//pkg/kubectl/util/i18n:go_default_library",
|
||||||
"//pkg/printers:go_default_library",
|
"//pkg/printers:go_default_library",
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_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/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime: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",
|
||||||
@ -81,6 +83,7 @@ go_test(
|
|||||||
"//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/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/rest:go_default_library",
|
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/rest/fake:go_default_library",
|
"//vendor/k8s.io/client-go/rest/fake:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -30,12 +30,12 @@ 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/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"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"
|
||||||
envutil "k8s.io/kubernetes/pkg/kubectl/cmd/util/env"
|
envutil "k8s.io/kubernetes/pkg/kubectl/cmd/util/env"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -241,7 +241,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
|
|
||||||
if len(o.From) != 0 {
|
if len(o.From) != 0 {
|
||||||
b := o.builder().
|
b := o.builder().
|
||||||
WithScheme(legacyscheme.Scheme).
|
WithScheme(scheme.Scheme, scheme.Registry.RegisteredGroupVersions()...).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(o.namespace).DefaultNamespace().
|
NamespaceParam(o.namespace).DefaultNamespace().
|
||||||
@ -261,11 +261,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
versionedObject, err := legacyscheme.Scheme.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
|
switch from := info.Object.(type) {
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch from := versionedObject.(type) {
|
|
||||||
case *v1.Secret:
|
case *v1.Secret:
|
||||||
for key := range from.Data {
|
for key := range from.Data {
|
||||||
envVar := v1.EnvVar{
|
envVar := v1.EnvVar{
|
||||||
@ -309,7 +305,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b := o.builder().
|
b := o.builder().
|
||||||
WithScheme(legacyscheme.Scheme).
|
WithScheme(scheme.Scheme, scheme.Registry.RegisteredGroupVersions()...).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(o.namespace).DefaultNamespace().
|
NamespaceParam(o.namespace).DefaultNamespace().
|
||||||
@ -326,8 +322,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
patches := CalculatePatches(infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
patches := CalculatePatches(infos, scheme.DefaultJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
|
||||||
_, 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)
|
||||||
@ -394,7 +389,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object)
|
return runtime.Encode(scheme.DefaultJSONEncoder(), info.Object)
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
})
|
})
|
||||||
@ -418,7 +413,7 @@ func (o *EnvOptions) RunEnv() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if o.Local || o.dryRun {
|
if o.Local || o.dryRun {
|
||||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.Object, o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -437,7 +432,7 @@ func (o *EnvOptions) RunEnv() 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(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
if err := o.PrintObj(info.Object, o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,9 +36,9 @@ 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/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/rest/fake"
|
"k8s.io/client-go/rest/fake"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
@ -50,7 +50,7 @@ func TestSetEnvLocal(t *testing.T) {
|
|||||||
tf := cmdtesting.NewTestFactory()
|
tf := cmdtesting.NewTestFactory()
|
||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: schema.GroupVersion{Version: ""},
|
GroupVersion: schema.GroupVersion{Version: ""},
|
||||||
NegotiatedSerializer: ns,
|
NegotiatedSerializer: ns,
|
||||||
@ -93,7 +93,7 @@ func TestSetMultiResourcesEnvLocal(t *testing.T) {
|
|||||||
tf := cmdtesting.NewTestFactory()
|
tf := cmdtesting.NewTestFactory()
|
||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: schema.GroupVersion{Version: ""},
|
GroupVersion: schema.GroupVersion{Version: ""},
|
||||||
NegotiatedSerializer: ns,
|
NegotiatedSerializer: ns,
|
||||||
@ -464,7 +464,7 @@ func TestSetEnvRemote(t *testing.T) {
|
|||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion)
|
codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion)
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
tf.Namespace = "test"
|
tf.Namespace = "test"
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: groupVersion,
|
GroupVersion: groupVersion,
|
||||||
|
@ -19,11 +19,9 @@ package set
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
@ -32,7 +30,9 @@ import (
|
|||||||
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"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
||||||
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImageOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of
|
// ImageOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of
|
||||||
@ -161,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().
|
||||||
WithScheme(legacyscheme.Scheme).
|
WithScheme(scheme.Scheme, scheme.Registry.RegisteredGroupVersions()...).
|
||||||
LocalParam(o.Local).
|
LocalParam(o.Local).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -209,9 +209,8 @@ func (o *SetImageOptions) Validate() error {
|
|||||||
func (o *SetImageOptions) Run() error {
|
func (o *SetImageOptions) Run() error {
|
||||||
allErrs := []error{}
|
allErrs := []error{}
|
||||||
|
|
||||||
patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(info *resource.Info) ([]byte, error) {
|
||||||
transformed := false
|
transformed := false
|
||||||
info.Object = cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping)
|
|
||||||
_, 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 (
|
||||||
@ -259,7 +258,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
glog.V(4).Infof("error recording current command: %v", err)
|
glog.V(4).Infof("error recording current command: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object)
|
return runtime.Encode(scheme.DefaultJSONEncoder(), info.Object)
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, patch := range patches {
|
for _, patch := range patches {
|
||||||
@ -275,7 +274,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if o.Local || o.DryRun {
|
if o.Local || o.DryRun {
|
||||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(patch.Info.Object, patch.Info.Mapping), o.Out); err != nil {
|
if err := o.PrintObj(patch.Info.Object, o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -289,7 +288,7 @@ func (o *SetImageOptions) Run() error {
|
|||||||
}
|
}
|
||||||
info.Refresh(obj, true)
|
info.Refresh(obj, true)
|
||||||
|
|
||||||
if err := o.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(info.Object, info.Mapping), o.Out); err != nil {
|
if err := o.PrintObj(info.Object, o.Out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
||||||
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
||||||
@ -36,21 +35,22 @@ 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/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/rest/fake"
|
"k8s.io/client-go/rest/fake"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
||||||
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestImageLocal(t *testing.T) {
|
func TestImageLocal(t *testing.T) {
|
||||||
tf := cmdtesting.NewTestFactory()
|
tf := cmdtesting.NewTestFactory()
|
||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
|
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: schema.GroupVersion{Version: ""},
|
GroupVersion: schema.GroupVersion{Version: ""},
|
||||||
@ -173,7 +173,7 @@ func TestSetMultiResourcesImageLocal(t *testing.T) {
|
|||||||
tf := cmdtesting.NewTestFactory()
|
tf := cmdtesting.NewTestFactory()
|
||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
|
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: schema.GroupVersion{Version: ""},
|
GroupVersion: schema.GroupVersion{Version: ""},
|
||||||
@ -554,7 +554,7 @@ func TestSetImageRemote(t *testing.T) {
|
|||||||
defer tf.Cleanup()
|
defer tf.Cleanup()
|
||||||
|
|
||||||
codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion)
|
codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion)
|
||||||
ns := legacyscheme.Codecs
|
ns := serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
|
||||||
tf.Namespace = "test"
|
tf.Namespace = "test"
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: groupVersion,
|
GroupVersion: groupVersion,
|
||||||
|
@ -257,6 +257,7 @@ func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.Po
|
|||||||
t.Spec.Template = &v1.PodTemplateSpec{}
|
t.Spec.Template = &v1.PodTemplateSpec{}
|
||||||
}
|
}
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// Deployment
|
// Deployment
|
||||||
case *extensionsv1beta1.Deployment:
|
case *extensionsv1beta1.Deployment:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
@ -266,6 +267,7 @@ func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.Po
|
|||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
case *appsv1.Deployment:
|
case *appsv1.Deployment:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// DaemonSet
|
// DaemonSet
|
||||||
case *extensionsv1beta1.DaemonSet:
|
case *extensionsv1beta1.DaemonSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
@ -273,6 +275,7 @@ func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.Po
|
|||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
case *appsv1.DaemonSet:
|
case *appsv1.DaemonSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// ReplicaSet
|
// ReplicaSet
|
||||||
case *extensionsv1beta1.ReplicaSet:
|
case *extensionsv1beta1.ReplicaSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
@ -280,6 +283,7 @@ func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.Po
|
|||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
case *appsv1.ReplicaSet:
|
case *appsv1.ReplicaSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// StatefulSet
|
// StatefulSet
|
||||||
case *appsv1beta1.StatefulSet:
|
case *appsv1beta1.StatefulSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
@ -287,14 +291,17 @@ func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.Po
|
|||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
case *appsv1.StatefulSet:
|
case *appsv1.StatefulSet:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// Job
|
// Job
|
||||||
case *batchv1.Job:
|
case *batchv1.Job:
|
||||||
return true, fn(&t.Spec.Template.Spec)
|
return true, fn(&t.Spec.Template.Spec)
|
||||||
|
|
||||||
// CronJob
|
// CronJob
|
||||||
case *batchv1beta1.CronJob:
|
case *batchv1beta1.CronJob:
|
||||||
return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
|
return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
|
||||||
case *batchv2alpha1.CronJob:
|
case *batchv2alpha1.CronJob:
|
||||||
return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
|
return true, fn(&t.Spec.JobTemplate.Spec.Template.Spec)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false, fmt.Errorf("the object is not a pod or does not have a pod template")
|
return false, fmt.Errorf("the object is not a pod or does not have a pod template")
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,13 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
|
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
||||||
|
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
||||||
|
batchv1 "k8s.io/api/batch/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
"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/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -38,6 +44,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apis/apps"
|
"k8s.io/kubernetes/pkg/apis/apps"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
|
apiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
@ -198,6 +205,8 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
|
|||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.Pod:
|
case *api.Pod:
|
||||||
return clientset.Core().Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
return clientset.Core().Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
||||||
|
case *corev1.Pod:
|
||||||
|
return clientset.Core().Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace, selector, err := selectorsForObject(object)
|
namespace, selector, err := selectorsForObject(object)
|
||||||
@ -223,10 +232,31 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
}
|
}
|
||||||
|
case *extensionsv1beta1.ReplicaSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1.ReplicaSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta2.ReplicaSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case *api.ReplicationController:
|
case *api.ReplicationController:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector)
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
case *corev1.ReplicationController:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
|
||||||
case *apps.StatefulSet:
|
case *apps.StatefulSet:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
@ -234,6 +264,24 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
}
|
}
|
||||||
|
case *appsv1.StatefulSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta1.StatefulSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta2.StatefulSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case *extensions.DaemonSet:
|
case *extensions.DaemonSet:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
@ -241,6 +289,24 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
}
|
}
|
||||||
|
case *extensionsv1beta1.DaemonSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1.DaemonSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta2.DaemonSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case *extensions.Deployment:
|
case *extensions.Deployment:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
@ -248,6 +314,30 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
}
|
}
|
||||||
|
case *extensionsv1beta1.Deployment:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1.Deployment:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta1.Deployment:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
case *appsv1beta2.Deployment:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case *batch.Job:
|
case *batch.Job:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
@ -255,6 +345,12 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
}
|
}
|
||||||
|
case *batchv1.Job:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case *api.Service:
|
case *api.Service:
|
||||||
namespace = t.Namespace
|
namespace = t.Namespace
|
||||||
@ -262,6 +358,12 @@ func selectorsForObject(object runtime.Object) (namespace string, selector label
|
|||||||
return "", nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
|
return "", nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
|
||||||
}
|
}
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector)
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
case *corev1.Service:
|
||||||
|
namespace = t.Namespace
|
||||||
|
if t.Spec.Selector == nil || len(t.Spec.Selector) == 0 {
|
||||||
|
return "", nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
|
||||||
|
}
|
||||||
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "", nil, fmt.Errorf("selector for %T not implemented", object)
|
return "", nil, fmt.Errorf("selector for %T not implemented", object)
|
||||||
@ -325,6 +427,11 @@ func (f *ring1Factory) AttachablePodForObject(object runtime.Object, timeout tim
|
|||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.Pod:
|
case *api.Pod:
|
||||||
return t, nil
|
return t, nil
|
||||||
|
case *corev1.Pod:
|
||||||
|
internalPod := &api.Pod{}
|
||||||
|
err := apiv1.Convert_v1_Pod_To_core_Pod(t, internalPod, nil)
|
||||||
|
return internalPod, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace, selector, err := selectorsForObject(object)
|
namespace, selector, err := selectorsForObject(object)
|
||||||
|
@ -64,7 +64,7 @@ type Builder struct {
|
|||||||
objectTyper runtime.ObjectTyper
|
objectTyper runtime.ObjectTyper
|
||||||
|
|
||||||
// codecFactory describes which codecs you want to use
|
// codecFactory describes which codecs you want to use
|
||||||
codecFactory *serializer.CodecFactory
|
negotiatedSerializer runtime.NegotiatedSerializer
|
||||||
|
|
||||||
// local indicates that we cannot make server calls
|
// local indicates that we cannot make server calls
|
||||||
local bool
|
local bool
|
||||||
@ -240,13 +240,19 @@ func (b *Builder) WithScheme(scheme *runtime.Scheme, decodingVersions ...schema.
|
|||||||
}
|
}
|
||||||
b.objectTyper = scheme
|
b.objectTyper = scheme
|
||||||
codecFactory := serializer.NewCodecFactory(scheme)
|
codecFactory := serializer.NewCodecFactory(scheme)
|
||||||
b.codecFactory = &codecFactory
|
negotiatedSerializer := runtime.NegotiatedSerializer(codecFactory)
|
||||||
|
// if you specified versions, you're specifying a desire for external types, which you don't want to round-trip through
|
||||||
|
// internal types
|
||||||
|
if len(decodingVersions) > 0 {
|
||||||
|
negotiatedSerializer = &serializer.DirectCodecFactory{CodecFactory: codecFactory}
|
||||||
|
}
|
||||||
|
b.negotiatedSerializer = negotiatedSerializer
|
||||||
|
|
||||||
b.mapper = &mapper{
|
b.mapper = &mapper{
|
||||||
localFn: b.isLocal,
|
localFn: b.isLocal,
|
||||||
restMapper: b.restMapper,
|
restMapper: b.restMapper,
|
||||||
clientFn: b.getClient,
|
clientFn: b.getClient,
|
||||||
decoder: b.codecFactory.UniversalDecoder(decodingVersions...),
|
decoder: codecFactory.UniversalDecoder(decodingVersions...),
|
||||||
}
|
}
|
||||||
|
|
||||||
return b
|
return b
|
||||||
@ -827,8 +833,8 @@ func (b *Builder) getClient(gv schema.GroupVersion) (RESTClient, error) {
|
|||||||
return b.fakeClientFn(gv)
|
return b.fakeClientFn(gv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if b.codecFactory != nil {
|
if b.negotiatedSerializer != nil {
|
||||||
return b.clientConfigFn.clientForGroupVersion(gv, b.codecFactory)
|
return b.clientConfigFn.clientForGroupVersion(gv, b.negotiatedSerializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
return b.clientConfigFn.unstructuredClientForGroupVersion(gv)
|
return b.clientConfigFn.unstructuredClientForGroupVersion(gv)
|
||||||
|
Loading…
Reference in New Issue
Block a user