mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Switch to use pkg/apis/meta/v1/unstructured and the new interfaces
Avoid directly accessing an unstructured type if it is not required.
This commit is contained in:
parent
c30862a488
commit
42d410fdde
@ -20,19 +20,16 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// IsListType returns true if the provided Object has a slice called Items
|
// IsListType returns true if the provided Object has a slice called Items
|
||||||
func IsListType(obj runtime.Object) bool {
|
func IsListType(obj runtime.Object) bool {
|
||||||
// if we're a runtime.Unstructured, check to see if we have an `items` key
|
// if we're a runtime.Unstructured, check whether this is a list.
|
||||||
// This is a list type for recognition, but other Items type methods will fail on it
|
// TODO: refactor GetItemsPtr to use an interface that returns []runtime.Object
|
||||||
// and give you errors.
|
if unstructured, ok := obj.(runtime.Unstructured); ok {
|
||||||
if unstructured, ok := obj.(*unstructured.Unstructured); ok {
|
return unstructured.IsList()
|
||||||
_, ok := unstructured.Object["items"]
|
|
||||||
return ok
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := GetItemsPtr(obj)
|
_, err := GetItemsPtr(obj)
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
"k8s.io/kubernetes/pkg/util/diff"
|
"k8s.io/kubernetes/pkg/util/diff"
|
||||||
@ -300,11 +301,11 @@ func TestSetListToRuntimeObjectArray(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestSetListToMatchingType(t *testing.T) {
|
func TestSetListToMatchingType(t *testing.T) {
|
||||||
pl := &runtime.UnstructuredList{}
|
pl := &unstructured.UnstructuredList{}
|
||||||
list := []runtime.Object{
|
list := []runtime.Object{
|
||||||
&runtime.Unstructured{Object: map[string]interface{}{"foo": 1}},
|
&unstructured.Unstructured{Object: map[string]interface{}{"foo": 1}},
|
||||||
&runtime.Unstructured{Object: map[string]interface{}{"foo": 2}},
|
&unstructured.Unstructured{Object: map[string]interface{}{"foo": 2}},
|
||||||
&runtime.Unstructured{Object: map[string]interface{}{"foo": 3}},
|
&unstructured.Unstructured{Object: map[string]interface{}{"foo": 3}},
|
||||||
}
|
}
|
||||||
err := meta.SetList(pl, list)
|
err := meta.SetList(pl, list)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// InterfacesForUnstructured returns VersionInterfaces suitable for
|
// InterfacesForUnstructured returns VersionInterfaces suitable for
|
||||||
// dealing with runtime.Unstructured objects.
|
// dealing with unstructured.Unstructured objects.
|
||||||
func InterfacesForUnstructured(schema.GroupVersion) (*VersionInterfaces, error) {
|
func InterfacesForUnstructured(schema.GroupVersion) (*VersionInterfaces, error) {
|
||||||
return &VersionInterfaces{
|
return &VersionInterfaces{
|
||||||
ObjectConvertor: &unstructured.UnstructuredObjectConverter{},
|
ObjectConvertor: &unstructured.UnstructuredObjectConverter{},
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
ejson "github.com/exponent-io/jsonpath"
|
ejson "github.com/exponent-io/jsonpath"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
apiutil "k8s.io/kubernetes/pkg/api/util"
|
apiutil "k8s.io/kubernetes/pkg/api/util"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/util/yaml"
|
"k8s.io/kubernetes/pkg/util/yaml"
|
||||||
)
|
)
|
||||||
@ -255,7 +255,7 @@ func (s *SwaggerSchema) ValidateObject(obj interface{}, fieldName, typeName stri
|
|||||||
if !mapOk {
|
if !mapOk {
|
||||||
return append(allErrs, fmt.Errorf("field %s: expected object of type map[string]interface{}, but the actual type is %T", fieldName, obj))
|
return append(allErrs, fmt.Errorf("field %s: expected object of type map[string]interface{}, but the actual type is %T", fieldName, obj))
|
||||||
}
|
}
|
||||||
if delegated, err := s.delegateIfDifferentApiVersion(runtime.Unstructured{Object: fields}); delegated {
|
if delegated, err := s.delegateIfDifferentApiVersion(&unstructured.Unstructured{Object: fields}); delegated {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
allErrs = append(allErrs, err)
|
allErrs = append(allErrs, err)
|
||||||
}
|
}
|
||||||
@ -326,7 +326,7 @@ func (s *SwaggerSchema) ValidateObject(obj interface{}, fieldName, typeName stri
|
|||||||
// current SwaggerSchema.
|
// current SwaggerSchema.
|
||||||
// First return value is true if the validation was delegated (by a different ApiGroup SwaggerSchema)
|
// First return value is true if the validation was delegated (by a different ApiGroup SwaggerSchema)
|
||||||
// Second return value is the result of the delegated validation if performed.
|
// Second return value is the result of the delegated validation if performed.
|
||||||
func (s *SwaggerSchema) delegateIfDifferentApiVersion(obj runtime.Unstructured) (bool, error) {
|
func (s *SwaggerSchema) delegateIfDifferentApiVersion(obj *unstructured.Unstructured) (bool, error) {
|
||||||
// Never delegate objects in the same ApiVersion or we will get infinite recursion
|
// Never delegate objects in the same ApiVersion or we will get infinite recursion
|
||||||
if !s.isDifferentApiVersion(obj) {
|
if !s.isDifferentApiVersion(obj) {
|
||||||
return false, nil
|
return false, nil
|
||||||
@ -344,7 +344,7 @@ func (s *SwaggerSchema) delegateIfDifferentApiVersion(obj runtime.Unstructured)
|
|||||||
|
|
||||||
// isDifferentApiVersion Returns true if obj lives in a different ApiVersion than the SwaggerSchema does.
|
// isDifferentApiVersion Returns true if obj lives in a different ApiVersion than the SwaggerSchema does.
|
||||||
// The SwaggerSchema will not be able to process objects in different ApiVersions unless they are vendored.
|
// The SwaggerSchema will not be able to process objects in different ApiVersions unless they are vendored.
|
||||||
func (s *SwaggerSchema) isDifferentApiVersion(obj runtime.Unstructured) bool {
|
func (s *SwaggerSchema) isDifferentApiVersion(obj *unstructured.Unstructured) bool {
|
||||||
groupVersion := obj.GetAPIVersion()
|
groupVersion := obj.GetAPIVersion()
|
||||||
return len(groupVersion) > 0 && s.api.ApiVersion != groupVersion
|
return len(groupVersion) > 0 && s.api.ApiVersion != groupVersion
|
||||||
}
|
}
|
||||||
|
@ -50,10 +50,10 @@ func NewUnstructuredObjectTyper(groupResources []*APIGroupResources) *Unstructur
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ObjectKind returns the group,version,kind of the provided object, or an error
|
// ObjectKind returns the group,version,kind of the provided object, or an error
|
||||||
// if the object in not *runtime.Unstructured or has no group,version,kind
|
// if the object in not runtime.Unstructured or has no group,version,kind
|
||||||
// information.
|
// information.
|
||||||
func (d *UnstructuredObjectTyper) ObjectKind(obj runtime.Object) (schema.GroupVersionKind, error) {
|
func (d *UnstructuredObjectTyper) ObjectKind(obj runtime.Object) (schema.GroupVersionKind, error) {
|
||||||
if _, ok := obj.(*runtime.Unstructured); !ok {
|
if _, ok := obj.(runtime.Unstructured); !ok {
|
||||||
return schema.GroupVersionKind{}, fmt.Errorf("type %T is invalid for dynamic object typer", obj)
|
return schema.GroupVersionKind{}, fmt.Errorf("type %T is invalid for dynamic object typer", obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ func (d *UnstructuredObjectTyper) ObjectKind(obj runtime.Object) (schema.GroupVe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ObjectKinds returns a slice of one element with the group,version,kind of the
|
// ObjectKinds returns a slice of one element with the group,version,kind of the
|
||||||
// provided object, or an error if the object is not *runtime.Unstructured or
|
// provided object, or an error if the object is not runtime.Unstructured or
|
||||||
// has no group,version,kind information. unversionedType will always be false
|
// has no group,version,kind information. unversionedType will always be false
|
||||||
// because runtime.Unstructured object should always have group,version,kind
|
// because runtime.Unstructured object should always have group,version,kind
|
||||||
// information set.
|
// information set.
|
||||||
@ -80,7 +80,7 @@ func (d *UnstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool {
|
|||||||
return d.registered[gvk]
|
return d.registered[gvk]
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsUnversioned returns false always because *runtime.Unstructured objects
|
// IsUnversioned returns false always because runtime.Unstructured objects
|
||||||
// should always have group,version,kind information set. ok will be true if the
|
// should always have group,version,kind information set. ok will be true if the
|
||||||
// object's group,version,kind is registered.
|
// object's group,version,kind is registered.
|
||||||
func (d *UnstructuredObjectTyper) IsUnversioned(obj runtime.Object) (unversioned bool, ok bool) {
|
func (d *UnstructuredObjectTyper) IsUnversioned(obj runtime.Object) (unversioned bool, ok bool) {
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/conversion/queryparams"
|
"k8s.io/kubernetes/pkg/conversion/queryparams"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -124,8 +125,8 @@ func (rc *ResourceClient) List(opts runtime.Object) (runtime.Object, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get gets the resource with the specified name.
|
// Get gets the resource with the specified name.
|
||||||
func (rc *ResourceClient) Get(name string) (*runtime.Unstructured, error) {
|
func (rc *ResourceClient) Get(name string) (*unstructured.Unstructured, error) {
|
||||||
result := new(runtime.Unstructured)
|
result := new(unstructured.Unstructured)
|
||||||
err := rc.cl.Get().
|
err := rc.cl.Get().
|
||||||
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
||||||
Resource(rc.resource.Name).
|
Resource(rc.resource.Name).
|
||||||
@ -162,8 +163,8 @@ func (rc *ResourceClient) DeleteCollection(deleteOptions *v1.DeleteOptions, list
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create creates the provided resource.
|
// Create creates the provided resource.
|
||||||
func (rc *ResourceClient) Create(obj *runtime.Unstructured) (*runtime.Unstructured, error) {
|
func (rc *ResourceClient) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
|
||||||
result := new(runtime.Unstructured)
|
result := new(unstructured.Unstructured)
|
||||||
err := rc.cl.Post().
|
err := rc.cl.Post().
|
||||||
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
||||||
Resource(rc.resource.Name).
|
Resource(rc.resource.Name).
|
||||||
@ -174,8 +175,8 @@ func (rc *ResourceClient) Create(obj *runtime.Unstructured) (*runtime.Unstructur
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update updates the provided resource.
|
// Update updates the provided resource.
|
||||||
func (rc *ResourceClient) Update(obj *runtime.Unstructured) (*runtime.Unstructured, error) {
|
func (rc *ResourceClient) Update(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
|
||||||
result := new(runtime.Unstructured)
|
result := new(unstructured.Unstructured)
|
||||||
if len(obj.GetName()) == 0 {
|
if len(obj.GetName()) == 0 {
|
||||||
return result, errors.New("object missing name")
|
return result, errors.New("object missing name")
|
||||||
}
|
}
|
||||||
@ -203,8 +204,8 @@ func (rc *ResourceClient) Watch(opts runtime.Object) (watch.Interface, error) {
|
|||||||
Watch()
|
Watch()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rc *ResourceClient) Patch(name string, pt api.PatchType, data []byte) (*runtime.Unstructured, error) {
|
func (rc *ResourceClient) Patch(name string, pt api.PatchType, data []byte) (*unstructured.Unstructured, error) {
|
||||||
result := new(runtime.Unstructured)
|
result := new(unstructured.Unstructured)
|
||||||
err := rc.cl.Patch(pt).
|
err := rc.cl.Patch(pt).
|
||||||
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
NamespaceIfScoped(rc.ns, rc.resource.Namespaced).
|
||||||
Resource(rc.resource.Name).
|
Resource(rc.resource.Name).
|
||||||
@ -220,7 +221,7 @@ func (rc *ResourceClient) Patch(name string, pt api.PatchType, data []byte) (*ru
|
|||||||
type dynamicCodec struct{}
|
type dynamicCodec struct{}
|
||||||
|
|
||||||
func (dynamicCodec) Decode(data []byte, gvk *schema.GroupVersionKind, obj runtime.Object) (runtime.Object, *schema.GroupVersionKind, error) {
|
func (dynamicCodec) Decode(data []byte, gvk *schema.GroupVersionKind, obj runtime.Object) (runtime.Object, *schema.GroupVersionKind, error) {
|
||||||
obj, gvk, err := runtime.UnstructuredJSONScheme.Decode(data, gvk, obj)
|
obj, gvk, err := unstructured.UnstructuredJSONScheme.Decode(data, gvk, obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -237,7 +238,7 @@ func (dynamicCodec) Decode(data []byte, gvk *schema.GroupVersionKind, obj runtim
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (dynamicCodec) Encode(obj runtime.Object, w io.Writer) error {
|
func (dynamicCodec) Encode(obj runtime.Object, w io.Writer) error {
|
||||||
return runtime.UnstructuredJSONScheme.Encode(obj, w)
|
return unstructured.UnstructuredJSONScheme.Encode(obj, w)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContentConfig returns a restclient.ContentConfig for dynamic types.
|
// ContentConfig returns a restclient.ContentConfig for dynamic types.
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
@ -46,8 +47,8 @@ func getListJSON(version, kind string, items ...[]byte) []byte {
|
|||||||
return []byte(json)
|
return []byte(json)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getObject(version, kind, name string) *runtime.Unstructured {
|
func getObject(version, kind, name string) *unstructured.Unstructured {
|
||||||
return &runtime.Unstructured{
|
return &unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"apiVersion": version,
|
"apiVersion": version,
|
||||||
"kind": kind,
|
"kind": kind,
|
||||||
@ -77,7 +78,7 @@ func TestList(t *testing.T) {
|
|||||||
namespace string
|
namespace string
|
||||||
path string
|
path string
|
||||||
resp []byte
|
resp []byte
|
||||||
want *runtime.UnstructuredList
|
want *unstructured.UnstructuredList
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "normal_list",
|
name: "normal_list",
|
||||||
@ -85,12 +86,12 @@ func TestList(t *testing.T) {
|
|||||||
resp: getListJSON("vTest", "rTestList",
|
resp: getListJSON("vTest", "rTestList",
|
||||||
getJSON("vTest", "rTest", "item1"),
|
getJSON("vTest", "rTest", "item1"),
|
||||||
getJSON("vTest", "rTest", "item2")),
|
getJSON("vTest", "rTest", "item2")),
|
||||||
want: &runtime.UnstructuredList{
|
want: &unstructured.UnstructuredList{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"apiVersion": "vTest",
|
"apiVersion": "vTest",
|
||||||
"kind": "rTestList",
|
"kind": "rTestList",
|
||||||
},
|
},
|
||||||
Items: []*runtime.Unstructured{
|
Items: []*unstructured.Unstructured{
|
||||||
getObject("vTest", "rTest", "item1"),
|
getObject("vTest", "rTest", "item1"),
|
||||||
getObject("vTest", "rTest", "item2"),
|
getObject("vTest", "rTest", "item2"),
|
||||||
},
|
},
|
||||||
@ -103,12 +104,12 @@ func TestList(t *testing.T) {
|
|||||||
resp: getListJSON("vTest", "rTestList",
|
resp: getListJSON("vTest", "rTestList",
|
||||||
getJSON("vTest", "rTest", "item1"),
|
getJSON("vTest", "rTest", "item1"),
|
||||||
getJSON("vTest", "rTest", "item2")),
|
getJSON("vTest", "rTest", "item2")),
|
||||||
want: &runtime.UnstructuredList{
|
want: &unstructured.UnstructuredList{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"apiVersion": "vTest",
|
"apiVersion": "vTest",
|
||||||
"kind": "rTestList",
|
"kind": "rTestList",
|
||||||
},
|
},
|
||||||
Items: []*runtime.Unstructured{
|
Items: []*unstructured.Unstructured{
|
||||||
getObject("vTest", "rTest", "item1"),
|
getObject("vTest", "rTest", "item1"),
|
||||||
getObject("vTest", "rTest", "item2"),
|
getObject("vTest", "rTest", "item2"),
|
||||||
},
|
},
|
||||||
@ -154,7 +155,7 @@ func TestGet(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
path string
|
path string
|
||||||
resp []byte
|
resp []byte
|
||||||
want *runtime.Unstructured
|
want *unstructured.Unstructured
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "normal_get",
|
name: "normal_get",
|
||||||
@ -236,7 +237,7 @@ func TestDelete(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", runtime.ContentTypeJSON)
|
w.Header().Set("Content-Type", runtime.ContentTypeJSON)
|
||||||
runtime.UnstructuredJSONScheme.Encode(statusOK, w)
|
unstructured.UnstructuredJSONScheme.Encode(statusOK, w)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error when creating client: %v", err)
|
t.Errorf("unexpected error when creating client: %v", err)
|
||||||
@ -285,7 +286,7 @@ func TestDeleteCollection(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", runtime.ContentTypeJSON)
|
w.Header().Set("Content-Type", runtime.ContentTypeJSON)
|
||||||
runtime.UnstructuredJSONScheme.Encode(statusOK, w)
|
unstructured.UnstructuredJSONScheme.Encode(statusOK, w)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error when creating client: %v", err)
|
t.Errorf("unexpected error when creating client: %v", err)
|
||||||
@ -305,7 +306,7 @@ func TestCreate(t *testing.T) {
|
|||||||
tcs := []struct {
|
tcs := []struct {
|
||||||
name string
|
name string
|
||||||
namespace string
|
namespace string
|
||||||
obj *runtime.Unstructured
|
obj *unstructured.Unstructured
|
||||||
path string
|
path string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@ -364,7 +365,7 @@ func TestUpdate(t *testing.T) {
|
|||||||
tcs := []struct {
|
tcs := []struct {
|
||||||
name string
|
name string
|
||||||
namespace string
|
namespace string
|
||||||
obj *runtime.Unstructured
|
obj *unstructured.Unstructured
|
||||||
path string
|
path string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@ -489,7 +490,7 @@ func TestPatch(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
namespace string
|
namespace string
|
||||||
patch []byte
|
patch []byte
|
||||||
want *runtime.Unstructured
|
want *unstructured.Unstructured
|
||||||
path string
|
path string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
@ -29,7 +30,7 @@ import (
|
|||||||
// accessor appropriate for use with unstructured objects.
|
// accessor appropriate for use with unstructured objects.
|
||||||
func VersionInterfaces(schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
func VersionInterfaces(schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
ObjectConvertor: &runtime.UnstructuredObjectConverter{},
|
ObjectConvertor: &unstructured.UnstructuredObjectConverter{},
|
||||||
MetadataAccessor: meta.NewAccessor(),
|
MetadataAccessor: meta.NewAccessor(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -56,7 +57,7 @@ func NewDiscoveryRESTMapper(resources []*metav1.APIResourceList, versionFunc met
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ObjectTyper provides an ObjectTyper implementation for
|
// ObjectTyper provides an ObjectTyper implementation for
|
||||||
// runtime.Unstructured object based on discovery information.
|
// unstructured.Unstructured object based on discovery information.
|
||||||
type ObjectTyper struct {
|
type ObjectTyper struct {
|
||||||
registered map[schema.GroupVersionKind]bool
|
registered map[schema.GroupVersionKind]bool
|
||||||
}
|
}
|
||||||
@ -79,10 +80,10 @@ func NewObjectTyper(resources []*metav1.APIResourceList) (runtime.ObjectTyper, e
|
|||||||
|
|
||||||
// ObjectKinds returns a slice of one element with the
|
// ObjectKinds returns a slice of one element with the
|
||||||
// group,version,kind of the provided object, or an error if the
|
// group,version,kind of the provided object, or an error if the
|
||||||
// object is not *runtime.Unstructured or has no group,version,kind
|
// object is not *unstructured.Unstructured or has no group,version,kind
|
||||||
// information.
|
// information.
|
||||||
func (ot *ObjectTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) {
|
func (ot *ObjectTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) {
|
||||||
if _, ok := obj.(*runtime.Unstructured); !ok {
|
if _, ok := obj.(*unstructured.Unstructured); !ok {
|
||||||
return nil, false, fmt.Errorf("type %T is invalid for dynamic object typer", obj)
|
return nil, false, fmt.Errorf("type %T is invalid for dynamic object typer", obj)
|
||||||
}
|
}
|
||||||
return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil
|
return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
||||||
"k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly"
|
"k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly"
|
||||||
@ -621,7 +622,7 @@ func (gc *GarbageCollector) deleteObject(item objectReference) error {
|
|||||||
return client.Resource(resource, item.Namespace).Delete(item.Name, &deleteOptions)
|
return client.Resource(resource, item.Namespace).Delete(item.Name, &deleteOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *GarbageCollector) getObject(item objectReference) (*runtime.Unstructured, error) {
|
func (gc *GarbageCollector) getObject(item objectReference) (*unstructured.Unstructured, error) {
|
||||||
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
||||||
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
||||||
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
||||||
@ -632,7 +633,7 @@ func (gc *GarbageCollector) getObject(item objectReference) (*runtime.Unstructur
|
|||||||
return client.Resource(resource, item.Namespace).Get(item.Name)
|
return client.Resource(resource, item.Namespace).Get(item.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *GarbageCollector) updateObject(item objectReference, obj *runtime.Unstructured) (*runtime.Unstructured, error) {
|
func (gc *GarbageCollector) updateObject(item objectReference, obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
|
||||||
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
||||||
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
||||||
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
||||||
@ -643,7 +644,7 @@ func (gc *GarbageCollector) updateObject(item objectReference, obj *runtime.Unst
|
|||||||
return client.Resource(resource, item.Namespace).Update(obj)
|
return client.Resource(resource, item.Namespace).Update(obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte) (*runtime.Unstructured, error) {
|
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte) (*unstructured.Unstructured, error) {
|
||||||
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind)
|
||||||
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
client, err := gc.clientPool.ClientForGroupVersionKind(fqKind)
|
||||||
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation")
|
||||||
@ -654,8 +655,8 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte) (*ru
|
|||||||
return client.Resource(resource, item.Namespace).Patch(item.Name, api.StrategicMergePatchType, patch)
|
return client.Resource(resource, item.Namespace).Patch(item.Name, api.StrategicMergePatchType, patch)
|
||||||
}
|
}
|
||||||
|
|
||||||
func objectReferenceToUnstructured(ref objectReference) *runtime.Unstructured {
|
func objectReferenceToUnstructured(ref objectReference) *unstructured.Unstructured {
|
||||||
ret := &runtime.Unstructured{}
|
ret := &unstructured.Unstructured{}
|
||||||
ret.SetKind(ref.Kind)
|
ret.SetKind(ref.Kind)
|
||||||
ret.SetAPIVersion(ref.APIVersion)
|
ret.SetAPIVersion(ref.APIVersion)
|
||||||
ret.SetUID(ref.UID)
|
ret.SetUID(ref.UID)
|
||||||
|
@ -21,17 +21,17 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// contentRemainingError is used to inform the caller that content is not fully removed from the namespace
|
// contentRemainingError is used to inform the caller that content is not fully removed from the namespace
|
||||||
@ -210,7 +210,7 @@ func listCollection(
|
|||||||
opCache *operationNotSupportedCache,
|
opCache *operationNotSupportedCache,
|
||||||
gvr schema.GroupVersionResource,
|
gvr schema.GroupVersionResource,
|
||||||
namespace string,
|
namespace string,
|
||||||
) (*runtime.UnstructuredList, bool, error) {
|
) (*unstructured.UnstructuredList, bool, error) {
|
||||||
glog.V(5).Infof("namespace controller - listCollection - namespace: %s, gvr: %v", namespace, gvr)
|
glog.V(5).Infof("namespace controller - listCollection - namespace: %s, gvr: %v", namespace, gvr)
|
||||||
|
|
||||||
key := operationKey{op: operationList, gvr: gvr}
|
key := operationKey{op: operationList, gvr: gvr}
|
||||||
@ -222,9 +222,9 @@ func listCollection(
|
|||||||
apiResource := metav1.APIResource{Name: gvr.Resource, Namespaced: true}
|
apiResource := metav1.APIResource{Name: gvr.Resource, Namespaced: true}
|
||||||
obj, err := dynamicClient.Resource(&apiResource, namespace).List(&v1.ListOptions{})
|
obj, err := dynamicClient.Resource(&apiResource, namespace).List(&v1.ListOptions{})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
unstructuredList, ok := obj.(*runtime.UnstructuredList)
|
unstructuredList, ok := obj.(*unstructured.UnstructuredList)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, false, fmt.Errorf("resource: %s, expected *runtime.UnstructuredList, got %#v", apiResource.Name, obj)
|
return nil, false, fmt.Errorf("resource: %s, expected *unstructured.UnstructuredList, got %#v", apiResource.Name, obj)
|
||||||
}
|
}
|
||||||
return unstructuredList, true, nil
|
return unstructuredList, true, nil
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,11 @@ import (
|
|||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opt
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
Schema(schema).
|
Schema(schema).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
|
@ -26,11 +26,11 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ func RunDelete(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, arg
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, options).
|
FilenameParam(enforceNamespace, options).
|
||||||
|
@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"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"
|
||||||
@ -399,7 +400,7 @@ func getMapperAndResult(f cmdutil.Factory, args []string, options *resource.File
|
|||||||
ResourceTypeOrNameArgs(true, args...).
|
ResourceTypeOrNameArgs(true, args...).
|
||||||
Latest()
|
Latest()
|
||||||
case EditBeforeCreateMode:
|
case EditBeforeCreateMode:
|
||||||
b = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme)
|
b = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme)
|
||||||
default:
|
default:
|
||||||
return nil, nil, nil, "", fmt.Errorf("Not supported edit mode %q", editMode)
|
return nil, nil, nil, "", fmt.Errorf("Not supported edit mode %q", editMode)
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"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"
|
||||||
@ -194,7 +195,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
// handle watch separately since we cannot watch multiple resource types
|
// handle watch separately since we cannot watch multiple resource types
|
||||||
isWatch, isWatchOnly := cmdutil.GetFlagBool(cmd, "watch"), cmdutil.GetFlagBool(cmd, "watch-only")
|
isWatch, isWatchOnly := cmdutil.GetFlagBool(cmd, "watch"), cmdutil.GetFlagBool(cmd, "watch-only")
|
||||||
if isWatch || isWatchOnly {
|
if isWatch || isWatchOnly {
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().AllNamespaces(allNamespaces).
|
NamespaceParam(cmdNamespace).DefaultNamespace().AllNamespaces(allNamespaces).
|
||||||
FilenameParam(enforceNamespace, &options.FilenameOptions).
|
FilenameParam(enforceNamespace, &options.FilenameOptions).
|
||||||
SelectorParam(selector).
|
SelectorParam(selector).
|
||||||
@ -279,7 +280,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().AllNamespaces(allNamespaces).
|
NamespaceParam(cmdNamespace).DefaultNamespace().AllNamespaces(allNamespaces).
|
||||||
FilenameParam(enforceNamespace, &options.FilenameOptions).
|
FilenameParam(enforceNamespace, &options.FilenameOptions).
|
||||||
SelectorParam(selector).
|
SelectorParam(selector).
|
||||||
@ -327,7 +328,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
obj = infos[0].Object
|
obj = infos[0].Object
|
||||||
} else {
|
} else {
|
||||||
// we have more than one item, so coerce all items into a list
|
// we have more than one item, so coerce all items into a list
|
||||||
list := &runtime.UnstructuredList{
|
list := &unstructured.UnstructuredList{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"kind": "List",
|
"kind": "List",
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -335,7 +336,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
list.Items = append(list.Items, info.Object.(*runtime.Unstructured))
|
list.Items = append(list.Items, info.Object.(*unstructured.Unstructured))
|
||||||
}
|
}
|
||||||
obj = list
|
obj = list
|
||||||
}
|
}
|
||||||
@ -348,7 +349,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
}
|
}
|
||||||
|
|
||||||
// take the filtered items and create a new list for display
|
// take the filtered items and create a new list for display
|
||||||
list := &runtime.UnstructuredList{
|
list := &unstructured.UnstructuredList{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"kind": "List",
|
"kind": "List",
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -361,7 +362,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
list.Items = append(list.Items, item.(*runtime.Unstructured))
|
list.Items = append(list.Items, item.(*unstructured.Unstructured))
|
||||||
}
|
}
|
||||||
if err := printer.PrintObj(list, out); err != nil {
|
if err := printer.PrintObj(list, out); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
|
@ -27,11 +27,11 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
Schema(schema).
|
Schema(schema).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
@ -199,7 +199,7 @@ func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
FilenameParam(enforceNamespace, options).
|
FilenameParam(enforceNamespace, options).
|
||||||
@ -248,7 +248,7 @@ func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
r = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
|
r = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), unstructured.UnstructuredJSONScheme).
|
||||||
Schema(schema).
|
Schema(schema).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
|
@ -28,12 +28,17 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
|
"github.com/golang/glog"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
kerrors "k8s.io/kubernetes/pkg/api/errors"
|
kerrors "k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
@ -43,10 +48,6 @@ import (
|
|||||||
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/strategicpatch"
|
"k8s.io/kubernetes/pkg/util/strategicpatch"
|
||||||
|
|
||||||
jsonpatch "github.com/evanphx/json-patch"
|
|
||||||
"github.com/golang/glog"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -663,7 +664,7 @@ func FilterResourceList(obj runtime.Object, filterFuncs kubectl.Filters, filterO
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, []runtime.Object{obj}, utilerrors.NewAggregate([]error{err})
|
return 0, []runtime.Object{obj}, utilerrors.NewAggregate([]error{err})
|
||||||
}
|
}
|
||||||
if errs := runtime.DecodeList(items, api.Codecs.UniversalDecoder(), runtime.UnstructuredJSONScheme); len(errs) > 0 {
|
if errs := runtime.DecodeList(items, api.Codecs.UniversalDecoder(), unstructured.UnstructuredJSONScheme); len(errs) > 0 {
|
||||||
return 0, []runtime.Object{obj}, utilerrors.NewAggregate(errs)
|
return 0, []runtime.Object{obj}, utilerrors.NewAggregate(errs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,8 +212,8 @@ func (s *CustomColumnsPrinter) printOneObject(obj runtime.Object, parsers []*jso
|
|||||||
|
|
||||||
var values [][]reflect.Value
|
var values [][]reflect.Value
|
||||||
var err error
|
var err error
|
||||||
if unstructured, ok := obj.(*runtime.Unstructured); ok {
|
if unstructured, ok := obj.(runtime.Unstructured); ok {
|
||||||
values, err = parser.FindResults(unstructured.Object)
|
values, err = parser.FindResults(unstructured.UnstructuredContent())
|
||||||
} else {
|
} else {
|
||||||
values, err = parser.FindResults(reflect.ValueOf(obj).Elem().Interface())
|
values, err = parser.FindResults(reflect.ValueOf(obj).Elem().Interface())
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ func (f Filters) Filter(obj runtime.Object, opts *PrintOptions) (bool, error) {
|
|||||||
// check if the object is unstructured. If so, let's attempt to convert it to a type we can understand
|
// check if the object is unstructured. If so, let's attempt to convert it to a type we can understand
|
||||||
// before apply filter func.
|
// before apply filter func.
|
||||||
switch obj.(type) {
|
switch obj.(type) {
|
||||||
case *runtime.UnstructuredList, *runtime.Unstructured, *runtime.Unknown:
|
case runtime.Unstructured, *runtime.Unknown:
|
||||||
if objBytes, err := runtime.Encode(api.Codecs.LegacyCodec(), obj); err == nil {
|
if objBytes, err := runtime.Encode(api.Codecs.LegacyCodec(), obj); err == nil {
|
||||||
if decodedObj, err := runtime.Decode(api.Codecs.UniversalDecoder(), objBytes); err == nil {
|
if decodedObj, err := runtime.Decode(api.Codecs.UniversalDecoder(), objBytes); err == nil {
|
||||||
obj = decodedObj
|
obj = decodedObj
|
||||||
|
@ -40,6 +40,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/apis/policy"
|
"k8s.io/kubernetes/pkg/apis/policy"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
"k8s.io/kubernetes/pkg/apis/storage"
|
"k8s.io/kubernetes/pkg/apis/storage"
|
||||||
@ -232,7 +233,7 @@ func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if errs := runtime.DecodeList(items, p.Decoder, runtime.UnstructuredJSONScheme); len(errs) > 0 {
|
if errs := runtime.DecodeList(items, p.Decoder, unstructured.UnstructuredJSONScheme); len(errs) > 0 {
|
||||||
return utilerrors.NewAggregate(errs)
|
return utilerrors.NewAggregate(errs)
|
||||||
}
|
}
|
||||||
for _, obj := range items {
|
for _, obj := range items {
|
||||||
@ -2394,7 +2395,7 @@ func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) er
|
|||||||
// check if the object is unstructured. If so, let's attempt to convert it to a type we can understand before
|
// check if the object is unstructured. If so, let's attempt to convert it to a type we can understand before
|
||||||
// trying to print, since the printers are keyed by type. This is extremely expensive.
|
// trying to print, since the printers are keyed by type. This is extremely expensive.
|
||||||
switch obj.(type) {
|
switch obj.(type) {
|
||||||
case *runtime.UnstructuredList, *runtime.Unstructured, *runtime.Unknown:
|
case runtime.Unstructured, *runtime.Unknown:
|
||||||
if objBytes, err := runtime.Encode(api.Codecs.LegacyCodec(), obj); err == nil {
|
if objBytes, err := runtime.Encode(api.Codecs.LegacyCodec(), obj); err == nil {
|
||||||
if decodedObj, err := runtime.Decode(api.Codecs.UniversalDecoder(), objBytes); err == nil {
|
if decodedObj, err := runtime.Decode(api.Codecs.UniversalDecoder(), objBytes); err == nil {
|
||||||
obj = decodedObj
|
obj = decodedObj
|
||||||
@ -2423,12 +2424,6 @@ func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) er
|
|||||||
return resultValue.Interface().(error)
|
return resultValue.Interface().(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// we don't recognize this type, but we can still attempt to print some reasonable information about.
|
|
||||||
unstructured, ok := obj.(*runtime.Unstructured)
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("error: unknown type %#v", obj)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := meta.Accessor(obj); err == nil {
|
if _, err := meta.Accessor(obj); err == nil {
|
||||||
if !h.options.NoHeaders && t != h.lastType {
|
if !h.options.NoHeaders && t != h.lastType {
|
||||||
headers := []string{"NAME", "KIND"}
|
headers := []string{"NAME", "KIND"}
|
||||||
@ -2441,6 +2436,12 @@ func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) er
|
|||||||
h.printHeader(headers, w)
|
h.printHeader(headers, w)
|
||||||
h.lastType = t
|
h.lastType = t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we don't recognize this type, but we can still attempt to print some reasonable information about.
|
||||||
|
unstructured, ok := obj.(runtime.Unstructured)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("error: unknown type %#v", obj)
|
||||||
|
}
|
||||||
// if the error isn't nil, report the "I don't recognize this" error
|
// if the error isn't nil, report the "I don't recognize this" error
|
||||||
if err := printUnstructured(unstructured, w, h.options); err != nil {
|
if err := printUnstructured(unstructured, w, h.options); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -2452,7 +2453,7 @@ func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) er
|
|||||||
return fmt.Errorf("error: unknown type %#v", obj)
|
return fmt.Errorf("error: unknown type %#v", obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printUnstructured(unstructured *runtime.Unstructured, w io.Writer, options PrintOptions) error {
|
func printUnstructured(unstructured runtime.Unstructured, w io.Writer, options PrintOptions) error {
|
||||||
metadata, err := meta.Accessor(unstructured)
|
metadata, err := meta.Accessor(unstructured)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -2464,13 +2465,14 @@ func printUnstructured(unstructured *runtime.Unstructured, w io.Writer, options
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
content := unstructured.UnstructuredContent()
|
||||||
kind := "<missing>"
|
kind := "<missing>"
|
||||||
if objKind, ok := unstructured.Object["kind"]; ok {
|
if objKind, ok := content["kind"]; ok {
|
||||||
if str, ok := objKind.(string); ok {
|
if str, ok := objKind.(string); ok {
|
||||||
kind = str
|
kind = str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if objAPIVersion, ok := unstructured.Object["apiVersion"]; ok {
|
if objAPIVersion, ok := content["apiVersion"]; ok {
|
||||||
if str, ok := objAPIVersion.(string); ok {
|
if str, ok := objAPIVersion.(string); ok {
|
||||||
version, err := schema.ParseGroupVersion(str)
|
version, err := schema.ParseGroupVersion(str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2521,12 +2523,7 @@ func (p *TemplatePrinter) AfterPrint(w io.Writer, res string) error {
|
|||||||
func (p *TemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error {
|
func (p *TemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error {
|
||||||
var data []byte
|
var data []byte
|
||||||
var err error
|
var err error
|
||||||
if unstructured, ok := obj.(*runtime.Unstructured); ok {
|
data, err = json.Marshal(obj)
|
||||||
data, err = json.Marshal(unstructured.Object)
|
|
||||||
} else {
|
|
||||||
data, err = json.Marshal(obj)
|
|
||||||
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -2700,7 +2697,7 @@ func (j *JSONPathPrinter) PrintObj(obj runtime.Object, w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if unstructured, ok := obj.(*runtime.Unstructured); ok {
|
if unstructured, ok := obj.(*unstructured.Unstructured); ok {
|
||||||
queryObj = unstructured.Object
|
queryObj = unstructured.Object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,14 +22,15 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/integer"
|
"k8s.io/kubernetes/pkg/util/integer"
|
||||||
"k8s.io/kubernetes/pkg/util/jsonpath"
|
"k8s.io/kubernetes/pkg/util/jsonpath"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Sorting printer sorts list types before delegating to another printer.
|
// Sorting printer sorts list types before delegating to another printer.
|
||||||
@ -112,7 +113,7 @@ func SortObjects(decoder runtime.Decoder, objs []runtime.Object, fieldInput stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
var values [][]reflect.Value
|
var values [][]reflect.Value
|
||||||
if unstructured, ok := objs[0].(*runtime.Unstructured); ok {
|
if unstructured, ok := objs[0].(*unstructured.Unstructured); ok {
|
||||||
values, err = parser.FindResults(unstructured.Object)
|
values, err = parser.FindResults(unstructured.Object)
|
||||||
} else {
|
} else {
|
||||||
values, err = parser.FindResults(reflect.ValueOf(objs[0]).Elem().Interface())
|
values, err = parser.FindResults(reflect.ValueOf(objs[0]).Elem().Interface())
|
||||||
@ -266,7 +267,7 @@ func (r *RuntimeSort) Less(i, j int) bool {
|
|||||||
var jValues [][]reflect.Value
|
var jValues [][]reflect.Value
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if unstructured, ok := iObj.(*runtime.Unstructured); ok {
|
if unstructured, ok := iObj.(*unstructured.Unstructured); ok {
|
||||||
iValues, err = parser.FindResults(unstructured.Object)
|
iValues, err = parser.FindResults(unstructured.Object)
|
||||||
} else {
|
} else {
|
||||||
iValues, err = parser.FindResults(reflect.ValueOf(iObj).Elem().Interface())
|
iValues, err = parser.FindResults(reflect.ValueOf(iObj).Elem().Interface())
|
||||||
@ -275,7 +276,7 @@ func (r *RuntimeSort) Less(i, j int) bool {
|
|||||||
glog.Fatalf("Failed to get i values for %#v using %s (%#v)", iObj, r.field, err)
|
glog.Fatalf("Failed to get i values for %#v using %s (%#v)", iObj, r.field, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if unstructured, ok := jObj.(*runtime.Unstructured); ok {
|
if unstructured, ok := jObj.(*unstructured.Unstructured); ok {
|
||||||
jValues, err = parser.FindResults(unstructured.Object)
|
jValues, err = parser.FindResults(unstructured.Object)
|
||||||
} else {
|
} else {
|
||||||
jValues, err = parser.FindResults(reflect.ValueOf(jObj).Elem().Interface())
|
jValues, err = parser.FindResults(reflect.ValueOf(jObj).Elem().Interface())
|
||||||
|
@ -34,13 +34,6 @@ func TestDecodeList(t *testing.T) {
|
|||||||
Raw: []byte(`{"kind":"Pod","apiVersion":"` + registered.GroupOrDie(api.GroupName).GroupVersion.String() + `","metadata":{"name":"test"}}`),
|
Raw: []byte(`{"kind":"Pod","apiVersion":"` + registered.GroupOrDie(api.GroupName).GroupVersion.String() + `","metadata":{"name":"test"}}`),
|
||||||
ContentType: runtime.ContentTypeJSON,
|
ContentType: runtime.ContentTypeJSON,
|
||||||
},
|
},
|
||||||
&runtime.Unstructured{
|
|
||||||
Object: map[string]interface{}{
|
|
||||||
"kind": "Foo",
|
|
||||||
"apiVersion": "Bar",
|
|
||||||
"test": "value",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if errs := runtime.DecodeList(pl.Items, testapi.Default.Codec()); len(errs) != 0 {
|
if errs := runtime.DecodeList(pl.Items, testapi.Default.Codec()); len(errs) != 0 {
|
||||||
|
@ -40,8 +40,16 @@ import (
|
|||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/blang/semver"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
"golang.org/x/crypto/ssh"
|
||||||
|
"golang.org/x/net/websocket"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
gomegatypes "github.com/onsi/gomega/types"
|
||||||
|
|
||||||
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_5"
|
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_5"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
apierrs "k8s.io/kubernetes/pkg/api/errors"
|
apierrs "k8s.io/kubernetes/pkg/api/errors"
|
||||||
@ -52,6 +60,7 @@ import (
|
|||||||
extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions"
|
extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||||
"k8s.io/kubernetes/pkg/client/conditions"
|
"k8s.io/kubernetes/pkg/client/conditions"
|
||||||
@ -83,15 +92,6 @@ import (
|
|||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
|
||||||
testutils "k8s.io/kubernetes/test/utils"
|
testutils "k8s.io/kubernetes/test/utils"
|
||||||
|
|
||||||
"github.com/blang/semver"
|
|
||||||
"golang.org/x/crypto/ssh"
|
|
||||||
"golang.org/x/net/websocket"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
|
|
||||||
gomegatypes "github.com/onsi/gomega/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -1132,9 +1132,9 @@ func hasRemainingContent(c clientset.Interface, clientPool dynamic.ClientPool, n
|
|||||||
}
|
}
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
unstructuredList, ok := obj.(*runtime.UnstructuredList)
|
unstructuredList, ok := obj.(*unstructured.UnstructuredList)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, fmt.Errorf("namespace: %s, resource: %s, expected *runtime.UnstructuredList, got %#v", namespace, apiResource.Name, obj)
|
return false, fmt.Errorf("namespace: %s, resource: %s, expected *unstructured.UnstructuredList, got %#v", namespace, apiResource.Name, obj)
|
||||||
}
|
}
|
||||||
if len(unstructuredList.Items) > 0 {
|
if len(unstructuredList.Items) > 0 {
|
||||||
Logf("namespace: %s, resource: %s, items remaining: %v", namespace, apiResource.Name, len(unstructuredList.Items))
|
Logf("namespace: %s, resource: %s, items remaining: %v", namespace, apiResource.Name, len(unstructuredList.Items))
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/meta/v1/unstructured"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
"k8s.io/kubernetes/pkg/client/typed/dynamic"
|
||||||
@ -93,9 +94,9 @@ func TestDynamicClient(t *testing.T) {
|
|||||||
|
|
||||||
// check dynamic list
|
// check dynamic list
|
||||||
obj, err := dynamicClient.Resource(&resource, ns.Name).List(&v1.ListOptions{})
|
obj, err := dynamicClient.Resource(&resource, ns.Name).List(&v1.ListOptions{})
|
||||||
unstructuredList, ok := obj.(*runtime.UnstructuredList)
|
unstructuredList, ok := obj.(*unstructured.UnstructuredList)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("expected *runtime.UnstructuredList, got %#v", obj)
|
t.Fatalf("expected *unstructured.UnstructuredList, got %#v", obj)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error when listing pods: %v", err)
|
t.Fatalf("unexpected error when listing pods: %v", err)
|
||||||
@ -145,8 +146,8 @@ func TestDynamicClient(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func unstructuredToPod(obj *runtime.Unstructured) (*v1.Pod, error) {
|
func unstructuredToPod(obj *unstructured.Unstructured) (*v1.Pod, error) {
|
||||||
json, err := runtime.Encode(runtime.UnstructuredJSONScheme, obj)
|
json, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user