diff --git a/hack/testdata/diff/configmap.yaml b/hack/testdata/diff/configmap.yaml new file mode 100644 index 0000000000..be550449e8 --- /dev/null +++ b/hack/testdata/diff/configmap.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: test diff --git a/hack/testdata/diff/deployment.yaml b/hack/testdata/diff/deployment.yaml new file mode 100644 index 0000000000..0661df1be2 --- /dev/null +++ b/hack/testdata/diff/deployment.yaml @@ -0,0 +1,17 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test +spec: + replicas: 3 + selector: + matchLabels: + name: test + template: + metadata: + labels: + name: test + spec: + containers: + - name: nginx + image: nginx diff --git a/hack/testdata/diff/pod.yaml b/hack/testdata/diff/pod.yaml new file mode 100644 index 0000000000..510ff2329e --- /dev/null +++ b/hack/testdata/diff/pod.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test +spec: + containers: + - name: nginx + image: nginx diff --git a/hack/testdata/diff/secret.yaml b/hack/testdata/diff/secret.yaml new file mode 100644 index 0000000000..1c7de1855f --- /dev/null +++ b/hack/testdata/diff/secret.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Secret +metadata: + name: test diff --git a/pkg/kubectl/cmd/diff/diff.go b/pkg/kubectl/cmd/diff/diff.go index 89ee7f360e..8e1deba326 100644 --- a/pkg/kubectl/cmd/diff/diff.go +++ b/pkg/kubectl/cmd/diff/diff.go @@ -289,7 +289,17 @@ func (obj InfoObject) Merged() (runtime.Object, error) { } func (obj InfoObject) Name() string { - return obj.Info.Name + group := "" + if obj.Info.Mapping.GroupVersionKind.Group != "" { + group = fmt.Sprintf("%v.", obj.Info.Mapping.GroupVersionKind.Group) + } + return group + fmt.Sprintf( + "%v.%v:%v.%v", + obj.Info.Mapping.GroupVersionKind.Version, + obj.Info.Mapping.GroupVersionKind.Kind, + obj.Info.Namespace, + obj.Info.Name, + ) } // Differ creates two DiffVersion and diffs them. diff --git a/test/cmd/diff.sh b/test/cmd/diff.sh index 6d0d5a1275..e24381e4a9 100755 --- a/test/cmd/diff.sh +++ b/test/cmd/diff.sh @@ -40,3 +40,20 @@ run_kubectl_diff_tests() { set +o nounset set +o errexit } + +run_kubectl_diff_same_names() { + set -o nounset + set -o errexit + + create_and_use_new_namespace + kube::log::status "Test kubectl diff with multiple resources with the same name" + + output_message=$(KUBECTL_EXTERNAL_DIFF=find kubectl diff -Rf hack/testdata/diff/) + kube::test::if_has_string "${output_message}" 'v1.Pod:.*.test' + kube::test::if_has_string "${output_message}" 'apps.v1.Deployment:.*.test' + kube::test::if_has_string "${output_message}" 'v1.ConfigMap:.*.test' + kube::test::if_has_string "${output_message}" 'v1.Secret:.*.test' + + set +o nounset + set +o errexit +} diff --git a/test/cmd/legacy-script.sh b/test/cmd/legacy-script.sh index 49c849e8b3..c838ee4d92 100755 --- a/test/cmd/legacy-script.sh +++ b/test/cmd/legacy-script.sh @@ -473,6 +473,7 @@ runTests() { # Kubectl diff # ################ record_command run_kubectl_diff_tests + record_command run_kubectl_diff_same_names ############### # Kubectl get #