kubectl: change legacyscheme codecs to direct codecs (no conversion)

pull/58/head
Sean Sullivan 2018-10-31 15:11:40 -07:00
parent b8731a76f0
commit 1e161bb329
4 changed files with 50 additions and 8 deletions

View File

@ -17,6 +17,7 @@ go_library(
"//pkg/api/legacyscheme:go_default_library", "//pkg/api/legacyscheme:go_default_library",
"//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library",
"//pkg/kubectl/cmd/util/openapi/validation:go_default_library", "//pkg/kubectl/cmd/util/openapi/validation:go_default_library",
"//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/templates:go_default_library", "//pkg/kubectl/util/templates:go_default_library",
"//pkg/kubectl/validation:go_default_library", "//pkg/kubectl/validation:go_default_library",
"//pkg/version:go_default_library", "//pkg/version:go_default_library",
@ -27,6 +28,7 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library",

View File

@ -23,12 +23,13 @@ import (
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version"
) )
@ -120,7 +121,10 @@ func setKubernetesDefaults(config *rest.Config) error {
config.APIPath = "/api" config.APIPath = "/api"
} }
if config.NegotiatedSerializer == nil { if config.NegotiatedSerializer == nil {
config.NegotiatedSerializer = legacyscheme.Codecs // This codec factory ensures the resources are not converted. Therefore, resources
// will not be round-tripped through internal versions. Defaulting does not happen
// on the client.
config.NegotiatedSerializer = &serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
} }
return rest.SetKubernetesDefaults(config) return rest.SetKubernetesDefaults(config)
} }

View File

@ -65,6 +65,10 @@ func getProtocols(spec corev1.PodSpec) map[string]string {
result := make(map[string]string) result := make(map[string]string)
for _, container := range spec.Containers { for _, container := range spec.Containers {
for _, port := range container.Ports { for _, port := range container.Ports {
// Empty protocol must be defaulted (TCP)
if len(port.Protocol) == 0 {
port.Protocol = corev1.ProtocolTCP
}
result[strconv.Itoa(int(port.ContainerPort))] = string(port.Protocol) result[strconv.Itoa(int(port.ContainerPort))] = string(port.Protocol)
} }
} }
@ -75,6 +79,10 @@ func getProtocols(spec corev1.PodSpec) map[string]string {
func getServiceProtocols(spec corev1.ServiceSpec) map[string]string { func getServiceProtocols(spec corev1.ServiceSpec) map[string]string {
result := make(map[string]string) result := make(map[string]string)
for _, servicePort := range spec.Ports { for _, servicePort := range spec.Ports {
// Empty protocol must be defaulted (TCP)
if len(servicePort.Protocol) == 0 {
servicePort.Protocol = corev1.ProtocolTCP
}
result[strconv.Itoa(int(servicePort.Port))] = string(servicePort.Protocol) result[strconv.Itoa(int(servicePort.Port))] = string(servicePort.Protocol)
} }
return result return result

View File

@ -39,7 +39,23 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{ Ports: []corev1.ContainerPort{
{ {
ContainerPort: 101, ContainerPort: 101,
Protocol: "tcp", Protocol: "TCP",
},
},
},
},
},
},
},
// No protocol--should default to TCP.
{
object: &corev1.Pod{
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Ports: []corev1.ContainerPort{
{
ContainerPort: 101,
}, },
}, },
}, },
@ -53,7 +69,19 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ServicePort{ Ports: []corev1.ServicePort{
{ {
Port: 101, Port: 101,
Protocol: "tcp", Protocol: "TCP",
},
},
},
},
},
// No protocol for service port--default to TCP
{
object: &corev1.Service{
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
Port: 101,
}, },
}, },
}, },
@ -69,7 +97,7 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{ Ports: []corev1.ContainerPort{
{ {
ContainerPort: 101, ContainerPort: 101,
Protocol: "tcp", Protocol: "TCP",
}, },
}, },
}, },
@ -89,7 +117,7 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{ Ports: []corev1.ContainerPort{
{ {
ContainerPort: 101, ContainerPort: 101,
Protocol: "tcp", Protocol: "TCP",
}, },
}, },
}, },
@ -109,7 +137,7 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{ Ports: []corev1.ContainerPort{
{ {
ContainerPort: 101, ContainerPort: 101,
Protocol: "tcp", Protocol: "TCP",
}, },
}, },
}, },
@ -124,7 +152,7 @@ func TestProtocolsForObject(t *testing.T) {
expectErr: true, expectErr: true,
}, },
} }
expectedPorts := map[string]string{"101": "tcp"} expectedPorts := map[string]string{"101": "TCP"}
for _, test := range tests { for _, test := range tests {
actual, err := protocolsForObject(test.object) actual, err := protocolsForObject(test.object)