mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-04-02 05:02:40 +08:00
Merge pull request #65904 from deads2k/api-02-trackscheme
Automatic merge from submit-queue (batch tested with PRs 65946, 65904, 65913, 65906, 65920). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. track schemes by name for error reporting Getting an error message about a type not being in the scheme is hard to fix if you don't know which scheme is failing. This adds a name to the scheme which can be set during creation or can be set based on the calling stack. If you use the old constructor a name is generated for you based on the stack. Something like "k8s.io/client-go/dynamic/scheme.go:28" for instance. Also moves a typer to its point of use. This was debt from previous refactors which I noticed going through. @kubernetes/sig-api-machinery-misc @sttts ```release-note NONE ``` Kubernetes-commit: 8e2fdb32bc84103b15310a221a375470bf567bdc
This commit is contained in:
commit
a1cbb76b5c
468
Godeps/Godeps.json
generated
468
Godeps/Godeps.json
generated
File diff suppressed because it is too large
Load Diff
5
vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go
generated
vendored
5
vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go
generated
vendored
@ -57,7 +57,7 @@ func addToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
|
|||||||
if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil {
|
if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
scheme.AddConversionFuncs(
|
err := scheme.AddConversionFuncs(
|
||||||
metav1.Convert_string_To_labels_Selector,
|
metav1.Convert_string_To_labels_Selector,
|
||||||
metav1.Convert_labels_Selector_To_string,
|
metav1.Convert_labels_Selector_To_string,
|
||||||
|
|
||||||
@ -70,6 +70,9 @@ func addToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
|
|||||||
Convert_internalversion_ListOptions_To_v1_ListOptions,
|
Convert_internalversion_ListOptions_To_v1_ListOptions,
|
||||||
Convert_v1_ListOptions_To_internalversion_ListOptions,
|
Convert_v1_ListOptions_To_internalversion_ListOptions,
|
||||||
)
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
// ListOptions is the only options struct which needs conversion (it exposes labels and fields
|
// ListOptions is the only options struct which needs conversion (it exposes labels and fields
|
||||||
// as selectors for convenience). The other types have only a single representation today.
|
// as selectors for convenience). The other types have only a single representation today.
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
|
12
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go
generated
vendored
12
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go
generated
vendored
@ -19,6 +19,7 @@ package v1
|
|||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GroupName is the group name for this API.
|
// GroupName is the group name for this API.
|
||||||
@ -53,13 +54,12 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
|
|||||||
&GetOptions{},
|
&GetOptions{},
|
||||||
&DeleteOptions{},
|
&DeleteOptions{},
|
||||||
)
|
)
|
||||||
scheme.AddConversionFuncs(
|
utilruntime.Must(scheme.AddConversionFuncs(
|
||||||
Convert_versioned_Event_to_watch_Event,
|
Convert_versioned_Event_to_watch_Event,
|
||||||
Convert_versioned_InternalEvent_to_versioned_Event,
|
Convert_versioned_InternalEvent_to_versioned_Event,
|
||||||
Convert_watch_Event_to_versioned_Event,
|
Convert_watch_Event_to_versioned_Event,
|
||||||
Convert_versioned_Event_to_versioned_InternalEvent,
|
Convert_versioned_Event_to_versioned_InternalEvent,
|
||||||
)
|
))
|
||||||
|
|
||||||
// Register Unversioned types under their own special group
|
// Register Unversioned types under their own special group
|
||||||
scheme.AddUnversionedTypes(Unversioned,
|
scheme.AddUnversionedTypes(Unversioned,
|
||||||
&Status{},
|
&Status{},
|
||||||
@ -70,8 +70,8 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
|
|||||||
)
|
)
|
||||||
|
|
||||||
// register manually. This usually goes through the SchemeBuilder, which we cannot use here.
|
// register manually. This usually goes through the SchemeBuilder, which we cannot use here.
|
||||||
AddConversionFuncs(scheme)
|
utilruntime.Must(AddConversionFuncs(scheme))
|
||||||
RegisterDefaults(scheme)
|
utilruntime.Must(RegisterDefaults(scheme))
|
||||||
}
|
}
|
||||||
|
|
||||||
// scheme is the registry for the common types that adhere to the meta v1 API spec.
|
// scheme is the registry for the common types that adhere to the meta v1 API spec.
|
||||||
@ -89,5 +89,5 @@ func init() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// register manually. This usually goes through the SchemeBuilder, which we cannot use here.
|
// register manually. This usually goes through the SchemeBuilder, which we cannot use here.
|
||||||
RegisterDefaults(scheme)
|
utilruntime.Must(RegisterDefaults(scheme))
|
||||||
}
|
}
|
||||||
|
4
vendor/k8s.io/apimachinery/pkg/runtime/conversion.go
generated
vendored
4
vendor/k8s.io/apimachinery/pkg/runtime/conversion.go
generated
vendored
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Defines conversions between generic types and structs to map query strings
|
// Package runtime defines conversions between generic types and structs to map query strings
|
||||||
// to struct objects.
|
// to struct objects.
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/conversion"
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultFieldSelectorConversion auto-accepts metav1 values for name and namespace.
|
// DefaultMetaV1FieldSelectorConversion auto-accepts metav1 values for name and namespace.
|
||||||
// A cluster scoped resource specifying namespace empty works fine and specifying a particular
|
// A cluster scoped resource specifying namespace empty works fine and specifying a particular
|
||||||
// namespace will return no results, as expected.
|
// namespace will return no results, as expected.
|
||||||
func DefaultMetaV1FieldSelectorConversion(label, value string) (string, string, error) {
|
func DefaultMetaV1FieldSelectorConversion(label, value string) (string, string, error) {
|
||||||
|
1
vendor/k8s.io/apimachinery/pkg/runtime/doc.go
generated
vendored
1
vendor/k8s.io/apimachinery/pkg/runtime/doc.go
generated
vendored
@ -41,5 +41,4 @@ limitations under the License.
|
|||||||
//
|
//
|
||||||
// As a bonus, a few common types useful from all api objects and versions
|
// As a bonus, a few common types useful from all api objects and versions
|
||||||
// are provided in types.go.
|
// are provided in types.go.
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
28
vendor/k8s.io/apimachinery/pkg/runtime/embedded.go
generated
vendored
28
vendor/k8s.io/apimachinery/pkg/runtime/embedded.go
generated
vendored
@ -31,7 +31,7 @@ type encodable struct {
|
|||||||
|
|
||||||
func (e encodable) GetObjectKind() schema.ObjectKind { return e.obj.GetObjectKind() }
|
func (e encodable) GetObjectKind() schema.ObjectKind { return e.obj.GetObjectKind() }
|
||||||
func (e encodable) DeepCopyObject() Object {
|
func (e encodable) DeepCopyObject() Object {
|
||||||
var out encodable = e
|
out := e
|
||||||
out.obj = e.obj.DeepCopyObject()
|
out.obj = e.obj.DeepCopyObject()
|
||||||
copy(out.versions, e.versions)
|
copy(out.versions, e.versions)
|
||||||
return out
|
return out
|
||||||
@ -46,14 +46,14 @@ func NewEncodable(e Encoder, obj Object, versions ...schema.GroupVersion) Object
|
|||||||
return encodable{e, obj, versions}
|
return encodable{e, obj, versions}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (re encodable) UnmarshalJSON(in []byte) error {
|
func (e encodable) UnmarshalJSON(in []byte) error {
|
||||||
return errors.New("runtime.encodable cannot be unmarshalled from JSON")
|
return errors.New("runtime.encodable cannot be unmarshalled from JSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal may get called on pointers or values, so implement MarshalJSON on value.
|
// Marshal may get called on pointers or values, so implement MarshalJSON on value.
|
||||||
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
||||||
func (re encodable) MarshalJSON() ([]byte, error) {
|
func (e encodable) MarshalJSON() ([]byte, error) {
|
||||||
return Encode(re.E, re.obj)
|
return Encode(e.E, e.obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEncodableList creates an object that will be encoded with the provided codec on demand.
|
// NewEncodableList creates an object that will be encoded with the provided codec on demand.
|
||||||
@ -70,28 +70,28 @@ func NewEncodableList(e Encoder, objects []Object, versions ...schema.GroupVersi
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
func (re *Unknown) UnmarshalJSON(in []byte) error {
|
func (e *Unknown) UnmarshalJSON(in []byte) error {
|
||||||
if re == nil {
|
if e == nil {
|
||||||
return errors.New("runtime.Unknown: UnmarshalJSON on nil pointer")
|
return errors.New("runtime.Unknown: UnmarshalJSON on nil pointer")
|
||||||
}
|
}
|
||||||
re.TypeMeta = TypeMeta{}
|
e.TypeMeta = TypeMeta{}
|
||||||
re.Raw = append(re.Raw[0:0], in...)
|
e.Raw = append(e.Raw[0:0], in...)
|
||||||
re.ContentEncoding = ""
|
e.ContentEncoding = ""
|
||||||
re.ContentType = ContentTypeJSON
|
e.ContentType = ContentTypeJSON
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal may get called on pointers or values, so implement MarshalJSON on value.
|
// Marshal may get called on pointers or values, so implement MarshalJSON on value.
|
||||||
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
||||||
func (re Unknown) MarshalJSON() ([]byte, error) {
|
func (e Unknown) MarshalJSON() ([]byte, error) {
|
||||||
// If ContentType is unset, we assume this is JSON.
|
// If ContentType is unset, we assume this is JSON.
|
||||||
if re.ContentType != "" && re.ContentType != ContentTypeJSON {
|
if e.ContentType != "" && e.ContentType != ContentTypeJSON {
|
||||||
return nil, errors.New("runtime.Unknown: MarshalJSON on non-json data")
|
return nil, errors.New("runtime.Unknown: MarshalJSON on non-json data")
|
||||||
}
|
}
|
||||||
if re.Raw == nil {
|
if e.Raw == nil {
|
||||||
return []byte("null"), nil
|
return []byte("null"), nil
|
||||||
}
|
}
|
||||||
return re.Raw, nil
|
return e.Raw, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Convert_runtime_Object_To_runtime_RawExtension(in *Object, out *RawExtension, s conversion.Scope) error {
|
func Convert_runtime_Object_To_runtime_RawExtension(in *Object, out *RawExtension, s conversion.Scope) error {
|
||||||
|
35
vendor/k8s.io/apimachinery/pkg/runtime/error.go
generated
vendored
35
vendor/k8s.io/apimachinery/pkg/runtime/error.go
generated
vendored
@ -24,46 +24,47 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type notRegisteredErr struct {
|
type notRegisteredErr struct {
|
||||||
gvk schema.GroupVersionKind
|
schemeName string
|
||||||
target GroupVersioner
|
gvk schema.GroupVersionKind
|
||||||
t reflect.Type
|
target GroupVersioner
|
||||||
|
t reflect.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotRegisteredErrForKind(gvk schema.GroupVersionKind) error {
|
func NewNotRegisteredErrForKind(schemeName string, gvk schema.GroupVersionKind) error {
|
||||||
return ¬RegisteredErr{gvk: gvk}
|
return ¬RegisteredErr{schemeName: schemeName, gvk: gvk}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotRegisteredErrForType(t reflect.Type) error {
|
func NewNotRegisteredErrForType(schemeName string, t reflect.Type) error {
|
||||||
return ¬RegisteredErr{t: t}
|
return ¬RegisteredErr{schemeName: schemeName, t: t}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotRegisteredErrForTarget(t reflect.Type, target GroupVersioner) error {
|
func NewNotRegisteredErrForTarget(schemeName string, t reflect.Type, target GroupVersioner) error {
|
||||||
return ¬RegisteredErr{t: t, target: target}
|
return ¬RegisteredErr{schemeName: schemeName, t: t, target: target}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotRegisteredGVKErrForTarget(gvk schema.GroupVersionKind, target GroupVersioner) error {
|
func NewNotRegisteredGVKErrForTarget(schemeName string, gvk schema.GroupVersionKind, target GroupVersioner) error {
|
||||||
return ¬RegisteredErr{gvk: gvk, target: target}
|
return ¬RegisteredErr{schemeName: schemeName, gvk: gvk, target: target}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *notRegisteredErr) Error() string {
|
func (k *notRegisteredErr) Error() string {
|
||||||
if k.t != nil && k.target != nil {
|
if k.t != nil && k.target != nil {
|
||||||
return fmt.Sprintf("%v is not suitable for converting to %q", k.t, k.target)
|
return fmt.Sprintf("%v is not suitable for converting to %q in scheme %q", k.t, k.target, k.schemeName)
|
||||||
}
|
}
|
||||||
nullGVK := schema.GroupVersionKind{}
|
nullGVK := schema.GroupVersionKind{}
|
||||||
if k.gvk != nullGVK && k.target != nil {
|
if k.gvk != nullGVK && k.target != nil {
|
||||||
return fmt.Sprintf("%q is not suitable for converting to %q", k.gvk.GroupVersion(), k.target)
|
return fmt.Sprintf("%q is not suitable for converting to %q in scheme %q", k.gvk.GroupVersion(), k.target, k.schemeName)
|
||||||
}
|
}
|
||||||
if k.t != nil {
|
if k.t != nil {
|
||||||
return fmt.Sprintf("no kind is registered for the type %v", k.t)
|
return fmt.Sprintf("no kind is registered for the type %v in scheme %q", k.t, k.schemeName)
|
||||||
}
|
}
|
||||||
if len(k.gvk.Kind) == 0 {
|
if len(k.gvk.Kind) == 0 {
|
||||||
return fmt.Sprintf("no version %q has been registered", k.gvk.GroupVersion())
|
return fmt.Sprintf("no version %q has been registered in scheme %q", k.gvk.GroupVersion(), k.schemeName)
|
||||||
}
|
}
|
||||||
if k.gvk.Version == APIVersionInternal {
|
if k.gvk.Version == APIVersionInternal {
|
||||||
return fmt.Sprintf("no kind %q is registered for the internal version of group %q", k.gvk.Kind, k.gvk.Group)
|
return fmt.Sprintf("no kind %q is registered for the internal version of group %q in scheme %q", k.gvk.Kind, k.gvk.Group, k.schemeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("no kind %q is registered for version %q", k.gvk.Kind, k.gvk.GroupVersion())
|
return fmt.Sprintf("no kind %q is registered for version %q in scheme %q", k.gvk.Kind, k.gvk.GroupVersion(), k.schemeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNotRegisteredError returns true if the error indicates the provided
|
// IsNotRegisteredError returns true if the error indicates the provided
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/runtime/extension.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/runtime/extension.go
generated
vendored
@ -32,7 +32,7 @@ func (re *RawExtension) UnmarshalJSON(in []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal may get called on pointers or values, so implement MarshalJSON on value.
|
// MarshalJSON may get called on pointers or values, so implement MarshalJSON on value.
|
||||||
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
|
||||||
func (re RawExtension) MarshalJSON() ([]byte, error) {
|
func (re RawExtension) MarshalJSON() ([]byte, error) {
|
||||||
if re.Raw == nil {
|
if re.Raw == nil {
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/runtime/helper.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/runtime/helper.go
generated
vendored
@ -87,7 +87,7 @@ func Field(v reflect.Value, fieldName string, dest interface{}) error {
|
|||||||
return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), destValue.Type())
|
return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), destValue.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
// fieldPtr puts the address of fieldName, which must be a member of v,
|
// FieldPtr puts the address of fieldName, which must be a member of v,
|
||||||
// into dest, which must be an address of a variable to which this field's
|
// into dest, which must be an address of a variable to which this field's
|
||||||
// address can be assigned.
|
// address can be assigned.
|
||||||
func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error {
|
func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error {
|
||||||
|
6
vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go
generated
vendored
6
vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go
generated
vendored
@ -39,14 +39,14 @@ type GroupVersioner interface {
|
|||||||
KindForGroupVersionKinds(kinds []schema.GroupVersionKind) (target schema.GroupVersionKind, ok bool)
|
KindForGroupVersionKinds(kinds []schema.GroupVersionKind) (target schema.GroupVersionKind, ok bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encoders write objects to a serialized form
|
// Encoder writes objects to a serialized form
|
||||||
type Encoder interface {
|
type Encoder interface {
|
||||||
// Encode writes an object to a stream. Implementations may return errors if the versions are
|
// Encode writes an object to a stream. Implementations may return errors if the versions are
|
||||||
// incompatible, or if no conversion is defined.
|
// incompatible, or if no conversion is defined.
|
||||||
Encode(obj Object, w io.Writer) error
|
Encode(obj Object, w io.Writer) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decoders attempt to load an object from data.
|
// Decoder attempts to load an object from data.
|
||||||
type Decoder interface {
|
type Decoder interface {
|
||||||
// Decode attempts to deserialize the provided data using either the innate typing of the scheme or the
|
// Decode attempts to deserialize the provided data using either the innate typing of the scheme or the
|
||||||
// default kind, group, and version provided. It returns a decoded object as well as the kind, group, and
|
// default kind, group, and version provided. It returns a decoded object as well as the kind, group, and
|
||||||
@ -224,7 +224,7 @@ type SelfLinker interface {
|
|||||||
Namespace(obj Object) (string, error)
|
Namespace(obj Object) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// All API types registered with Scheme must support the Object interface. Since objects in a scheme are
|
// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
|
||||||
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
|
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
|
||||||
// serializers to set the kind, version, and group the object is represented as. An Object may choose
|
// serializers to set the kind, version, and group the object is represented as. An Object may choose
|
||||||
// to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized.
|
// to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized.
|
||||||
|
5
vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go
generated
vendored
5
vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go
generated
vendored
@ -85,11 +85,10 @@ func ParseGroupKind(gk string) GroupKind {
|
|||||||
// ParseGroupResource turns "resource.group" string into a GroupResource struct. Empty strings are allowed
|
// ParseGroupResource turns "resource.group" string into a GroupResource struct. Empty strings are allowed
|
||||||
// for each field.
|
// for each field.
|
||||||
func ParseGroupResource(gr string) GroupResource {
|
func ParseGroupResource(gr string) GroupResource {
|
||||||
if i := strings.Index(gr, "."); i == -1 {
|
if i := strings.Index(gr, "."); i >= 0 {
|
||||||
return GroupResource{Resource: gr}
|
|
||||||
} else {
|
|
||||||
return GroupResource{Group: gr[i+1:], Resource: gr[:i]}
|
return GroupResource{Group: gr[i+1:], Resource: gr[:i]}
|
||||||
}
|
}
|
||||||
|
return GroupResource{Resource: gr}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion
|
// GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion
|
||||||
|
42
vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
generated
vendored
42
vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
generated
vendored
@ -20,11 +20,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/conversion"
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/util/naming"
|
||||||
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -78,9 +79,13 @@ type Scheme struct {
|
|||||||
|
|
||||||
// observedVersions keeps track of the order we've seen versions during type registration
|
// observedVersions keeps track of the order we've seen versions during type registration
|
||||||
observedVersions []schema.GroupVersion
|
observedVersions []schema.GroupVersion
|
||||||
|
|
||||||
|
// schemeName is the name of this scheme. If you don't specify a name, the stack of the NewScheme caller will be used.
|
||||||
|
// This is useful for error reporting to indicate the origin of the scheme.
|
||||||
|
schemeName string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to convert a field selector to internal representation.
|
// FieldLabelConversionFunc converts a field selector to internal representation.
|
||||||
type FieldLabelConversionFunc func(label, value string) (internalLabel, internalValue string, err error)
|
type FieldLabelConversionFunc func(label, value string) (internalLabel, internalValue string, err error)
|
||||||
|
|
||||||
// NewScheme creates a new Scheme. This scheme is pluggable by default.
|
// NewScheme creates a new Scheme. This scheme is pluggable by default.
|
||||||
@ -93,21 +98,16 @@ func NewScheme() *Scheme {
|
|||||||
fieldLabelConversionFuncs: map[string]map[string]FieldLabelConversionFunc{},
|
fieldLabelConversionFuncs: map[string]map[string]FieldLabelConversionFunc{},
|
||||||
defaulterFuncs: map[reflect.Type]func(interface{}){},
|
defaulterFuncs: map[reflect.Type]func(interface{}){},
|
||||||
versionPriority: map[string][]string{},
|
versionPriority: map[string][]string{},
|
||||||
|
schemeName: naming.GetNameFromCallsite(internalPackages...),
|
||||||
}
|
}
|
||||||
s.converter = conversion.NewConverter(s.nameFunc)
|
s.converter = conversion.NewConverter(s.nameFunc)
|
||||||
|
|
||||||
s.AddConversionFuncs(DefaultEmbeddedConversions()...)
|
utilruntime.Must(s.AddConversionFuncs(DefaultEmbeddedConversions()...))
|
||||||
|
|
||||||
// Enable map[string][]string conversions by default
|
// Enable map[string][]string conversions by default
|
||||||
if err := s.AddConversionFuncs(DefaultStringConversions...); err != nil {
|
utilruntime.Must(s.AddConversionFuncs(DefaultStringConversions...))
|
||||||
panic(err)
|
utilruntime.Must(s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields))
|
||||||
}
|
utilruntime.Must(s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields))
|
||||||
if err := s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ func (s *Scheme) ObjectKinds(obj Object) ([]schema.GroupVersionKind, bool, error
|
|||||||
|
|
||||||
gvks, ok := s.typeToGVK[t]
|
gvks, ok := s.typeToGVK[t]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, false, NewNotRegisteredErrForType(t)
|
return nil, false, NewNotRegisteredErrForType(s.schemeName, t)
|
||||||
}
|
}
|
||||||
_, unversionedType := s.unversionedTypes[t]
|
_, unversionedType := s.unversionedTypes[t]
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ func (s *Scheme) New(kind schema.GroupVersionKind) (Object, error) {
|
|||||||
if t, exists := s.unversionedKinds[kind.Kind]; exists {
|
if t, exists := s.unversionedKinds[kind.Kind]; exists {
|
||||||
return reflect.New(t).Interface().(Object), nil
|
return reflect.New(t).Interface().(Object), nil
|
||||||
}
|
}
|
||||||
return nil, NewNotRegisteredErrForKind(kind)
|
return nil, NewNotRegisteredErrForKind(s.schemeName, kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern
|
// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern
|
||||||
@ -393,7 +393,7 @@ func (s *Scheme) RegisterInputDefaults(in interface{}, fn conversion.FieldMappin
|
|||||||
return s.converter.RegisterInputDefaults(in, fn, defaultFlags)
|
return s.converter.RegisterInputDefaults(in, fn, defaultFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddTypeDefaultingFuncs registers a function that is passed a pointer to an
|
// AddTypeDefaultingFunc registers a function that is passed a pointer to an
|
||||||
// object and can default fields on the object. These functions will be invoked
|
// object and can default fields on the object. These functions will be invoked
|
||||||
// when Default() is called. The function will never be called unless the
|
// when Default() is called. The function will never be called unless the
|
||||||
// defaulted object matches srcType. If this function is invoked twice with the
|
// defaulted object matches srcType. If this function is invoked twice with the
|
||||||
@ -541,7 +541,7 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) (
|
|||||||
|
|
||||||
kinds, ok := s.typeToGVK[t]
|
kinds, ok := s.typeToGVK[t]
|
||||||
if !ok || len(kinds) == 0 {
|
if !ok || len(kinds) == 0 {
|
||||||
return nil, NewNotRegisteredErrForType(t)
|
return nil, NewNotRegisteredErrForType(s.schemeName, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
gvk, ok := target.KindForGroupVersionKinds(kinds)
|
gvk, ok := target.KindForGroupVersionKinds(kinds)
|
||||||
@ -554,7 +554,7 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) (
|
|||||||
}
|
}
|
||||||
return copyAndSetTargetKind(copy, in, unversionedKind)
|
return copyAndSetTargetKind(copy, in, unversionedKind)
|
||||||
}
|
}
|
||||||
return nil, NewNotRegisteredErrForTarget(t, target)
|
return nil, NewNotRegisteredErrForTarget(s.schemeName, t, target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// target wants to use the existing type, set kind and return (no conversion necessary)
|
// target wants to use the existing type, set kind and return (no conversion necessary)
|
||||||
@ -764,3 +764,11 @@ func (s *Scheme) addObservedVersion(version schema.GroupVersion) {
|
|||||||
|
|
||||||
s.observedVersions = append(s.observedVersions, version)
|
s.observedVersions = append(s.observedVersions, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Scheme) Name() string {
|
||||||
|
return s.schemeName
|
||||||
|
}
|
||||||
|
|
||||||
|
// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common
|
||||||
|
// call chains to NewReflector, so they'd be low entropy names for reflectors
|
||||||
|
var internalPackages = []string{"k8s.io/apimachinery/pkg/runtime/scheme.go"}
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go
generated
vendored
@ -273,7 +273,7 @@ func (jsonFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser {
|
|||||||
return framer.NewJSONFramedReader(r)
|
return framer.NewJSONFramedReader(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Framer is the default JSON framing behavior, with newlines delimiting individual objects.
|
// YAMLFramer is the default JSON framing behavior, with newlines delimiting individual objects.
|
||||||
var YAMLFramer = yamlFramer{}
|
var YAMLFramer = yamlFramer{}
|
||||||
|
|
||||||
type yamlFramer struct{}
|
type yamlFramer struct{}
|
||||||
|
22
vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go
generated
vendored
22
vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go
generated
vendored
@ -24,18 +24,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewCodecForScheme is a convenience method for callers that are using a scheme.
|
|
||||||
func NewCodecForScheme(
|
|
||||||
// TODO: I should be a scheme interface?
|
|
||||||
scheme *runtime.Scheme,
|
|
||||||
encoder runtime.Encoder,
|
|
||||||
decoder runtime.Decoder,
|
|
||||||
encodeVersion runtime.GroupVersioner,
|
|
||||||
decodeVersion runtime.GroupVersioner,
|
|
||||||
) runtime.Codec {
|
|
||||||
return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, nil, encodeVersion, decodeVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDefaultingCodecForScheme is a convenience method for callers that are using a scheme.
|
// NewDefaultingCodecForScheme is a convenience method for callers that are using a scheme.
|
||||||
func NewDefaultingCodecForScheme(
|
func NewDefaultingCodecForScheme(
|
||||||
// TODO: I should be a scheme interface?
|
// TODO: I should be a scheme interface?
|
||||||
@ -45,7 +33,7 @@ func NewDefaultingCodecForScheme(
|
|||||||
encodeVersion runtime.GroupVersioner,
|
encodeVersion runtime.GroupVersioner,
|
||||||
decodeVersion runtime.GroupVersioner,
|
decodeVersion runtime.GroupVersioner,
|
||||||
) runtime.Codec {
|
) runtime.Codec {
|
||||||
return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion)
|
return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion, scheme.Name())
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCodec takes objects in their internal versions and converts them to external versions before
|
// NewCodec takes objects in their internal versions and converts them to external versions before
|
||||||
@ -60,6 +48,7 @@ func NewCodec(
|
|||||||
defaulter runtime.ObjectDefaulter,
|
defaulter runtime.ObjectDefaulter,
|
||||||
encodeVersion runtime.GroupVersioner,
|
encodeVersion runtime.GroupVersioner,
|
||||||
decodeVersion runtime.GroupVersioner,
|
decodeVersion runtime.GroupVersioner,
|
||||||
|
originalSchemeName string,
|
||||||
) runtime.Codec {
|
) runtime.Codec {
|
||||||
internal := &codec{
|
internal := &codec{
|
||||||
encoder: encoder,
|
encoder: encoder,
|
||||||
@ -71,6 +60,8 @@ func NewCodec(
|
|||||||
|
|
||||||
encodeVersion: encodeVersion,
|
encodeVersion: encodeVersion,
|
||||||
decodeVersion: decodeVersion,
|
decodeVersion: decodeVersion,
|
||||||
|
|
||||||
|
originalSchemeName: originalSchemeName,
|
||||||
}
|
}
|
||||||
return internal
|
return internal
|
||||||
}
|
}
|
||||||
@ -85,6 +76,9 @@ type codec struct {
|
|||||||
|
|
||||||
encodeVersion runtime.GroupVersioner
|
encodeVersion runtime.GroupVersioner
|
||||||
decodeVersion runtime.GroupVersioner
|
decodeVersion runtime.GroupVersioner
|
||||||
|
|
||||||
|
// originalSchemeName is optional, but when filled in it holds the name of the scheme from which this codec originates
|
||||||
|
originalSchemeName string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode attempts a decode of the object, then tries to convert it to the internal version. If into is provided and the decoding is
|
// Decode attempts a decode of the object, then tries to convert it to the internal version. If into is provided and the decoding is
|
||||||
@ -182,7 +176,7 @@ func (c *codec) Encode(obj runtime.Object, w io.Writer) error {
|
|||||||
}
|
}
|
||||||
targetGVK, ok := c.encodeVersion.KindForGroupVersionKinds([]schema.GroupVersionKind{objGVK})
|
targetGVK, ok := c.encodeVersion.KindForGroupVersionKinds([]schema.GroupVersionKind{objGVK})
|
||||||
if !ok {
|
if !ok {
|
||||||
return runtime.NewNotRegisteredGVKErrForTarget(objGVK, c.encodeVersion)
|
return runtime.NewNotRegisteredGVKErrForTarget(c.originalSchemeName, objGVK, c.encodeVersion)
|
||||||
}
|
}
|
||||||
if targetGVK == objGVK {
|
if targetGVK == objGVK {
|
||||||
return c.encoder.Encode(obj, w)
|
return c.encoder.Encode(obj, w)
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/util/mergepatch/util.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/util/mergepatch/util.go
generated
vendored
@ -125,7 +125,7 @@ func HasConflicts(left, right interface{}) (bool, error) {
|
|||||||
default:
|
default:
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
case string, float64, bool, int, int64, nil:
|
case string, float64, bool, int64, nil:
|
||||||
return !reflect.DeepEqual(left, right), nil
|
return !reflect.DeepEqual(left, right), nil
|
||||||
default:
|
default:
|
||||||
return true, fmt.Errorf("unknown type: %v", reflect.TypeOf(left))
|
return true, fmt.Errorf("unknown type: %v", reflect.TypeOf(left))
|
||||||
|
93
vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go
generated
vendored
Normal file
93
vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go
generated
vendored
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 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 naming
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"regexp"
|
||||||
|
goruntime "runtime"
|
||||||
|
"runtime/debug"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetNameFromCallsite walks back through the call stack until we find a caller from outside of the ignoredPackages
|
||||||
|
// it returns back a shortpath/filename:line to aid in identification of this reflector when it starts logging
|
||||||
|
func GetNameFromCallsite(ignoredPackages ...string) string {
|
||||||
|
name := "????"
|
||||||
|
const maxStack = 10
|
||||||
|
for i := 1; i < maxStack; i++ {
|
||||||
|
_, file, line, ok := goruntime.Caller(i)
|
||||||
|
if !ok {
|
||||||
|
file, line, ok = extractStackCreator()
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
i += maxStack
|
||||||
|
}
|
||||||
|
if hasPackage(file, append(ignoredPackages, "/runtime/asm_")) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
file = trimPackagePrefix(file)
|
||||||
|
name = fmt.Sprintf("%s:%d", file, line)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|
||||||
|
// hasPackage returns true if the file is in one of the ignored packages.
|
||||||
|
func hasPackage(file string, ignoredPackages []string) bool {
|
||||||
|
for _, ignoredPackage := range ignoredPackages {
|
||||||
|
if strings.Contains(file, ignoredPackage) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// trimPackagePrefix reduces duplicate values off the front of a package name.
|
||||||
|
func trimPackagePrefix(file string) string {
|
||||||
|
if l := strings.LastIndex(file, "/vendor/"); l >= 0 {
|
||||||
|
return file[l+len("/vendor/"):]
|
||||||
|
}
|
||||||
|
if l := strings.LastIndex(file, "/src/"); l >= 0 {
|
||||||
|
return file[l+5:]
|
||||||
|
}
|
||||||
|
if l := strings.LastIndex(file, "/pkg/"); l >= 0 {
|
||||||
|
return file[l+1:]
|
||||||
|
}
|
||||||
|
return file
|
||||||
|
}
|
||||||
|
|
||||||
|
var stackCreator = regexp.MustCompile(`(?m)^created by (.*)\n\s+(.*):(\d+) \+0x[[:xdigit:]]+$`)
|
||||||
|
|
||||||
|
// extractStackCreator retrieves the goroutine file and line that launched this stack. Returns false
|
||||||
|
// if the creator cannot be located.
|
||||||
|
// TODO: Go does not expose this via runtime https://github.com/golang/go/issues/11440
|
||||||
|
func extractStackCreator() (string, int, bool) {
|
||||||
|
stack := debug.Stack()
|
||||||
|
matches := stackCreator.FindStringSubmatch(string(stack))
|
||||||
|
if matches == nil || len(matches) != 4 {
|
||||||
|
return "", 0, false
|
||||||
|
}
|
||||||
|
line, err := strconv.Atoi(matches[3])
|
||||||
|
if err != nil {
|
||||||
|
return "", 0, false
|
||||||
|
}
|
||||||
|
return matches[2], line, true
|
||||||
|
}
|
6
vendor/k8s.io/apimachinery/pkg/util/net/http.go
generated
vendored
6
vendor/k8s.io/apimachinery/pkg/util/net/http.go
generated
vendored
@ -179,10 +179,8 @@ func FormatURL(scheme string, host string, port int, path string) *url.URL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetHTTPClient(req *http.Request) string {
|
func GetHTTPClient(req *http.Request) string {
|
||||||
if userAgent, ok := req.Header["User-Agent"]; ok {
|
if ua := req.UserAgent(); len(ua) != 0 {
|
||||||
if len(userAgent) > 0 {
|
return ua
|
||||||
return userAgent[0]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
1
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS
generated
vendored
1
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/OWNERS
generated
vendored
@ -1,5 +1,6 @@
|
|||||||
approvers:
|
approvers:
|
||||||
- pwittrock
|
- pwittrock
|
||||||
|
- mengqiy
|
||||||
reviewers:
|
reviewers:
|
||||||
- mengqiy
|
- mengqiy
|
||||||
- apelisse
|
- apelisse
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go
generated
vendored
@ -1876,7 +1876,7 @@ func mergingMapFieldsHaveConflicts(
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
return slicesHaveConflicts(leftType, rightType, schema, fieldPatchStrategy, fieldPatchMergeKey)
|
return slicesHaveConflicts(leftType, rightType, schema, fieldPatchStrategy, fieldPatchMergeKey)
|
||||||
case string, float64, bool, int, int64, nil:
|
case string, float64, bool, int64, nil:
|
||||||
return !reflect.DeepEqual(left, right), nil
|
return !reflect.DeepEqual(left, right), nil
|
||||||
default:
|
default:
|
||||||
return true, fmt.Errorf("unknown type: %v", reflect.TypeOf(left))
|
return true, fmt.Errorf("unknown type: %v", reflect.TypeOf(left))
|
||||||
|
19
vendor/k8s.io/client-go/discovery/doc.go
generated
vendored
Normal file
19
vendor/k8s.io/client-go/discovery/doc.go
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 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 discovery provides ways to discover server-supported
|
||||||
|
// API groups, versions and resources.
|
||||||
|
package discovery
|
1
vendor/k8s.io/client-go/discovery/round_tripper.go
generated
vendored
1
vendor/k8s.io/client-go/discovery/round_tripper.go
generated
vendored
@ -14,7 +14,6 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Package transport provides a round tripper capable of caching HTTP responses.
|
|
||||||
package discovery
|
package discovery
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
81
vendor/k8s.io/client-go/discovery/unstructured.go
generated
vendored
81
vendor/k8s.io/client-go/discovery/unstructured.go
generated
vendored
@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2016 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 discovery
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
)
|
|
||||||
|
|
||||||
// UnstructuredObjectTyper provides a runtime.ObjectTyper implementation for
|
|
||||||
// runtime.Unstructured object based on discovery information.
|
|
||||||
type UnstructuredObjectTyper struct {
|
|
||||||
typers []runtime.ObjectTyper
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewUnstructuredObjectTyper returns a runtime.ObjectTyper for
|
|
||||||
// unstructured objects based on discovery information. It accepts a list of fallback typers
|
|
||||||
// for handling objects that are not runtime.Unstructured. It does not delegate the Recognizes
|
|
||||||
// check, only ObjectKinds.
|
|
||||||
// TODO this only works for the apiextensions server and doesn't recognize any types. Move to point of use.
|
|
||||||
func NewUnstructuredObjectTyper(typers ...runtime.ObjectTyper) *UnstructuredObjectTyper {
|
|
||||||
dot := &UnstructuredObjectTyper{
|
|
||||||
typers: typers,
|
|
||||||
}
|
|
||||||
return dot
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
|
||||||
// has no group,version,kind information. unversionedType will always be false
|
|
||||||
// because runtime.Unstructured object should always have group,version,kind
|
|
||||||
// information set.
|
|
||||||
func (d *UnstructuredObjectTyper) ObjectKinds(obj runtime.Object) (gvks []schema.GroupVersionKind, unversionedType bool, err error) {
|
|
||||||
if _, ok := obj.(runtime.Unstructured); ok {
|
|
||||||
gvk := obj.GetObjectKind().GroupVersionKind()
|
|
||||||
if len(gvk.Kind) == 0 {
|
|
||||||
return nil, false, runtime.NewMissingKindErr("object has no kind field ")
|
|
||||||
}
|
|
||||||
if len(gvk.Version) == 0 {
|
|
||||||
return nil, false, runtime.NewMissingVersionErr("object has no apiVersion field")
|
|
||||||
}
|
|
||||||
return []schema.GroupVersionKind{gvk}, false, nil
|
|
||||||
}
|
|
||||||
var lastErr error
|
|
||||||
for _, typer := range d.typers {
|
|
||||||
gvks, unversioned, err := typer.ObjectKinds(obj)
|
|
||||||
if err != nil {
|
|
||||||
lastErr = err
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return gvks, unversioned, nil
|
|
||||||
}
|
|
||||||
if lastErr == nil {
|
|
||||||
lastErr = runtime.NewNotRegisteredErrForType(reflect.TypeOf(obj))
|
|
||||||
}
|
|
||||||
return nil, false, lastErr
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recognizes returns true if the provided group,version,kind was in the
|
|
||||||
// discovery information.
|
|
||||||
func (d *UnstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ runtime.ObjectTyper = &UnstructuredObjectTyper{}
|
|
7
vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go
generated
vendored
7
vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go
generated
vendored
@ -36,6 +36,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/client-go/pkg/apis/clientauthentication"
|
"k8s.io/client-go/pkg/apis/clientauthentication"
|
||||||
"k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1"
|
"k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1"
|
||||||
"k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
|
"k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
|
||||||
@ -51,9 +52,9 @@ var codecs = serializer.NewCodecFactory(scheme)
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
|
v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
|
||||||
v1alpha1.AddToScheme(scheme)
|
utilruntime.Must(v1alpha1.AddToScheme(scheme))
|
||||||
v1beta1.AddToScheme(scheme)
|
utilruntime.Must(v1beta1.AddToScheme(scheme))
|
||||||
clientauthentication.AddToScheme(scheme)
|
utilruntime.Must(clientauthentication.AddToScheme(scheme))
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
2
vendor/k8s.io/client-go/rest/request.go
generated
vendored
2
vendor/k8s.io/client-go/rest/request.go
generated
vendored
@ -731,7 +731,7 @@ func (r *Request) request(fn func(*http.Request, *http.Response)) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(4).Infof("Got a Retry-After %s response for attempt %d to %v", seconds, retries, url)
|
glog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", seconds, retries, url)
|
||||||
r.backoffMgr.Sleep(time.Duration(seconds) * time.Second)
|
r.backoffMgr.Sleep(time.Duration(seconds) * time.Second)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
75
vendor/k8s.io/client-go/tools/cache/reflector.go
generated
vendored
75
vendor/k8s.io/client-go/tools/cache/reflector.go
generated
vendored
@ -24,9 +24,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
|
||||||
goruntime "runtime"
|
|
||||||
"runtime/debug"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@ -40,6 +37,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/clock"
|
"k8s.io/apimachinery/pkg/util/clock"
|
||||||
|
"k8s.io/apimachinery/pkg/util/naming"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
@ -94,7 +92,7 @@ func NewNamespaceKeyedIndexerAndReflector(lw ListerWatcher, expectedType interfa
|
|||||||
// resyncPeriod, so that you can use reflectors to periodically process everything as
|
// resyncPeriod, so that you can use reflectors to periodically process everything as
|
||||||
// well as incrementally processing the things that change.
|
// well as incrementally processing the things that change.
|
||||||
func NewReflector(lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
|
func NewReflector(lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
|
||||||
return NewNamedReflector(getDefaultReflectorName(internalPackages...), lw, expectedType, store, resyncPeriod)
|
return NewNamedReflector(naming.GetNameFromCallsite(internalPackages...), lw, expectedType, store, resyncPeriod)
|
||||||
}
|
}
|
||||||
|
|
||||||
// reflectorDisambiguator is used to disambiguate started reflectors.
|
// reflectorDisambiguator is used to disambiguate started reflectors.
|
||||||
@ -125,74 +123,7 @@ func makeValidPrometheusMetricLabel(in string) string {
|
|||||||
|
|
||||||
// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common
|
// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common
|
||||||
// call chains to NewReflector, so they'd be low entropy names for reflectors
|
// call chains to NewReflector, so they'd be low entropy names for reflectors
|
||||||
var internalPackages = []string{"client-go/tools/cache/", "/runtime/asm_"}
|
var internalPackages = []string{"client-go/tools/cache/"}
|
||||||
|
|
||||||
// getDefaultReflectorName walks back through the call stack until we find a caller from outside of the ignoredPackages
|
|
||||||
// it returns back a shortpath/filename:line to aid in identification of this reflector when it starts logging
|
|
||||||
func getDefaultReflectorName(ignoredPackages ...string) string {
|
|
||||||
name := "????"
|
|
||||||
const maxStack = 10
|
|
||||||
for i := 1; i < maxStack; i++ {
|
|
||||||
_, file, line, ok := goruntime.Caller(i)
|
|
||||||
if !ok {
|
|
||||||
file, line, ok = extractStackCreator()
|
|
||||||
if !ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
i += maxStack
|
|
||||||
}
|
|
||||||
if hasPackage(file, ignoredPackages) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
file = trimPackagePrefix(file)
|
|
||||||
name = fmt.Sprintf("%s:%d", file, line)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
|
|
||||||
// hasPackage returns true if the file is in one of the ignored packages.
|
|
||||||
func hasPackage(file string, ignoredPackages []string) bool {
|
|
||||||
for _, ignoredPackage := range ignoredPackages {
|
|
||||||
if strings.Contains(file, ignoredPackage) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// trimPackagePrefix reduces duplicate values off the front of a package name.
|
|
||||||
func trimPackagePrefix(file string) string {
|
|
||||||
if l := strings.LastIndex(file, "k8s.io/client-go/pkg/"); l >= 0 {
|
|
||||||
return file[l+len("k8s.io/client-go/"):]
|
|
||||||
}
|
|
||||||
if l := strings.LastIndex(file, "/src/"); l >= 0 {
|
|
||||||
return file[l+5:]
|
|
||||||
}
|
|
||||||
if l := strings.LastIndex(file, "/pkg/"); l >= 0 {
|
|
||||||
return file[l+1:]
|
|
||||||
}
|
|
||||||
return file
|
|
||||||
}
|
|
||||||
|
|
||||||
var stackCreator = regexp.MustCompile(`(?m)^created by (.*)\n\s+(.*):(\d+) \+0x[[:xdigit:]]+$`)
|
|
||||||
|
|
||||||
// extractStackCreator retrieves the goroutine file and line that launched this stack. Returns false
|
|
||||||
// if the creator cannot be located.
|
|
||||||
// TODO: Go does not expose this via runtime https://github.com/golang/go/issues/11440
|
|
||||||
func extractStackCreator() (string, int, bool) {
|
|
||||||
stack := debug.Stack()
|
|
||||||
matches := stackCreator.FindStringSubmatch(string(stack))
|
|
||||||
if matches == nil || len(matches) != 4 {
|
|
||||||
return "", 0, false
|
|
||||||
}
|
|
||||||
line, err := strconv.Atoi(matches[3])
|
|
||||||
if err != nil {
|
|
||||||
return "", 0, false
|
|
||||||
}
|
|
||||||
return matches[2], line, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run starts a watch and handles watch events. Will restart the watch if it is closed.
|
// Run starts a watch and handles watch events. Will restart the watch if it is closed.
|
||||||
// Run will exit when stopCh is closed.
|
// Run will exit when stopCh is closed.
|
||||||
|
11
vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go
generated
vendored
11
vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go
generated
vendored
@ -21,6 +21,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer/json"
|
"k8s.io/apimachinery/pkg/runtime/serializer/json"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer/versioning"
|
"k8s.io/apimachinery/pkg/runtime/serializer/versioning"
|
||||||
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/client-go/tools/clientcmd/api"
|
"k8s.io/client-go/tools/clientcmd/api"
|
||||||
"k8s.io/client-go/tools/clientcmd/api/v1"
|
"k8s.io/client-go/tools/clientcmd/api/v1"
|
||||||
)
|
)
|
||||||
@ -47,14 +48,8 @@ var (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Scheme = runtime.NewScheme()
|
Scheme = runtime.NewScheme()
|
||||||
if err := api.AddToScheme(Scheme); err != nil {
|
utilruntime.Must(api.AddToScheme(Scheme))
|
||||||
// Programmer error, detect immediately
|
utilruntime.Must(v1.AddToScheme(Scheme))
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := v1.AddToScheme(Scheme); err != nil {
|
|
||||||
// Programmer error, detect immediately
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme)
|
yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme)
|
||||||
Codec = versioning.NewDefaultingCodecForScheme(
|
Codec = versioning.NewDefaultingCodecForScheme(
|
||||||
Scheme,
|
Scheme,
|
||||||
|
20
vendor/k8s.io/code-generator/Godeps/Godeps.json
generated
vendored
20
vendor/k8s.io/code-generator/Godeps/Godeps.json
generated
vendored
@ -220,43 +220,43 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/args",
|
"ImportPath": "k8s.io/gengo/args",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators",
|
"ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators",
|
"ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/examples/import-boss/generators",
|
"ImportPath": "k8s.io/gengo/examples/import-boss/generators",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/examples/set-gen/generators",
|
"ImportPath": "k8s.io/gengo/examples/set-gen/generators",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/examples/set-gen/sets",
|
"ImportPath": "k8s.io/gengo/examples/set-gen/sets",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/generator",
|
"ImportPath": "k8s.io/gengo/generator",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/namer",
|
"ImportPath": "k8s.io/gengo/namer",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/parser",
|
"ImportPath": "k8s.io/gengo/parser",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/gengo/types",
|
"ImportPath": "k8s.io/gengo/types",
|
||||||
"Rev": "5b57d243f2ca39dbbda758ee07b76b4d519f6dc7"
|
"Rev": "fdcf9f9480fdd5bf2b3c3df9bf4ecd22b25b87e2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/common",
|
"ImportPath": "k8s.io/kube-openapi/pkg/common",
|
||||||
|
1
vendor/k8s.io/code-generator/vendor/k8s.io/gengo/generator/import_tracker.go
generated
vendored
1
vendor/k8s.io/code-generator/vendor/k8s.io/gengo/generator/import_tracker.go
generated
vendored
@ -49,6 +49,7 @@ func golangTrackerLocalName(tracker namer.ImportTracker, t types.Name) string {
|
|||||||
for n := len(dirs) - 1; n >= 0; n-- {
|
for n := len(dirs) - 1; n >= 0; n-- {
|
||||||
// follow kube convention of not having anything between directory names
|
// follow kube convention of not having anything between directory names
|
||||||
name := strings.Join(dirs[n:], "")
|
name := strings.Join(dirs[n:], "")
|
||||||
|
name = strings.Replace(name, "_", "", -1)
|
||||||
// These characters commonly appear in import paths for go
|
// These characters commonly appear in import paths for go
|
||||||
// packages, but aren't legal go names. So we'll sanitize.
|
// packages, but aren't legal go names. So we'll sanitize.
|
||||||
name = strings.Replace(name, ".", "", -1)
|
name = strings.Replace(name, ".", "", -1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user