mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Register the API versions to the DefaultRESTMapper in the order of preferred versions first.
This makes kubectl sends requests to URLs in the format defined by the latest API version.
This commit is contained in:
parent
f74fab4e56
commit
4787c66214
@ -31,4 +31,4 @@ source "${KUBE_VERSION_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh"
|
|||||||
|
|
||||||
prepare-e2e
|
prepare-e2e
|
||||||
|
|
||||||
${KUBECTL} get minions --no-headers | wc -l
|
${KUBECTL} get nodes --no-headers | wc -l
|
||||||
|
@ -126,14 +126,14 @@ for version in "${kube_api_versions[@]}"; do
|
|||||||
-s "http://127.0.0.1:${API_PORT}"
|
-s "http://127.0.0.1:${API_PORT}"
|
||||||
--match-server-version
|
--match-server-version
|
||||||
)
|
)
|
||||||
[ "$(kubectl get minions -t $'{{ .apiVersion }}' "${kube_flags[@]}")" == "v1beta3" ]
|
[ "$(kubectl get minions -t '{{ .apiVersion }}' "${kube_flags[@]}")" == "v1beta3" ]
|
||||||
else
|
else
|
||||||
kube_flags=(
|
kube_flags=(
|
||||||
-s "http://127.0.0.1:${API_PORT}"
|
-s "http://127.0.0.1:${API_PORT}"
|
||||||
--match-server-version
|
--match-server-version
|
||||||
--api-version="${version}"
|
--api-version="${version}"
|
||||||
)
|
)
|
||||||
[ "$(kubectl get minions -t $'{{ .apiVersion }}' "${kube_flags[@]}")" == "${version}" ]
|
[ "$(kubectl get minions -t '{{ .apiVersion }}' "${kube_flags[@]}")" == "${version}" ]
|
||||||
fi
|
fi
|
||||||
id_field=".metadata.name"
|
id_field=".metadata.name"
|
||||||
labels_field=".metadata.labels"
|
labels_field=".metadata.labels"
|
||||||
@ -625,7 +625,7 @@ __EOF__
|
|||||||
# Minions #
|
# Minions #
|
||||||
###########
|
###########
|
||||||
|
|
||||||
if [[ "${version}" != "v1beta3" ]]; then
|
if [[ "${version}" = "v1beta1" ]] || [[ "${version}" = "v1beta2" ]]; then
|
||||||
kube::log::status "Testing kubectl(${version}:minions)"
|
kube::log::status "Testing kubectl(${version}:minions)"
|
||||||
|
|
||||||
kube::test::get_object_assert minions "{{range.items}}{{$id_field}}:{{end}}" '127.0.0.1:'
|
kube::test::get_object_assert minions "{{range.items}}{{$id_field}}:{{end}}" '127.0.0.1:'
|
||||||
|
@ -110,7 +110,8 @@ func init() {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
// list of versions we support on the server
|
// list of versions we support on the server
|
||||||
versions := []string{"v1beta1", "v1beta2", "v1beta3", "v1"}
|
// versions should be listed in the order of perferred versions first
|
||||||
|
versions := []string{"v1beta3", "v1beta2", "v1beta1", "v1"}
|
||||||
|
|
||||||
// versions that used mixed case URL formats
|
// versions that used mixed case URL formats
|
||||||
versionMixedCase := map[string]bool{
|
versionMixedCase := map[string]bool{
|
||||||
|
@ -72,11 +72,10 @@ func TestInterfacesFor(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRESTMapper(t *testing.T) {
|
func TestRESTMapper(t *testing.T) {
|
||||||
// TODO: This test does not seem right. The version returned here depends on the order in which API versions were registered. This will just return the API version that was registered first. Fix this.
|
if v, k, err := RESTMapper.VersionAndKindForResource("replicationControllers"); err != nil || v != "v1beta3" || k != "ReplicationController" {
|
||||||
if v, k, err := RESTMapper.VersionAndKindForResource("replicationControllers"); err != nil || v != "v1beta1" || k != "ReplicationController" {
|
|
||||||
t.Errorf("unexpected version mapping: %s %s %v", v, k, err)
|
t.Errorf("unexpected version mapping: %s %s %v", v, k, err)
|
||||||
}
|
}
|
||||||
if v, k, err := RESTMapper.VersionAndKindForResource("replicationcontrollers"); err != nil || v != "v1beta1" || k != "ReplicationController" {
|
if v, k, err := RESTMapper.VersionAndKindForResource("replicationcontrollers"); err != nil || v != "v1beta3" || k != "ReplicationController" {
|
||||||
t.Errorf("unexpected version mapping: %s %s %v", v, k, err)
|
t.Errorf("unexpected version mapping: %s %s %v", v, k, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,9 @@ func NewDefaultRESTMapper(versions []string, f VersionInterfacesFunc) *DefaultRE
|
|||||||
func (m *DefaultRESTMapper) Add(scope RESTScope, kind string, version string, mixedCase bool) {
|
func (m *DefaultRESTMapper) Add(scope RESTScope, kind string, version string, mixedCase bool) {
|
||||||
plural, singular := kindToResource(kind, mixedCase)
|
plural, singular := kindToResource(kind, mixedCase)
|
||||||
meta := typeMeta{APIVersion: version, Kind: kind}
|
meta := typeMeta{APIVersion: version, Kind: kind}
|
||||||
if _, ok := m.mapping[plural]; !ok {
|
_, ok1 := m.mapping[plural]
|
||||||
|
_, ok2 := m.mapping[strings.ToLower(plural)]
|
||||||
|
if !ok1 && !ok2 {
|
||||||
m.mapping[plural] = meta
|
m.mapping[plural] = meta
|
||||||
m.mapping[singular] = meta
|
m.mapping[singular] = meta
|
||||||
if strings.ToLower(plural) != plural {
|
if strings.ToLower(plural) != plural {
|
||||||
@ -155,7 +157,7 @@ func kindToResource(kind string, mixedCase bool) (plural, singular string) {
|
|||||||
|
|
||||||
// VersionAndKindForResource implements RESTMapper
|
// VersionAndKindForResource implements RESTMapper
|
||||||
func (m *DefaultRESTMapper) VersionAndKindForResource(resource string) (defaultVersion, kind string, err error) {
|
func (m *DefaultRESTMapper) VersionAndKindForResource(resource string) (defaultVersion, kind string, err error) {
|
||||||
meta, ok := m.mapping[resource]
|
meta, ok := m.mapping[strings.ToLower(resource)]
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", "", fmt.Errorf("no resource %q has been defined", resource)
|
return "", "", fmt.Errorf("no resource %q has been defined", resource)
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ func TestDeleteObjectByTuple(t *testing.T) {
|
|||||||
cmd.Flags().Set("cascade", "false")
|
cmd.Flags().Set("cascade", "false")
|
||||||
cmd.Run(cmd, []string{"replicationcontrollers/redis-master-controller"})
|
cmd.Run(cmd, []string{"replicationcontrollers/redis-master-controller"})
|
||||||
|
|
||||||
if buf.String() != "replicationControllers/redis-master-controller\n" {
|
if buf.String() != "replicationcontrollers/redis-master-controller\n" {
|
||||||
t.Errorf("unexpected output: %s", buf.String())
|
t.Errorf("unexpected output: %s", buf.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ func TestDeleteNamedObject(t *testing.T) {
|
|||||||
cmd.Flags().Set("cascade", "false")
|
cmd.Flags().Set("cascade", "false")
|
||||||
cmd.Run(cmd, []string{"replicationcontrollers", "redis-master-controller"})
|
cmd.Run(cmd, []string{"replicationcontrollers", "redis-master-controller"})
|
||||||
|
|
||||||
if buf.String() != "replicationControllers/redis-master-controller\n" {
|
if buf.String() != "replicationcontrollers/redis-master-controller\n" {
|
||||||
t.Errorf("unexpected output: %s", buf.String())
|
t.Errorf("unexpected output: %s", buf.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ func TestGetUnknownSchemaObjectListGeneric(t *testing.T) {
|
|||||||
output: "unlikelyversion",
|
output: "unlikelyversion",
|
||||||
list: "v1beta3",
|
list: "v1beta3",
|
||||||
obj1: "unlikelyversion", // doesn't have v1beta3
|
obj1: "unlikelyversion", // doesn't have v1beta3
|
||||||
obj2: "v1beta1", // version of the API response
|
obj2: "v1beta3", // version of the API response
|
||||||
},
|
},
|
||||||
"handles common version": {
|
"handles common version": {
|
||||||
output: "v1beta1",
|
output: "v1beta1",
|
||||||
|
Loading…
Reference in New Issue
Block a user