mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 04:27:54 +00:00
convert multiple return values into a struct, add SelfLinker
This commit is contained in:
parent
75b93cf7e9
commit
b972f72248
@ -49,16 +49,36 @@ var Codec = v1beta1.Codec
|
|||||||
// TODO: when versioning changes, make this part of each API definition.
|
// TODO: when versioning changes, make this part of each API definition.
|
||||||
var ResourceVersioner = runtime.NewJSONBaseResourceVersioner()
|
var ResourceVersioner = runtime.NewJSONBaseResourceVersioner()
|
||||||
|
|
||||||
|
// SelfLinker can set or get the SelfLink field of all API types.
|
||||||
|
// TODO: when versioning changes, make this part of each API definition.
|
||||||
|
// TODO(lavalamp): Combine SelfLinker & ResourceVersioner interfaces, force all uses
|
||||||
|
// to go through the InterfacesFor method below.
|
||||||
|
var SelfLinker = runtime.NewJSONBaseSelfLinker()
|
||||||
|
|
||||||
|
// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version.
|
||||||
|
type VersionInterfaces struct {
|
||||||
|
runtime.Codec
|
||||||
|
runtime.ResourceVersioner
|
||||||
|
runtime.SelfLinker
|
||||||
|
}
|
||||||
|
|
||||||
// InterfacesFor returns the default Codec and ResourceVersioner for a given version
|
// InterfacesFor returns the default Codec and ResourceVersioner for a given version
|
||||||
// string, or an error if the version is not known.
|
// string, or an error if the version is not known.
|
||||||
func InterfacesFor(version string) (codec runtime.Codec, versioner runtime.ResourceVersioner, err error) {
|
func InterfacesFor(version string) (*VersionInterfaces, error) {
|
||||||
switch version {
|
switch version {
|
||||||
case "v1beta1":
|
case "v1beta1":
|
||||||
codec, versioner = v1beta1.Codec, ResourceVersioner
|
return &VersionInterfaces{
|
||||||
|
Codec: v1beta1.Codec,
|
||||||
|
ResourceVersioner: ResourceVersioner,
|
||||||
|
SelfLinker: SelfLinker,
|
||||||
|
}, nil
|
||||||
case "v1beta2":
|
case "v1beta2":
|
||||||
codec, versioner = v1beta2.Codec, ResourceVersioner
|
return &VersionInterfaces{
|
||||||
|
Codec: v1beta2.Codec,
|
||||||
|
ResourceVersioner: ResourceVersioner,
|
||||||
|
SelfLinker: SelfLinker,
|
||||||
|
}, nil
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("unsupported storage version: %s (valid: %s)", version, strings.Join(Versions, ", "))
|
return nil, fmt.Errorf("unsupported storage version: %s (valid: %s)", version, strings.Join(Versions, ", "))
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
@ -146,11 +146,11 @@ func TestCodec(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestInterfacesFor(t *testing.T) {
|
func TestInterfacesFor(t *testing.T) {
|
||||||
if _, _, err := InterfacesFor(""); err == nil {
|
if _, err := InterfacesFor(""); err == nil {
|
||||||
t.Fatalf("unexpected non-error: %v", err)
|
t.Fatalf("unexpected non-error: %v", err)
|
||||||
}
|
}
|
||||||
for i, version := range append([]string{Version, OldestVersion}, Versions...) {
|
for i, version := range append([]string{Version, OldestVersion}, Versions...) {
|
||||||
if codec, versioner, err := InterfacesFor(version); err != nil || codec == nil || versioner == nil {
|
if vi, err := InterfacesFor(version); err != nil || vi == nil {
|
||||||
t.Fatalf("%d: unexpected result: %v", i, err)
|
t.Fatalf("%d: unexpected result: %v", i, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,12 +108,12 @@ func New(host, version string, auth *AuthInfo) (*Client, error) {
|
|||||||
// TODO: implement version negotation (highest version supported by server)
|
// TODO: implement version negotation (highest version supported by server)
|
||||||
version = latest.Version
|
version = latest.Version
|
||||||
}
|
}
|
||||||
serverCodec, _, err := latest.InterfacesFor(version)
|
versionInterfaces, err := latest.InterfacesFor(version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("API version '%s' is not recognized (valid values: %s)", version, strings.Join(latest.Versions, ", "))
|
return nil, fmt.Errorf("API version '%s' is not recognized (valid values: %s)", version, strings.Join(latest.Versions, ", "))
|
||||||
}
|
}
|
||||||
prefix := fmt.Sprintf("/api/%s/", version)
|
prefix := fmt.Sprintf("/api/%s/", version)
|
||||||
restClient, err := NewRESTClient(host, auth, prefix, serverCodec)
|
restClient, err := NewRESTClient(host, auth, prefix, versionInterfaces.Codec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("API URL '%s' is not valid: %v", host, err)
|
return nil, fmt.Errorf("API URL '%s' is not valid: %v", host, err)
|
||||||
}
|
}
|
||||||
|
@ -73,11 +73,11 @@ func NewEtcdHelper(etcdServers []string, version string) (helper tools.EtcdHelpe
|
|||||||
if version == "" {
|
if version == "" {
|
||||||
version = latest.Version
|
version = latest.Version
|
||||||
}
|
}
|
||||||
codec, versioner, err := latest.InterfacesFor(version)
|
versionInterfaces, err := latest.InterfacesFor(version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return helper, err
|
return helper, err
|
||||||
}
|
}
|
||||||
return tools.EtcdHelper{client, codec, versioner}, nil
|
return tools.EtcdHelper{client, versionInterfaces.Codec, versionInterfaces.ResourceVersioner}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a new instance of Master connected to the given etcd server.
|
// New returns a new instance of Master connected to the given etcd server.
|
||||||
|
Loading…
Reference in New Issue
Block a user