Merge pull request #70507 from seans3/legacyscheme-fix

kubectl: change legacyscheme codecs to direct codecs (no conversion)
pull/58/head
k8s-ci-robot 2018-11-01 08:21:55 -07:00 committed by GitHub
commit 090e3d2ff4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 8 deletions

View File

@ -17,6 +17,7 @@ go_library(
"//pkg/api/legacyscheme:go_default_library",
"//pkg/kubectl/cmd/util/openapi: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/validation: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/runtime: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/sets: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/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/discovery"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/version"
)
@ -120,7 +121,10 @@ func setKubernetesDefaults(config *rest.Config) error {
config.APIPath = "/api"
}
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)
}

View File

@ -65,6 +65,10 @@ func getProtocols(spec corev1.PodSpec) map[string]string {
result := make(map[string]string)
for _, container := range spec.Containers {
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)
}
}
@ -75,6 +79,10 @@ func getProtocols(spec corev1.PodSpec) map[string]string {
func getServiceProtocols(spec corev1.ServiceSpec) map[string]string {
result := make(map[string]string)
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)
}
return result

View File

@ -39,7 +39,23 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{
{
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{
{
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{
{
ContainerPort: 101,
Protocol: "tcp",
Protocol: "TCP",
},
},
},
@ -89,7 +117,7 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{
{
ContainerPort: 101,
Protocol: "tcp",
Protocol: "TCP",
},
},
},
@ -109,7 +137,7 @@ func TestProtocolsForObject(t *testing.T) {
Ports: []corev1.ContainerPort{
{
ContainerPort: 101,
Protocol: "tcp",
Protocol: "TCP",
},
},
},
@ -124,7 +152,7 @@ func TestProtocolsForObject(t *testing.T) {
expectErr: true,
},
}
expectedPorts := map[string]string{"101": "tcp"}
expectedPorts := map[string]string{"101": "TCP"}
for _, test := range tests {
actual, err := protocolsForObject(test.object)