Fix kubectl explain bug when additionalProperties in schema defines as boolean. (#124506)

* Fix kubectl explain bug when additionalProperties in schema defines as:
`additionalProperties: true` to ignore iterating.

* trigger error on kubectl explain with integration test on crd with non bool additionalfields

* add changes to fix the problem

* replace sleep with loop and retry for kubectl explain integration test

* replaced testdata file with inline create

Kubernetes-commit: 834658cb26c1cfbb2b41ac2f04711563ee534682
This commit is contained in:
Ahmad Zolfaghari 2024-05-21 15:10:32 +03:30 committed by Kubernetes Publisher
parent b31dce3246
commit 55821cad07
4 changed files with 23 additions and 7 deletions

2
go.mod
View File

@ -32,7 +32,7 @@ require (
k8s.io/api v0.0.0-20240516203440-664bdd58a30d
k8s.io/apimachinery v0.0.0-20240510224318-1da46c3f5a5b
k8s.io/cli-runtime v0.0.0-20240509010650-cee732fd4ad8
k8s.io/client-go v0.0.0-20240520163845-86f83bc81899
k8s.io/client-go v0.0.0-20240521090535-c7396197f39e
k8s.io/component-base v0.0.0-20240509004100-482591e4108c
k8s.io/component-helpers v0.0.0-20240511203730-30c6ab0cd73e
k8s.io/klog/v2 v2.120.1

4
go.sum
View File

@ -275,8 +275,8 @@ k8s.io/apimachinery v0.0.0-20240510224318-1da46c3f5a5b h1:UTQPecSyfYRHmREs/0iVer
k8s.io/apimachinery v0.0.0-20240510224318-1da46c3f5a5b/go.mod h1:+hpAhBheGa7Ub4X6JfKqjEeACgGYZqZv+ILGzigzVGU=
k8s.io/cli-runtime v0.0.0-20240509010650-cee732fd4ad8 h1:2CkqqqVdTCyNf/z2DF5qKs42HHsIU0bkkWb7nNgw0LE=
k8s.io/cli-runtime v0.0.0-20240509010650-cee732fd4ad8/go.mod h1:fM1OoEh4Wil6xcm53hPjs5c2Bu37hxWoaEOmXui1Fh4=
k8s.io/client-go v0.0.0-20240520163845-86f83bc81899 h1:oalNG1NReIkNNMCPVq5rzOLYH3mWP2n3MqnI3fBerPk=
k8s.io/client-go v0.0.0-20240520163845-86f83bc81899/go.mod h1:mF3HjWextzMO13L26Q3GHi+ttX57kjYOBB0XT26k9/o=
k8s.io/client-go v0.0.0-20240521090535-c7396197f39e h1:ELb5A6Mh1VC9KKJYaFUf/6m16G5HEO7q6wRnDSsWNS4=
k8s.io/client-go v0.0.0-20240521090535-c7396197f39e/go.mod h1:mF3HjWextzMO13L26Q3GHi+ttX57kjYOBB0XT26k9/o=
k8s.io/component-base v0.0.0-20240509004100-482591e4108c h1:dsvBpyLyEc10p5ARPS+9ZZgYIu8W89k2T9oNWvgxEmQ=
k8s.io/component-base v0.0.0-20240509004100-482591e4108c/go.mod h1:iQnJj8brojGA7iHRX01Yx9zVMeAuOGBVhQ0UpOm7vTw=
k8s.io/component-helpers v0.0.0-20240511203730-30c6ab0cd73e h1:bUUq3s9IvslnDKC6FN8MlNzYWPIM0hMc0CCITY/mZFw=

View File

@ -118,7 +118,7 @@ Takes dictionary as argument with keys:
{{- else if $resolved.items -}}
{{- /* If the schema is an array then traverse the array item fields */ -}}
{{- template "output" (set $nextContext "schema" $resolved.items) -}}
{{- else if $resolved.additionalProperties -}}
{{- else if and $resolved.additionalProperties (not (eq "bool" (printf "%T" $resolved.additionalProperties))) -}}
{{- /* If the schema is a map then traverse the map item fields */ -}}
{{- template "output" (set $nextContext "schema" $resolved.additionalProperties) -}}
{{- else -}}
@ -182,7 +182,9 @@ Takes dictionary as argument with keys:
{{- template "fieldList" (set $nextContext "schema" .)}}
{{- end -}}
{{- if $resolved.items}}{{- template "fieldList" (set $nextContext "schema" $resolved.items)}}{{end}}
{{- if $resolved.additionalProperties}}{{- template "fieldList" (set $nextContext "schema" $resolved.additionalProperties)}}{{end}}
{{- if and $resolved.additionalProperties (not (eq "bool" (printf "%T" $resolved.additionalProperties))) -}}
{{- template "fieldList" (set $nextContext "schema" $resolved.additionalProperties)}}
{{- end -}}
{{- end -}}
{{- end -}}
@ -235,7 +237,7 @@ Takes dictionary as argument with keys:
{{- if .items -}}
{{- template "description" (set $ "schema" .items) -}}
{{- end -}}
{{- if .additionalProperties -}}
{{- if and .additionalProperties (not (eq "bool" (printf "%T" .additionalProperties))) -}}
{{- template "description" (set $ "schema" .additionalProperties) -}}
{{- end -}}
{{- end -}}
@ -256,7 +258,7 @@ Takes dictionary as argument with keys:
{{- with $.schema -}}
{{- if .items -}}
[]{{template "typeGuess" (set $ "schema" .items)}}
{{- else if .additionalProperties -}}
{{- else if and .additionalProperties (not (eq "bool" (printf "%T" .additionalProperties))) -}}
map[string]{{template "typeGuess" (set $ "schema" .additionalProperties)}}
{{- else if and .allOf (not .properties) (eq (len .allOf) 1) -}}
{{- /* If allOf has a single element and there are no direct

View File

@ -392,6 +392,20 @@ func TestPlaintext(t *testing.T) {
checkEquals("string"),
},
},
{
// Shows that the typeguess template works with boolean additionalProperties
Name: "True additionalProperties",
Subtemplate: "typeGuess",
Context: map[string]any{
"schema": map[string]any{
"type": "string",
"additionalProperties": true,
},
},
Checks: []check{
checkEquals("string"),
},
},
{
// Show that a ref to a primitive type uses the referred type's type
Name: "PrimitiveRef",