diff --git a/pkg/kubectl/cmd/expose/expose.go b/pkg/kubectl/cmd/expose/expose.go index 6770a3171f1..404fddb2d77 100644 --- a/pkg/kubectl/cmd/expose/expose.go +++ b/pkg/kubectl/cmd/expose/expose.go @@ -314,7 +314,8 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro } if inline := cmdutil.GetFlagString(cmd, "overrides"); len(inline) > 0 { - object, err = cmdutil.Merge(scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...), object, inline) + codec := runtime.NewCodec(scheme.DefaultJSONEncoder(), scheme.Codecs.UniversalDecoder(scheme.Scheme.PrioritizedVersionsAllGroups()...)) + object, err = cmdutil.Merge(codec, object, inline) if err != nil { return err } diff --git a/test/cmd/core.sh b/test/cmd/core.sh index 5f645c2d5c5..125c2923dee 100755 --- a/test/cmd/core.sh +++ b/test/cmd/core.sh @@ -992,6 +992,32 @@ __EOF__ # Post-condition: Only the default kubernetes services exist kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:' + ### Create deployent and service + # Pre-condition: no deployment exists + kube::test::wait_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" '' + # Command + kubectl run testmetadata --image=nginx --replicas=2 --port=80 --expose --service-overrides='{ "metadata": { "annotations": { "zone-context": "home" } } } ' + # Check result + kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" 'testmetadata:' + kube::test::get_object_assert 'service testmetadata' "{{.metadata.annotations}}" "map\[zone-context:home\]" + + ### Expose deployment as a new service + # Command + kubectl expose deployment testmetadata --port=1000 --target-port=80 --type=NodePort --name=exposemetadata --overrides='{ "metadata": { "annotations": { "zone-context": "work" } } } ' + # Check result + kube::test::get_object_assert 'service exposemetadata' "{{.metadata.annotations}}" "map\[zone-context:work\]" + + # Clean-Up + # Command + kubectl delete service exposemetadata testmetadata "${kube_flags[@]}" + if [[ "${WAIT_FOR_DELETION:-}" == "true" ]]; then + kube::test::wait_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:' + fi + kubectl delete deployment testmetadata "${kube_flags[@]}" + if [[ "${WAIT_FOR_DELETION:-}" == "true" ]]; then + kube::test::wait_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" '' + fi + set +o nounset set +o errexit }