Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
42d410fd
Unverified
Commit
42d410fd
authored
Dec 03, 2016
by
Clayton Coleman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Switch to use pkg/apis/meta/v1/unstructured and the new interfaces
Avoid directly accessing an unstructured type if it is not required.
parent
c30862a4
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
123 additions
and
126 deletions
+123
-126
help.go
pkg/api/meta/help.go
+4
-7
help_test.go
pkg/api/meta/help_test.go
+5
-4
unstructured.go
pkg/api/meta/unstructured.go
+1
-1
schema.go
pkg/api/validation/schema.go
+4
-4
unstructured.go
pkg/client/typed/discovery/unstructured.go
+4
-4
client.go
pkg/client/typed/dynamic/client.go
+11
-10
client_test.go
pkg/client/typed/dynamic/client_test.go
+14
-13
dynamic_util.go
pkg/client/typed/dynamic/dynamic_util.go
+5
-4
garbagecollector.go
pkg/controller/garbagecollector/garbagecollector.go
+6
-5
namespace_controller_utils.go
pkg/controller/namespace/namespace_controller_utils.go
+6
-6
create.go
pkg/kubectl/cmd/create.go
+2
-2
delete.go
pkg/kubectl/cmd/delete.go
+2
-2
edit.go
pkg/kubectl/cmd/edit.go
+2
-1
get.go
pkg/kubectl/cmd/get.go
+7
-6
replace.go
pkg/kubectl/cmd/replace.go
+4
-4
helpers.go
pkg/kubectl/cmd/util/helpers.go
+6
-5
custom_column_printer.go
pkg/kubectl/custom_column_printer.go
+2
-2
resource_filter.go
pkg/kubectl/resource_filter.go
+1
-1
resource_printer.go
pkg/kubectl/resource_printer.go
+15
-18
sorting_printer.go
pkg/kubectl/sorting_printer.go
+6
-5
helper_test.go
pkg/runtime/helper_test.go
+0
-7
util.go
test/e2e/framework/util.go
+11
-11
dynamic_client_test.go
test/integration/client/dynamic_client_test.go
+5
-4
No files found.
pkg/api/meta/help.go
View file @
42d410fd
...
@@ -20,19 +20,16 @@ import (
...
@@ -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
)
...
...
pkg/api/meta/help_test.go
View file @
42d410fd
...
@@ -23,6 +23,7 @@ import (
...
@@ -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) {
...
@@ -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
{
...
...
pkg/api/meta/unstructured.go
View file @
42d410fd
...
@@ -22,7 +22,7 @@ import (
...
@@ -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
{},
...
...
pkg/api/validation/schema.go
View file @
42d410fd
...
@@ -28,7 +28,7 @@ import (
...
@@ -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
...
@@ -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
...
@@ -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)
...
@@ -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
}
}
...
...
pkg/client/typed/discovery/unstructured.go
View file @
42d410fd
...
@@ -50,10 +50,10 @@ func NewUnstructuredObjectTyper(groupResources []*APIGroupResources) *Unstructur
...
@@ -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
...
@@ -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 {
...
@@ -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
)
{
...
...
pkg/client/typed/dynamic/client.go
View file @
42d410fd
...
@@ -29,6 +29,7 @@ import (
...
@@ -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) {
...
@@ -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
...
@@ -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
...
@@ -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) {
...
@@ -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
...
@@ -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
...
@@ -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.
...
...
pkg/client/typed/dynamic/client_test.go
View file @
42d410fd
...
@@ -28,6 +28,7 @@ import (
...
@@ -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 {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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
}{
}{
{
{
...
...
pkg/client/typed/dynamic/dynamic_util.go
View file @
42d410fd
...
@@ -21,6 +21,7 @@ import (
...
@@ -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 (
...
@@ -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
...
@@ -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
...
@@ -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
...
...
pkg/controller/garbagecollector/garbagecollector.go
View file @
42d410fd
...
@@ -28,6 +28,7 @@ import (
...
@@ -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 {
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
)
...
...
pkg/controller/namespace/namespace_controller_utils.go
View file @
42d410fd
...
@@ -21,17 +21,17 @@ import (
...
@@ -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(
...
@@ -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(
...
@@ -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
}
}
...
...
pkg/kubectl/cmd/create.go
View file @
42d410fd
...
@@ -23,11 +23,11 @@ import (
...
@@ -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
...
@@ -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
()
.
...
...
pkg/kubectl/cmd/delete.go
View file @
42d410fd
...
@@ -26,11 +26,11 @@ import (
...
@@ -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
...
@@ -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
)
.
...
...
pkg/kubectl/cmd/edit.go
View file @
42d410fd
...
@@ -30,6 +30,7 @@ import (
...
@@ -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
...
@@ -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
)
}
}
...
...
pkg/kubectl/cmd/get.go
View file @
42d410fd
...
@@ -24,6 +24,7 @@ import (
...
@@ -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 [
...
@@ -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 [
...
@@ -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 [
...
@@ -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 [
...
@@ -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 [
...
@@ -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 [
...
@@ -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
)
...
...
pkg/kubectl/cmd/replace.go
View file @
42d410fd
...
@@ -27,11 +27,11 @@ import (
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
()
.
...
...
pkg/kubectl/cmd/util/helpers.go
View file @
42d410fd
...
@@ -28,12 +28,17 @@ import (
...
@@ -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 (
...
@@ -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
...
@@ -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
)
}
}
...
...
pkg/kubectl/custom_column_printer.go
View file @
42d410fd
...
@@ -212,8 +212,8 @@ func (s *CustomColumnsPrinter) printOneObject(obj runtime.Object, parsers []*jso
...
@@ -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
())
}
}
...
...
pkg/kubectl/resource_filter.go
View file @
42d410fd
...
@@ -61,7 +61,7 @@ func (f Filters) Filter(obj runtime.Object, opts *PrintOptions) (bool, error) {
...
@@ -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
...
...
pkg/kubectl/resource_printer.go
View file @
42d410fd
...
@@ -40,6 +40,7 @@ import (
...
@@ -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 {
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -2464,13 +2465,14 @@ func printUnstructured(unstructured *runtime.Unstructured, w io.Writer, options
}
}
}
}
content
:=
unstructured
.
UnstructuredContent
()
kind
:=
"<missing>"
kind
:=
"<missing>"
if
objKind
,
ok
:=
unstructured
.
Objec
t
[
"kind"
];
ok
{
if
objKind
,
ok
:=
conten
t
[
"kind"
];
ok
{
if
str
,
ok
:=
objKind
.
(
string
);
ok
{
if
str
,
ok
:=
objKind
.
(
string
);
ok
{
kind
=
str
kind
=
str
}
}
}
}
if
objAPIVersion
,
ok
:=
unstructured
.
Objec
t
[
"apiVersion"
];
ok
{
if
objAPIVersion
,
ok
:=
conten
t
[
"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 {
...
@@ -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 {
...
@@ -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
}
}
...
...
pkg/kubectl/sorting_printer.go
View file @
42d410fd
...
@@ -22,14 +22,15 @@ import (
...
@@ -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
...
@@ -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 {
...
@@ -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 {
...
@@ -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
())
...
...
pkg/runtime/helper_test.go
View file @
42d410fd
...
@@ -34,13 +34,6 @@ func TestDecodeList(t *testing.T) {
...
@@ -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
{
...
...
test/e2e/framework/util.go
View file @
42d410fd
...
@@ -40,8 +40,16 @@ import (
...
@@ -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 (
...
@@ -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 (
...
@@ -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
...
@@ -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
))
...
...
test/integration/client/dynamic_client_test.go
View file @
42d410fd
...
@@ -26,6 +26,7 @@ import (
...
@@ -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) {
...
@@ -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) {
...
@@ -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
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment