make register.GroupVersion use GroupVersion

This commit is contained in:
deads2k 2015-11-16 11:42:09 -05:00
parent 4fd6b6df06
commit 5077e9b644
13 changed files with 99 additions and 78 deletions

View File

@ -30,7 +30,6 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
apiutil "k8s.io/kubernetes/pkg/api/util"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
) )
@ -52,16 +51,16 @@ func init() {
registeredGroupVersions := registered.GroupVersionsForGroup("") registeredGroupVersions := registered.GroupVersionsForGroup("")
groupVersion := registeredGroupVersions[0] groupVersion := registeredGroupVersions[0]
*groupMeta = latest.GroupMeta{ *groupMeta = latest.GroupMeta{
GroupVersion: groupVersion, GroupVersion: groupVersion.String(),
Group: apiutil.GetGroup(groupVersion), Group: groupVersion.Group,
Version: apiutil.GetVersion(groupVersion), Version: groupVersion.Version,
Codec: runtime.CodecFor(api.Scheme, groupVersion), Codec: runtime.CodecFor(api.Scheme, groupVersion.String()),
} }
var versions []string var versions []string
var groupVersions []string var groupVersions []string
for i := len(registeredGroupVersions) - 1; i >= 0; i-- { for i := len(registeredGroupVersions) - 1; i >= 0; i-- {
versions = append(versions, apiutil.GetVersion(registeredGroupVersions[i])) versions = append(versions, registeredGroupVersions[i].Version)
groupVersions = append(groupVersions, registeredGroupVersions[i]) groupVersions = append(groupVersions, registeredGroupVersions[i].String())
} }
groupMeta.Versions = versions groupMeta.Versions = versions
groupMeta.GroupVersions = groupVersions groupMeta.GroupVersions = groupVersions

View File

@ -22,46 +22,60 @@ import (
"strings" "strings"
"github.com/golang/glog" "github.com/golang/glog"
apiutil "k8s.io/kubernetes/pkg/api/util" "k8s.io/kubernetes/pkg/api/unversioned"
) )
// List of registered API versions. // List of registered API versions.
// The list is in the order of most preferred to the least. // The list is in the order of most preferred to the least.
var RegisteredVersions []string var RegisteredGroupVersions []unversioned.GroupVersion
func init() { func init() {
validGroupVersions := map[string]bool{ validGroupVersions := map[unversioned.GroupVersion]bool{
"v1": true, unversioned.GroupVersion{Group: "", Version: "v1"}: true,
"extensions/v1beta1": true, unversioned.GroupVersion{Group: "extensions", Version: "v1beta1"}: true,
"componentconfig/v1alpha1": true, unversioned.GroupVersion{Group: "componentconfig", Version: "v1alpha1"}: true,
"metrics/v1alpha1": true, unversioned.GroupVersion{Group: "metrics", Version: "v1alpha1"}: true,
} }
// The default list of supported api versions, in order of most preferred to the least. // The default list of supported api versions, in order of most preferred to the least.
defaultSupportedVersions := "v1,extensions/v1beta1,componentconfig/v1alpha1" supportedVersions := []unversioned.GroupVersion{
{Group: "", Version: "v1"},
{Group: "extensions", Version: "v1beta1"},
{Group: "componentconfig", Version: "v1alpha1"},
}
// Env var KUBE_API_VERSIONS is a comma separated list of API versions that should be registered in the scheme. // Env var KUBE_API_VERSIONS is a comma separated list of API versions that should be registered in the scheme.
// The versions should be in the order of most preferred to the least. // The versions should be in the order of most preferred to the least.
supportedVersions := os.Getenv("KUBE_API_VERSIONS") userRequestedVersions := os.Getenv("KUBE_API_VERSIONS")
if supportedVersions == "" { if len(userRequestedVersions) != 0 {
supportedVersions = defaultSupportedVersions // reset the supported versions
supportedVersions = []unversioned.GroupVersion{}
for _, version := range strings.Split(userRequestedVersions, ",") {
gv, err := unversioned.ParseGroupVersion(version)
if err != nil {
glog.Fatalf("invalid api version: %s in KUBE_API_VERSIONS: %s. List of valid API versions: %v",
version, os.Getenv("KUBE_API_VERSIONS"), validGroupVersions)
} }
versions := strings.Split(supportedVersions, ",")
for _, version := range versions {
// Verify that the version is valid. // Verify that the version is valid.
valid, ok := validGroupVersions[version] valid, ok := validGroupVersions[gv]
if !ok || !valid { if !ok || !valid {
// Not a valid API version. // Not a valid API version.
glog.Fatalf("invalid api version: %s in KUBE_API_VERSIONS: %s. List of valid API versions: %v", glog.Fatalf("invalid api version: %s in KUBE_API_VERSIONS: %s. List of valid API versions: %v",
version, os.Getenv("KUBE_API_VERSIONS"), validGroupVersions) version, os.Getenv("KUBE_API_VERSIONS"), validGroupVersions)
} }
RegisteredVersions = append(RegisteredVersions, version)
supportedVersions = append(supportedVersions, gv)
} }
}
RegisteredGroupVersions = supportedVersions
} }
// Returns true if the given api version is one of the registered api versions. // Returns true if the given api version is one of the registered api versions.
func IsRegisteredAPIVersion(version string) bool { func IsRegisteredAPIGroupVersion(gv unversioned.GroupVersion) bool {
for _, apiVersion := range RegisteredVersions { for _, currGV := range RegisteredGroupVersions {
if apiVersion == version { if currGV == gv {
return true return true
} }
} }
@ -70,10 +84,10 @@ func IsRegisteredAPIVersion(version string) bool {
// GroupVersionsForGroup returns the registered versions of a group in the form // GroupVersionsForGroup returns the registered versions of a group in the form
// of "group/version". // of "group/version".
func GroupVersionsForGroup(group string) []string { func GroupVersionsForGroup(group string) []unversioned.GroupVersion {
ret := []string{} ret := []unversioned.GroupVersion{}
for _, v := range RegisteredVersions { for _, v := range RegisteredGroupVersions {
if apiutil.GetGroup(v) == group { if v.Group == group {
ret = append(ret, v) ret = append(ret, v)
} }
} }

View File

@ -284,9 +284,9 @@ func FuzzerFor(t *testing.T, version string, src rand.Source) *fuzz.Fuzzer {
ev.ValueFrom = &api.EnvVarSource{} ev.ValueFrom = &api.EnvVarSource{}
ev.ValueFrom.FieldRef = &api.ObjectFieldSelector{} ev.ValueFrom.FieldRef = &api.ObjectFieldSelector{}
versions := registered.RegisteredVersions versions := registered.RegisteredGroupVersions
ev.ValueFrom.FieldRef.APIVersion = versions[c.Rand.Intn(len(versions))] ev.ValueFrom.FieldRef.APIVersion = versions[c.Rand.Intn(len(versions))].String()
ev.ValueFrom.FieldRef.FieldPath = c.RandString() ev.ValueFrom.FieldRef.FieldPath = c.RandString()
} }
}, },

View File

@ -28,7 +28,7 @@ var Codec = runtime.CodecFor(api.Scheme, "v1")
func init() { func init() {
// Check if v1 is in the list of supported API versions. // Check if v1 is in the list of supported API versions.
if !registered.IsRegisteredAPIVersion("v1") { if !registered.IsRegisteredAPIGroupVersion(unversioned.GroupVersion{Group: "", Version: "v1"}) {
return return
} }

View File

@ -28,7 +28,6 @@ import (
"k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
apiutil "k8s.io/kubernetes/pkg/api/util"
_ "k8s.io/kubernetes/pkg/apis/componentconfig" _ "k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1" "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
@ -48,16 +47,16 @@ func init() {
registeredGroupVersions := registered.GroupVersionsForGroup("componentconfig") registeredGroupVersions := registered.GroupVersionsForGroup("componentconfig")
groupVersion := registeredGroupVersions[0] groupVersion := registeredGroupVersions[0]
*groupMeta = latest.GroupMeta{ *groupMeta = latest.GroupMeta{
GroupVersion: groupVersion, GroupVersion: groupVersion.String(),
Group: apiutil.GetGroup(groupVersion), Group: groupVersion.Group,
Version: apiutil.GetVersion(groupVersion), Version: groupVersion.Version,
Codec: runtime.CodecFor(api.Scheme, groupVersion), Codec: runtime.CodecFor(api.Scheme, groupVersion.String()),
} }
var versions []string var versions []string
var groupVersions []string var groupVersions []string
for i := len(registeredGroupVersions) - 1; i >= 0; i-- { for i := len(registeredGroupVersions) - 1; i >= 0; i-- {
versions = append(versions, apiutil.GetVersion(registeredGroupVersions[i])) versions = append(versions, registeredGroupVersions[i].Version)
groupVersions = append(groupVersions, registeredGroupVersions[i]) groupVersions = append(groupVersions, registeredGroupVersions[i].String())
} }
groupMeta.Versions = versions groupMeta.Versions = versions
groupMeta.GroupVersions = groupVersions groupMeta.GroupVersions = groupVersions

View File

@ -28,7 +28,6 @@ import (
"k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
apiutil "k8s.io/kubernetes/pkg/api/util"
_ "k8s.io/kubernetes/pkg/apis/extensions" _ "k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
@ -48,16 +47,16 @@ func init() {
registeredGroupVersions := registered.GroupVersionsForGroup("extensions") registeredGroupVersions := registered.GroupVersionsForGroup("extensions")
groupVersion := registeredGroupVersions[0] groupVersion := registeredGroupVersions[0]
*groupMeta = latest.GroupMeta{ *groupMeta = latest.GroupMeta{
GroupVersion: groupVersion, GroupVersion: groupVersion.String(),
Group: apiutil.GetGroup(groupVersion), Group: groupVersion.Group,
Version: apiutil.GetVersion(groupVersion), Version: groupVersion.Version,
Codec: runtime.CodecFor(api.Scheme, groupVersion), Codec: runtime.CodecFor(api.Scheme, groupVersion.String()),
} }
var versions []string var versions []string
var groupVersions []string var groupVersions []string
for i := len(registeredGroupVersions) - 1; i >= 0; i-- { for i := len(registeredGroupVersions) - 1; i >= 0; i-- {
versions = append(versions, apiutil.GetVersion(registeredGroupVersions[i])) versions = append(versions, registeredGroupVersions[i].Version)
groupVersions = append(groupVersions, registeredGroupVersions[i]) groupVersions = append(groupVersions, registeredGroupVersions[i].String())
} }
groupMeta.Versions = versions groupMeta.Versions = versions
groupMeta.GroupVersions = groupVersions groupMeta.GroupVersions = groupVersions

View File

@ -28,7 +28,6 @@ import (
"k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
apiutil "k8s.io/kubernetes/pkg/api/util"
_ "k8s.io/kubernetes/pkg/apis/metrics" _ "k8s.io/kubernetes/pkg/apis/metrics"
"k8s.io/kubernetes/pkg/apis/metrics/v1alpha1" "k8s.io/kubernetes/pkg/apis/metrics/v1alpha1"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
@ -48,16 +47,16 @@ func init() {
registeredGroupVersions := registered.GroupVersionsForGroup("metrics") registeredGroupVersions := registered.GroupVersionsForGroup("metrics")
groupVersion := registeredGroupVersions[0] groupVersion := registeredGroupVersions[0]
*groupMeta = latest.GroupMeta{ *groupMeta = latest.GroupMeta{
GroupVersion: groupVersion, GroupVersion: groupVersion.String(),
Group: apiutil.GetGroup(groupVersion), Group: groupVersion.Group,
Version: apiutil.GetVersion(groupVersion), Version: groupVersion.Version,
Codec: runtime.CodecFor(api.Scheme, groupVersion), Codec: runtime.CodecFor(api.Scheme, groupVersion.String()),
} }
var versions []string var versions []string
var groupVersions []string var groupVersions []string
for i := len(registeredGroupVersions) - 1; i >= 0; i-- { for i := len(registeredGroupVersions) - 1; i >= 0; i-- {
versions = append(versions, apiutil.GetVersion(registeredGroupVersions[i])) versions = append(versions, registeredGroupVersions[i].Version)
groupVersions = append(groupVersions, registeredGroupVersions[i]) groupVersions = append(groupVersions, registeredGroupVersions[i].String())
} }
groupMeta.Versions = versions groupMeta.Versions = versions
groupMeta.GroupVersions = groupVersions groupMeta.GroupVersions = groupVersions

View File

@ -294,7 +294,11 @@ func (c *Fake) ServerAPIVersions() (*unversioned.APIVersions, error) {
action.Resource = "apiversions" action.Resource = "apiversions"
c.Invokes(action, nil) c.Invokes(action, nil)
return &unversioned.APIVersions{Versions: registered.RegisteredVersions}, nil gvStrings := []string{}
for _, gv := range registered.RegisteredGroupVersions {
gvStrings = append(gvStrings, gv.String())
}
return &unversioned.APIVersions{Versions: gvStrings}, nil
} }
func (c *Fake) ComponentStatuses() client.ComponentStatusInterface { func (c *Fake) ComponentStatuses() client.ComponentStatusInterface {

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/resource"
@ -95,7 +96,11 @@ type ConvertOptions struct {
// Complete collects information required to run Convert command from command line. // Complete collects information required to run Convert command from command line.
func (o *ConvertOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) { func (o *ConvertOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) {
o.outputVersion = cmdutil.OutputVersion(cmd, latest.GroupOrDie("").Version) o.outputVersion = cmdutil.OutputVersion(cmd, latest.GroupOrDie("").Version)
if !registered.IsRegisteredAPIVersion(o.outputVersion) { outputGV, err := unversioned.ParseGroupVersion(o.outputVersion)
if err != nil {
return fmt.Errorf("unable to parse group/version from %q: %v", o.outputVersion, err)
}
if !registered.IsRegisteredAPIGroupVersion(outputGV) {
cmdutil.UsageError(cmd, "'%s' is not a registered version.", o.outputVersion) cmdutil.UsageError(cmd, "'%s' is not a registered version.", o.outputVersion)
} }

View File

@ -71,16 +71,8 @@ func (c *ClientCache) ClientConfigForVersion(version string) (*client.Config, er
} }
preferredGV = &gv preferredGV = &gv
} }
registeredGVs := []unversioned.GroupVersion{}
for _, gvString := range registered.RegisteredVersions {
gv, err := unversioned.ParseGroupVersion(gvString)
if err != nil {
return nil, err
}
registeredGVs = append(registeredGVs, gv)
}
negotiatedVersion, err := client.NegotiateVersion(c.defaultClient, &config, preferredGV, registeredGVs) negotiatedVersion, err := client.NegotiateVersion(c.defaultClient, &config, preferredGV, registered.RegisteredGroupVersions)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -35,6 +35,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/api/validation"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
@ -476,8 +477,12 @@ func (c *clientSwaggerSchema) ValidateBytes(data []byte) error {
if err != nil { if err != nil {
return err return err
} }
if ok := registered.IsRegisteredAPIVersion(version); !ok { gv, err := unversioned.ParseGroupVersion(version)
return fmt.Errorf("API version %q isn't supported, only supports API versions %q", version, registered.RegisteredVersions) if err != nil {
return fmt.Errorf("unable to parse group/version from %q: %v", version, err)
}
if ok := registered.IsRegisteredAPIGroupVersion(gv); !ok {
return fmt.Errorf("API version %q isn't supported, only supports API versions %q", version, registered.RegisteredGroupVersions)
} }
resource, _ := meta.KindToResource(kind, false) resource, _ := meta.KindToResource(kind, false)
group, err := c.mapper.GroupForResource(resource) group, err := c.mapper.GroupForResource(resource)

View File

@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/registered" "k8s.io/kubernetes/pkg/api/registered"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/yaml" "k8s.io/kubernetes/pkg/util/yaml"
) )
@ -48,8 +49,12 @@ func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to get type info from %q: %v", source, err) return nil, fmt.Errorf("unable to get type info from %q: %v", source, err)
} }
if ok := registered.IsRegisteredAPIVersion(version); !ok { gv, err := unversioned.ParseGroupVersion(version)
return nil, fmt.Errorf("API version %q in %q isn't supported, only supports API versions %q", version, source, registered.RegisteredVersions) if err != nil {
return nil, fmt.Errorf("unable to parse group/version from %q: %v", version, err)
}
if ok := registered.IsRegisteredAPIGroupVersion(gv); !ok {
return nil, fmt.Errorf("API version %q in %q isn't supported, only supports API versions %q", version, source, registered.RegisteredGroupVersions)
} }
if kind == "" { if kind == "" {
return nil, fmt.Errorf("kind not set in %q", source) return nil, fmt.Errorf("kind not set in %q", source)

View File

@ -71,8 +71,8 @@ func TestDecodeSinglePod(t *testing.T) {
t.Errorf("expected:\n%#v\ngot:\n%#v\n%s", pod, podOut, string(json)) t.Errorf("expected:\n%#v\ngot:\n%#v\n%s", pod, podOut, string(json))
} }
for _, version := range registered.GroupVersionsForGroup("") { for _, gv := range registered.GroupVersionsForGroup("") {
externalPod, err := testapi.Default.Converter().ConvertToVersion(pod, version) externalPod, err := testapi.Default.Converter().ConvertToVersion(pod, gv.String())
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
} }
@ -137,8 +137,8 @@ func TestDecodePodList(t *testing.T) {
t.Errorf("expected:\n%#v\ngot:\n%#v\n%s", podList, &podListOut, string(json)) t.Errorf("expected:\n%#v\ngot:\n%#v\n%s", podList, &podListOut, string(json))
} }
for _, version := range registered.GroupVersionsForGroup("") { for _, gv := range registered.GroupVersionsForGroup("") {
externalPodList, err := testapi.Default.Converter().ConvertToVersion(podList, version) externalPodList, err := testapi.Default.Converter().ConvertToVersion(podList, gv.String())
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
} }