mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Move unstructured conversion into pkg/runtime
Scheme conversion should support unstructured conversion natively to allow going from unstructured to typed and back. It is not a higher level responsibility to do that conversion because the scheme is the only one who knows what types it supports.
This commit is contained in:
parent
0eb999c26a
commit
557f9ddfe6
@ -505,7 +505,6 @@ staging/src/k8s.io/apimachinery/pkg/apis/meta/v1alpha1
|
|||||||
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup
|
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup
|
||||||
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1
|
staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1
|
||||||
staging/src/k8s.io/apimachinery/pkg/conversion
|
staging/src/k8s.io/apimachinery/pkg/conversion
|
||||||
staging/src/k8s.io/apimachinery/pkg/conversion/unstructured
|
|
||||||
staging/src/k8s.io/apimachinery/pkg/labels
|
staging/src/k8s.io/apimachinery/pkg/labels
|
||||||
staging/src/k8s.io/apimachinery/pkg/runtime/schema
|
staging/src/k8s.io/apimachinery/pkg/runtime/schema
|
||||||
staging/src/k8s.io/apimachinery/pkg/runtime/serializer
|
staging/src/k8s.io/apimachinery/pkg/runtime/serializer
|
||||||
|
@ -97,7 +97,6 @@ go_test(
|
|||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library",
|
||||||
|
@ -29,7 +29,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/api/testing/fuzzer"
|
"k8s.io/apimachinery/pkg/api/testing/fuzzer"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
metaunstruct "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
metaunstruct "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/diff"
|
"k8s.io/apimachinery/pkg/util/diff"
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
@ -99,14 +98,14 @@ func doRoundTrip(t *testing.T, group testapi.TestGroup, kind string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newUnstr, err := unstructured.DefaultConverter.ToUnstructured(item)
|
newUnstr, err := runtime.NewTestUnstructuredConverter(apiequality.Semantic).ToUnstructured(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("ToUnstructured failed: %v", err)
|
t.Errorf("ToUnstructured failed: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
||||||
err = unstructured.DefaultConverter.FromUnstructured(newUnstr, newObj)
|
err = runtime.DefaultUnstructuredConverter.FromUnstructured(newUnstr, newObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("FromUnstructured failed: %v", err)
|
t.Errorf("FromUnstructured failed: %v", err)
|
||||||
return
|
return
|
||||||
@ -146,7 +145,7 @@ func TestRoundTripWithEmptyCreationTimestamp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Logf("Testing: %v in %v", kind, groupKey)
|
t.Logf("Testing: %v in %v", kind, groupKey)
|
||||||
|
|
||||||
unstrBody, err := unstructured.DefaultConverter.ToUnstructured(item)
|
unstrBody, err := runtime.DefaultUnstructuredConverter.ToUnstructured(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("ToUnstructured failed: %v", err)
|
t.Fatalf("ToUnstructured failed: %v", err)
|
||||||
}
|
}
|
||||||
@ -163,7 +162,7 @@ func TestRoundTripWithEmptyCreationTimestamp(t *testing.T) {
|
|||||||
// attempt to re-convert unstructured object - conversion should not fail
|
// attempt to re-convert unstructured object - conversion should not fail
|
||||||
// based on empty metadata fields, such as creationTimestamp
|
// based on empty metadata fields, such as creationTimestamp
|
||||||
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
||||||
err = unstructured.DefaultConverter.FromUnstructured(unstructObj.Object, newObj)
|
err = runtime.NewTestUnstructuredConverter(apiequality.Semantic).FromUnstructured(unstructObj.Object, newObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("FromUnstructured failed: %v", err)
|
t.Fatalf("FromUnstructured failed: %v", err)
|
||||||
}
|
}
|
||||||
@ -176,12 +175,12 @@ func BenchmarkToFromUnstructured(b *testing.B) {
|
|||||||
size := len(items)
|
size := len(items)
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
unstr, err := unstructured.DefaultConverter.ToUnstructured(&items[i%size])
|
unstr, err := runtime.NewTestUnstructuredConverter(apiequality.Semantic).ToUnstructured(&items[i%size])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("unexpected error: %v", err)
|
b.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
obj := v1.Pod{}
|
obj := v1.Pod{}
|
||||||
if err := unstructured.DefaultConverter.FromUnstructured(unstr, &obj); err != nil {
|
if err := runtime.NewTestUnstructuredConverter(apiequality.Semantic).FromUnstructured(unstr, &obj); err != nil {
|
||||||
b.Fatalf("unexpected error: %v", err)
|
b.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
staging/src/k8s.io/api/Godeps/Godeps.json
generated
4
staging/src/k8s.io/api/Godeps/Godeps.json
generated
@ -182,6 +182,10 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -702,10 +702,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -32,7 +32,6 @@ go_library(
|
|||||||
importpath = "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
|
importpath = "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
|
||||||
deps = [
|
deps = [
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
@ -39,7 +38,7 @@ func NestedFieldCopy(obj map[string]interface{}, fields ...string) (interface{},
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
return unstructured.DeepCopyJSONValue(val), true
|
return runtime.DeepCopyJSONValue(val), true
|
||||||
}
|
}
|
||||||
|
|
||||||
func nestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{}, bool) {
|
func nestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{}, bool) {
|
||||||
@ -131,7 +130,7 @@ func NestedSlice(obj map[string]interface{}, fields ...string) ([]interface{}, b
|
|||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
if _, ok := val.([]interface{}); ok {
|
if _, ok := val.([]interface{}); ok {
|
||||||
return unstructured.DeepCopyJSONValue(val).([]interface{}), true
|
return runtime.DeepCopyJSONValue(val).([]interface{}), true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
@ -165,7 +164,7 @@ func NestedMap(obj map[string]interface{}, fields ...string) (map[string]interfa
|
|||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
if m, ok := val.(map[string]interface{}); ok {
|
if m, ok := val.(map[string]interface{}); ok {
|
||||||
return unstructured.DeepCopyJSON(m), true
|
return runtime.DeepCopyJSON(m), true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
@ -173,7 +172,7 @@ func NestedMap(obj map[string]interface{}, fields ...string) (map[string]interfa
|
|||||||
// SetNestedField sets the value of a nested field to a deep copy of the value provided.
|
// SetNestedField sets the value of a nested field to a deep copy of the value provided.
|
||||||
// Returns false if value cannot be set because one of the nesting levels is not a map[string]interface{}.
|
// Returns false if value cannot be set because one of the nesting levels is not a map[string]interface{}.
|
||||||
func SetNestedField(obj map[string]interface{}, value interface{}, fields ...string) bool {
|
func SetNestedField(obj map[string]interface{}, value interface{}, fields ...string) bool {
|
||||||
return setNestedFieldNoCopy(obj, unstructured.DeepCopyJSONValue(value), fields...)
|
return setNestedFieldNoCopy(obj, runtime.DeepCopyJSONValue(value), fields...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setNestedFieldNoCopy(obj map[string]interface{}, value interface{}, fields ...string) bool {
|
func setNestedFieldNoCopy(obj map[string]interface{}, value interface{}, fields ...string) bool {
|
||||||
@ -288,8 +287,6 @@ func setOwnerReference(src metav1.OwnerReference) map[string]interface{} {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
var converter = unstructured.NewConverter(false)
|
|
||||||
|
|
||||||
// UnstructuredJSONScheme is capable of converting JSON data into the Unstructured
|
// UnstructuredJSONScheme is capable of converting JSON data into the Unstructured
|
||||||
// type, which can be used for generic access to objects without a predefined scheme.
|
// type, which can be used for generic access to objects without a predefined scheme.
|
||||||
// TODO: move into serializer/json.
|
// TODO: move into serializer/json.
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
@ -112,7 +111,7 @@ func (in *Unstructured) DeepCopy() *Unstructured {
|
|||||||
}
|
}
|
||||||
out := new(Unstructured)
|
out := new(Unstructured)
|
||||||
*out = *in
|
*out = *in
|
||||||
out.Object = unstructured.DeepCopyJSON(in.Object)
|
out.Object = runtime.DeepCopyJSON(in.Object)
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,7 +347,7 @@ func (u *Unstructured) GetInitializers() *metav1.Initializers {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
out := &metav1.Initializers{}
|
out := &metav1.Initializers{}
|
||||||
if err := converter.FromUnstructured(obj, out); err != nil {
|
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj, out); err != nil {
|
||||||
utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err))
|
utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err))
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
@ -359,7 +358,7 @@ func (u *Unstructured) SetInitializers(initializers *metav1.Initializers) {
|
|||||||
RemoveNestedField(u.Object, "metadata", "initializers")
|
RemoveNestedField(u.Object, "metadata", "initializers")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
out, err := converter.ToUnstructured(initializers)
|
out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(initializers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err))
|
utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
@ -80,7 +79,7 @@ func (u *UnstructuredList) DeepCopy() *UnstructuredList {
|
|||||||
}
|
}
|
||||||
out := new(UnstructuredList)
|
out := new(UnstructuredList)
|
||||||
*out = *u
|
*out = *u
|
||||||
out.Object = unstructured.DeepCopyJSON(u.Object)
|
out.Object = runtime.DeepCopyJSON(u.Object)
|
||||||
out.Items = make([]Unstructured, len(u.Items))
|
out.Items = make([]Unstructured, len(u.Items))
|
||||||
for i := range u.Items {
|
for i := range u.Items {
|
||||||
u.Items[i].DeepCopyInto(&out.Items[i])
|
u.Items[i].DeepCopyInto(&out.Items[i])
|
||||||
|
@ -45,7 +45,6 @@ filegroup(
|
|||||||
srcs = [
|
srcs = [
|
||||||
":package-srcs",
|
":package-srcs",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/conversion/queryparams:all-srcs",
|
"//staging/src/k8s.io/apimachinery/pkg/conversion/queryparams:all-srcs",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/conversion/unstructured:all-srcs",
|
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
)
|
)
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
load(
|
|
||||||
"@io_bazel_rules_go//go:def.bzl",
|
|
||||||
"go_library",
|
|
||||||
)
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = [
|
|
||||||
"converter.go",
|
|
||||||
"doc.go",
|
|
||||||
],
|
|
||||||
importpath = "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
deps = [
|
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/json:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [
|
|
||||||
":package-srcs",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/conversion/unstructured/testing:all-srcs",
|
|
||||||
],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
)
|
|
@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Package unstructured provides conversion from runtime objects
|
|
||||||
// to map[string]interface{} representation.
|
|
||||||
package unstructured // import "k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
@ -1,29 +0,0 @@
|
|||||||
load("@io_bazel_rules_go//go:def.bzl", "go_test")
|
|
||||||
|
|
||||||
go_test(
|
|
||||||
name = "go_default_test",
|
|
||||||
srcs = ["converter_test.go"],
|
|
||||||
importpath = "k8s.io/apimachinery/pkg/conversion/unstructured/testing",
|
|
||||||
deps = [
|
|
||||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
|
||||||
"//vendor/github.com/stretchr/testify/require:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/json:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
)
|
|
@ -19,6 +19,7 @@ go_library(
|
|||||||
"codec.go",
|
"codec.go",
|
||||||
"codec_check.go",
|
"codec_check.go",
|
||||||
"conversion.go",
|
"conversion.go",
|
||||||
|
"converter.go",
|
||||||
"doc.go",
|
"doc.go",
|
||||||
"embedded.go",
|
"embedded.go",
|
||||||
"error.go",
|
"error.go",
|
||||||
@ -37,10 +38,13 @@ go_library(
|
|||||||
importpath = "k8s.io/apimachinery/pkg/runtime",
|
importpath = "k8s.io/apimachinery/pkg/runtime",
|
||||||
deps = [
|
deps = [
|
||||||
"//vendor/github.com/gogo/protobuf/proto:go_default_library",
|
"//vendor/github.com/gogo/protobuf/proto:go_default_library",
|
||||||
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion/queryparams:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/conversion/queryparams:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/util/json:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,6 +52,7 @@ go_test(
|
|||||||
name = "go_default_xtest",
|
name = "go_default_xtest",
|
||||||
srcs = [
|
srcs = [
|
||||||
"conversion_test.go",
|
"conversion_test.go",
|
||||||
|
"converter_test.go",
|
||||||
"embedded_test.go",
|
"embedded_test.go",
|
||||||
"extension_test.go",
|
"extension_test.go",
|
||||||
"scheme_test.go",
|
"scheme_test.go",
|
||||||
@ -56,13 +61,17 @@ go_test(
|
|||||||
deps = [
|
deps = [
|
||||||
"//vendor/github.com/google/gofuzz:go_default_library",
|
"//vendor/github.com/google/gofuzz:go_default_library",
|
||||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||||
|
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||||
|
"//vendor/github.com/stretchr/testify/require:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/testing:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/testing:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
||||||
|
"//vendor/k8s.io/apimachinery/pkg/util/json:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unstructured
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -27,19 +27,18 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
|
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/util/diff"
|
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Converter is an interface for converting between interface{}
|
// UnstructuredConverter is an interface for converting between interface{}
|
||||||
// and map[string]interface representation.
|
// and map[string]interface representation.
|
||||||
type Converter interface {
|
type UnstructuredConverter interface {
|
||||||
ToUnstructured(obj interface{}) (map[string]interface{}, error)
|
ToUnstructured(obj interface{}) (map[string]interface{}, error)
|
||||||
FromUnstructured(u map[string]interface{}, obj interface{}) error
|
FromUnstructured(u map[string]interface{}, obj interface{}) error
|
||||||
}
|
}
|
||||||
@ -78,7 +77,16 @@ var (
|
|||||||
float64Type = reflect.TypeOf(float64(0))
|
float64Type = reflect.TypeOf(float64(0))
|
||||||
boolType = reflect.TypeOf(bool(false))
|
boolType = reflect.TypeOf(bool(false))
|
||||||
fieldCache = newFieldsCache()
|
fieldCache = newFieldsCache()
|
||||||
DefaultConverter = NewConverter(parseBool(os.Getenv("KUBE_PATCH_CONVERSION_DETECTOR")))
|
|
||||||
|
// DefaultUnstructuredConverter performs unstructured to Go typed object conversions.
|
||||||
|
DefaultUnstructuredConverter = &unstructuredConverter{
|
||||||
|
mismatchDetection: parseBool(os.Getenv("KUBE_PATCH_CONVERSION_DETECTOR")),
|
||||||
|
comparison: conversion.EqualitiesOrDie(
|
||||||
|
func(a, b time.Time) bool {
|
||||||
|
return a.UTC() == b.UTC()
|
||||||
|
},
|
||||||
|
),
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseBool(key string) bool {
|
func parseBool(key string) bool {
|
||||||
@ -92,24 +100,30 @@ func parseBool(key string) bool {
|
|||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConverterImpl knows how to convert between interface{} and
|
// unstructuredConverter knows how to convert between interface{} and
|
||||||
// Unstructured in both ways.
|
// Unstructured in both ways.
|
||||||
type converterImpl struct {
|
type unstructuredConverter struct {
|
||||||
// If true, we will be additionally running conversion via json
|
// If true, we will be additionally running conversion via json
|
||||||
// to ensure that the result is true.
|
// to ensure that the result is true.
|
||||||
// This is supposed to be set only in tests.
|
// This is supposed to be set only in tests.
|
||||||
mismatchDetection bool
|
mismatchDetection bool
|
||||||
|
// comparison is the default test logic used to compare
|
||||||
|
comparison conversion.Equalities
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConverter(mismatchDetection bool) Converter {
|
// NewTestUnstructuredConverter creates an UnstructuredConverter that accepts JSON typed maps and translates them
|
||||||
return &converterImpl{
|
// to Go types via reflection. It performs mismatch detection automatically and is intended for use by external
|
||||||
mismatchDetection: mismatchDetection,
|
// test tools. Use DefaultUnstructuredConverter if you do not explicitly need mismatch detection.
|
||||||
|
func NewTestUnstructuredConverter(comparison conversion.Equalities) UnstructuredConverter {
|
||||||
|
return &unstructuredConverter{
|
||||||
|
mismatchDetection: true,
|
||||||
|
comparison: comparison,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromUnstructured converts an object from map[string]interface{} representation into a concrete type.
|
// FromUnstructured converts an object from map[string]interface{} representation into a concrete type.
|
||||||
// It uses encoding/json/Unmarshaler if object implements it or reflection if not.
|
// It uses encoding/json/Unmarshaler if object implements it or reflection if not.
|
||||||
func (c *converterImpl) FromUnstructured(u map[string]interface{}, obj interface{}) error {
|
func (c *unstructuredConverter) FromUnstructured(u map[string]interface{}, obj interface{}) error {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
value := reflect.ValueOf(obj)
|
value := reflect.ValueOf(obj)
|
||||||
if t.Kind() != reflect.Ptr || value.IsNil() {
|
if t.Kind() != reflect.Ptr || value.IsNil() {
|
||||||
@ -122,8 +136,8 @@ func (c *converterImpl) FromUnstructured(u map[string]interface{}, obj interface
|
|||||||
if (err != nil) != (newErr != nil) {
|
if (err != nil) != (newErr != nil) {
|
||||||
glog.Fatalf("FromUnstructured unexpected error for %v: error: %v", u, err)
|
glog.Fatalf("FromUnstructured unexpected error for %v: error: %v", u, err)
|
||||||
}
|
}
|
||||||
if err == nil && !apiequality.Semantic.DeepEqual(obj, newObj) {
|
if err == nil && !c.comparison.DeepEqual(obj, newObj) {
|
||||||
glog.Fatalf("FromUnstructured mismatch for %#v, diff: %v", obj, diff.ObjectReflectDiff(obj, newObj))
|
glog.Fatalf("FromUnstructured mismatch\nobj1: %#v\nobj2: %#v", obj, newObj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@ -393,10 +407,10 @@ func interfaceFromUnstructured(sv, dv reflect.Value) error {
|
|||||||
|
|
||||||
// ToUnstructured converts an object into map[string]interface{} representation.
|
// ToUnstructured converts an object into map[string]interface{} representation.
|
||||||
// It uses encoding/json/Marshaler if object implements it or reflection if not.
|
// It uses encoding/json/Marshaler if object implements it or reflection if not.
|
||||||
func (c *converterImpl) ToUnstructured(obj interface{}) (map[string]interface{}, error) {
|
func (c *unstructuredConverter) ToUnstructured(obj interface{}) (map[string]interface{}, error) {
|
||||||
var u map[string]interface{}
|
var u map[string]interface{}
|
||||||
var err error
|
var err error
|
||||||
if unstr, ok := obj.(runtime.Unstructured); ok {
|
if unstr, ok := obj.(Unstructured); ok {
|
||||||
u = DeepCopyJSON(unstr.UnstructuredContent())
|
u = DeepCopyJSON(unstr.UnstructuredContent())
|
||||||
} else {
|
} else {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
@ -413,8 +427,8 @@ func (c *converterImpl) ToUnstructured(obj interface{}) (map[string]interface{},
|
|||||||
if (err != nil) != (newErr != nil) {
|
if (err != nil) != (newErr != nil) {
|
||||||
glog.Fatalf("ToUnstructured unexpected error for %v: error: %v; newErr: %v", obj, err, newErr)
|
glog.Fatalf("ToUnstructured unexpected error for %v: error: %v; newErr: %v", obj, err, newErr)
|
||||||
}
|
}
|
||||||
if err == nil && !apiequality.Semantic.DeepEqual(u, newUnstr) {
|
if err == nil && !c.comparison.DeepEqual(u, newUnstr) {
|
||||||
glog.Fatalf("ToUnstructured mismatch for %#v, diff: %v", u, diff.ObjectReflectDiff(u, newUnstr))
|
glog.Fatalf("ToUnstructured mismatch\nobj1: %#v\nobj2: %#v", u, newUnstr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
@ -18,7 +18,7 @@ limitations under the License.
|
|||||||
// Unstructured type depends on unstructured converter package but we want to test how the converter handles
|
// Unstructured type depends on unstructured converter package but we want to test how the converter handles
|
||||||
// the Unstructured type so we need to import both.
|
// the Unstructured type so we need to import both.
|
||||||
|
|
||||||
package testing
|
package runtime_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
encodingjson "encoding/json"
|
encodingjson "encoding/json"
|
||||||
@ -26,9 +26,11 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
conversionunstructured "k8s.io/apimachinery/pkg/conversion/unstructured"
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/diff"
|
"k8s.io/apimachinery/pkg/util/diff"
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
|
|
||||||
@ -36,6 +38,12 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var simpleEquality = conversion.EqualitiesOrDie(
|
||||||
|
func(a, b time.Time) bool {
|
||||||
|
return a.UTC() == b.UTC()
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
// Definte a number of test types.
|
// Definte a number of test types.
|
||||||
type A struct {
|
type A struct {
|
||||||
A int `json:"aa,omitempty"`
|
A int `json:"aa,omitempty"`
|
||||||
@ -137,14 +145,15 @@ func doRoundTrip(t *testing.T, item interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newUnstr, err := conversionunstructured.DefaultConverter.ToUnstructured(item)
|
// TODO: should be using mismatch detection but fails due to another error
|
||||||
|
newUnstr, err := runtime.DefaultUnstructuredConverter.ToUnstructured(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("ToUnstructured failed: %v", err)
|
t.Errorf("ToUnstructured failed: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface()
|
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface()
|
||||||
err = conversionunstructured.DefaultConverter.FromUnstructured(newUnstr, newObj)
|
err = runtime.NewTestUnstructuredConverter(simpleEquality).FromUnstructured(newUnstr, newObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("FromUnstructured failed: %v", err)
|
t.Errorf("FromUnstructured failed: %v", err)
|
||||||
return
|
return
|
||||||
@ -239,10 +248,9 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := range testCases {
|
for i := range testCases {
|
||||||
doRoundTrip(t, testCases[i].obj)
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
||||||
if t.Failed() {
|
doRoundTrip(t, testCases[i].obj)
|
||||||
break
|
})
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +273,7 @@ func doUnrecognized(t *testing.T, jsonData string, item interface{}, expectedErr
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface()
|
newObj := reflect.New(reflect.TypeOf(item).Elem()).Interface()
|
||||||
err = conversionunstructured.DefaultConverter.FromUnstructured(unstr, newObj)
|
err = runtime.NewTestUnstructuredConverter(simpleEquality).FromUnstructured(unstr, newObj)
|
||||||
if (err != nil) != (expectedErr != nil) {
|
if (err != nil) != (expectedErr != nil) {
|
||||||
t.Errorf("Unexpected error in FromUnstructured: %v, expected: %v", err, expectedErr)
|
t.Errorf("Unexpected error in FromUnstructured: %v, expected: %v", err, expectedErr)
|
||||||
}
|
}
|
||||||
@ -479,7 +487,7 @@ func TestDeepCopyJSON(t *testing.T) {
|
|||||||
"f": true,
|
"f": true,
|
||||||
"g": encodingjson.Number("123"),
|
"g": encodingjson.Number("123"),
|
||||||
}
|
}
|
||||||
deepCopy := conversionunstructured.DeepCopyJSON(src)
|
deepCopy := runtime.DeepCopyJSON(src)
|
||||||
assert.Equal(t, src, deepCopy)
|
assert.Equal(t, src, deepCopy)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,7 +495,7 @@ func TestFloatIntConversion(t *testing.T) {
|
|||||||
unstr := map[string]interface{}{"fd": float64(3)}
|
unstr := map[string]interface{}{"fd": float64(3)}
|
||||||
|
|
||||||
var obj F
|
var obj F
|
||||||
if err := conversionunstructured.DefaultConverter.FromUnstructured(unstr, &obj); err != nil {
|
if err := runtime.NewTestUnstructuredConverter(simpleEquality).FromUnstructured(unstr, &obj); err != nil {
|
||||||
t.Errorf("Unexpected error in FromUnstructured: %v", err)
|
t.Errorf("Unexpected error in FromUnstructured: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,7 +533,7 @@ func TestCustomToUnstructured(t *testing.T) {
|
|||||||
tc := tc
|
tc := tc
|
||||||
t.Run(tc.Data, func(t *testing.T) {
|
t.Run(tc.Data, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
result, err := conversionunstructured.DefaultConverter.ToUnstructured(&G{
|
result, err := runtime.NewTestUnstructuredConverter(simpleEquality).ToUnstructured(&G{
|
||||||
CustomValue1: CustomValue{data: []byte(tc.Data)},
|
CustomValue1: CustomValue{data: []byte(tc.Data)},
|
||||||
CustomValue2: &CustomValue{data: []byte(tc.Data)},
|
CustomValue2: &CustomValue{data: []byte(tc.Data)},
|
||||||
CustomPointer1: CustomPointer{data: []byte(tc.Data)},
|
CustomPointer1: CustomPointer{data: []byte(tc.Data)},
|
||||||
@ -550,7 +558,7 @@ func TestCustomToUnstructuredTopLevel(t *testing.T) {
|
|||||||
obj := obj
|
obj := obj
|
||||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
result, err := conversionunstructured.DefaultConverter.ToUnstructured(obj)
|
result, err := runtime.NewTestUnstructuredConverter(simpleEquality).ToUnstructured(obj)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, expected, result)
|
assert.Equal(t, expected, result)
|
||||||
})
|
})
|
4
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
4
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
@ -954,10 +954,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -60,7 +60,6 @@ go_library(
|
|||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/conversion/unstructured:go_default_library",
|
|
||||||
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/conversion/unstructured"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
@ -232,7 +231,7 @@ func patchResource(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Capture the original object map and patch for possible retries.
|
// Capture the original object map and patch for possible retries.
|
||||||
originalMap, err := unstructured.DefaultConverter.ToUnstructured(currentVersionedObject)
|
originalMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(currentVersionedObject)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -278,7 +277,7 @@ func patchResource(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
currentObjMap, err := unstructured.DefaultConverter.ToUnstructured(currentVersionedObject)
|
currentObjMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(currentVersionedObject)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -425,7 +424,7 @@ func strategicPatchObject(
|
|||||||
objToUpdate runtime.Object,
|
objToUpdate runtime.Object,
|
||||||
versionedObj runtime.Object,
|
versionedObj runtime.Object,
|
||||||
) error {
|
) error {
|
||||||
originalObjMap, err := unstructured.DefaultConverter.ToUnstructured(originalObject)
|
originalObjMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(originalObject)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -458,7 +457,7 @@ func applyPatchToObject(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Rather than serialize the patched map to JSON, then decode it to an object, we go directly from a map to an object
|
// Rather than serialize the patched map to JSON, then decode it to an object, we go directly from a map to an object
|
||||||
if err := unstructured.DefaultConverter.FromUnstructured(patchedObjMap, objToUpdate); err != nil {
|
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(patchedObjMap, objToUpdate); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Decoding from JSON to a versioned object would apply defaults, so we do the same here
|
// Decoding from JSON to a versioned object would apply defaults, so we do the same here
|
||||||
|
4
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
4
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
@ -546,10 +546,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -666,10 +666,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
16
staging/src/k8s.io/metrics/Godeps/Godeps.json
generated
16
staging/src/k8s.io/metrics/Godeps/Godeps.json
generated
@ -14,10 +14,6 @@
|
|||||||
"ImportPath": "github.com/PuerkitoBio/urlesc",
|
"ImportPath": "github.com/PuerkitoBio/urlesc",
|
||||||
"Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e"
|
"Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "github.com/davecgh/go-spew/spew",
|
|
||||||
"Rev": "782f4967f2dc4564575ca782fe2d04090b5faca8"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/emicklei/go-restful",
|
"ImportPath": "github.com/emicklei/go-restful",
|
||||||
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
|
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
|
||||||
@ -306,10 +302,6 @@
|
|||||||
"ImportPath": "k8s.io/api/storage/v1beta1",
|
"ImportPath": "k8s.io/api/storage/v1beta1",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
@ -354,10 +346,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
@ -410,10 +398,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -666,10 +666,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
@ -342,10 +342,6 @@
|
|||||||
"ImportPath": "k8s.io/api/storage/v1beta1",
|
"ImportPath": "k8s.io/api/storage/v1beta1",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
@ -382,10 +378,6 @@
|
|||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
|
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
Loading…
Reference in New Issue
Block a user