-
Bug
-
Resolution: Not a Bug
-
Major
-
None
-
4.14.z, 4.15.z, 4.16.0
-
None
-
No
-
False
-
Description of problem:
`oc explain` command failed with error: oc explain mock-resources GROUP: test.tectonic.com KIND: MockResource VERSION: v1error: template: plaintext:39:13: executing "plaintext" at <include "schema" (dict "gvk" $gvk "Document" $.Document "FieldPath" $.FieldPath "Recursive" $.Recursive)>: error calling include: template: plaintext:63:21: executing "schema" at <include "output" (set $ "schema" .)>: error calling include: template: plaintext:101:17: executing "output" at <include "fieldList" (dict "schema" $resolved "level" 1 "Document" $.Document "Recursive" $.Recursive)>: error calling include: template: plaintext:254:15: executing "typeGuess" at <.items>: can't evaluate field items in type bool
Version-Release number of selected component (if applicable):
4.14.x/4.15.x/4.16
How reproducible:
always
Steps to Reproduce:
1. create the CRD by : --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: mock-resources.test.tectonic.com spec: group: test.tectonic.com scope: Namespaced names: plural: mock-resources singular: mock-resource kind: MockResource listKind: MockResources versions: - name: v1 storage: true served: true schema: openAPIV3Schema: type: object properties: status: type: object properties: statuses: type: object properties: status1: type: string status2: type: string podStatuses: type: object additionalProperties: type: array items: type: string otherStatuses: type: object additionalProperties: type: array items: type: string customConditions: type: array items: type: object properties: lastTransitionTime: type: string lastUpdateTime: type: string message: type: string reason: type: string status: type: string type: type: string otherCustomConditions: type: array items: type: object properties: lastTransitionTime: type: string lastUpdateTime: type: string message: type: string reason: type: string status: type: string type: type: string additionalProperties: true spec: type: object required: - password - select properties: password: type: string minLength: 1 maxLength: 25 pattern: "^[a-zA-Z0-9._\\-%]*$" number: type: integer minimum: 2 maximum: 4 select: type: string fieldGroup: type: object description: "[SCHEMA] field group - Quis cupidatat in sint occaecat quis dolore irure ea minim sint aliquip nisi aliquip." title: "[SCHEMA] Field Group" properties: itemOne: type: string itemTwo: type: integer arrayFieldGroup: type: array title: "[SCHEMA] Array Field Group" description: "[SCHEMA] array field group - Quis excepteur nostrud qui sunt reprehenderit reprehenderit deserunt eu aute laboris id aliqua." items: type: object properties: itemOne: type: string itemTwo: type: integer hiddenFieldGroup: type: object properties: hiddenItem: type: object podCount: type: integer endpointList: type: array items: type: object additionalProperties: true resourceRequirements: type: object additionalProperties: true k8sResourcePrefix: type: string booleanSwitch: type: boolean checkbox: type: boolean imagePullPolicy: type: string updateStrategy: type: object additionalProperties: true text: type: string nodeAffinity: type: object additionalProperties: true podAffinity: type: object additionalProperties: true podAntiAffinity: type: object additionalProperties: true advanced: type: string fieldDependencyControl: type: boolean fieldDependency: type: string nestedFieldDependency: type: object properties: enabled: type: boolean settings: type: object properties: enabled: type: boolean arrayFieldDependency: type: array items: type: object properties: enabled: type: boolean dependent: type: string hidden: type: string objectWithArray: type: object properties: name: type: string tags: type: array items: type: string birthday: type: object properties: month: type: number day: type: number year: type: number arrayWithObject: type: array items: type: object properties: organization: type: object properties: name: type: string address: type: object properties: street: type: string city: type: string state: type: string current: type: boolean resourceRequirements: type: object properties: {} deeplyNested: type: object properties: foo: type: object properties: bar: type: object properties: baz: type: object properties: bat: type: object additionalProperties: true --- apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: mock-operator annotations: alm-examples: '[{"apiVersion":"test.tectonic.com/v1","kind":"MockResource","metadata":{"name":"mock-resource-instance","namespace":"operand-test","labels":{"automatedTestName":"operand-test"}},"spec":{"fieldGroup":{"itemOne":"Field group item 1","itemTwo":2},"arrayFieldGroup":[{"itemOne":"Array field group item 1","itemTwo":2}],"select":"WARN","k8sResourcePrefix":"operand-test","podCount":3,"endpointList":[{"port":8080,"scheme":"TCP"}],"label":"app=openshift","resourceRequirements":{"limits":{"cpu":"500m","memory":"50Mi","ephemeral-storage":"500Gi"},"requests":{"cpu":"500m","memory":"50Mi","ephemeral-storage":"500Gi"}},"namespaceSelector":{"matchNames":["default"]},"booleanSwitch":true,"password":"password123","checkbox":true,"imagePullPolicy":"Never","updateStrategy":{"type":"Recreate"},"text":"Some text","number":2},"status":{"podStatuses":{"ready":["pod-0","pod-1"],"unhealthy":["pod-2"],"stopped":["pod-3"]},"podCount":3,"w3Link":"https://google.com","conditions":[{"type":"Available","status":"True","lastUpdateTime":"2018-08-22T23:27:55Z","lastTransitionTime":"2018-08-22T23:27:55Z","reason":"AppReady","message":"App is ready."}],"text":"Some text","prometheusEndpoint":"my-svc.my-namespace.svc.cluster.local","k8sPhase":"Available","k8sPhaseReason":"AppReady"}}]' spec: displayName: Mock Operator install: strategy: deployment spec: permissions: [] deployments: - name: test-operator spec: replicas: 1 selector: matchLabels: name: test-operator-alm-owned template: metadata: name: test-operator-alm-owned labels: name: test-operator-alm-owned spec: serviceAccountName: test-operator containers: - name: test-operator image: nginx customresourcedefinitions: owned: - name: mock-resources.test.tectonic.com version: v1 kind: MockResource displayName: Mock Resource description: Mock resource instance for testing descriptors resources: [] specDescriptors: - path: fieldGroup displayName: "Field Group" description: "Lorem ipsum dolor sit amet" - path: fieldDependency description: fieldDependency - Voluptate ea tempor amet eiusmod. displayName: "Field Dependency" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:fieldDependency:fieldDependencyControl:true" - path: nestedFieldDependency.settings.enabled description: fieldDependency - Voluptate ea tempor amet eiusmod. displayName: "Nested Field Dependency" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:fieldDependency:nestedFieldDependency.enabled:true" - path: select description: select - Eu nisi fugiat occaecat laborum. displayName: "Select" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:select:DEBUG" - "urn:alm:descriptor:com.tectonic.ui:select:INFO" - "urn:alm:descriptor:com.tectonic.ui:select:WARN" - "urn:alm:descriptor:com.tectonic.ui:select:ERROR" - "urn:alm:descriptor:com.tectonic.ui:select:FATAL" - path: k8sResourcePrefix description: "k8sResourcePrefix - Amet magna ea exercitation sint et dolor deserunt quis." displayName: "K8s Resource Prefix" x-descriptors: - "urn:alm:descriptor:io.kubernetes:Project" - path: podCount description: "podCount - Quis laboris ea Lorem deserunt mollit commodo." displayName: "Pod Count" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podCount" - path: endpointList description: "endpointList - Consequat nostrud anim labore nulla incididunt exercitation ex officia dolor Lorem consequat veniam." displayName: "Endpoint List" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:endpointList" - path: label description: "label - Aliqua voluptate qui do ullamco." displayName: "Label" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:label" - path: resourceRequirements description: "resourceRequirements - Laboris do non aliquip cupidatat sit irure." displayName: "Resource Requirements" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:resourceRequirements" - path: namespaceSelector description: "namespaceSelector - Esse magna exercitation Lorem exercitation officia exercitation excepteur id." displayName: "Namespace Selector" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:namespaceSelector" - path: booleanSwitch description: "booleanSwitch - Aliquip magna eu aute ea veniam ea culpa nulla." displayName: "Boolean Switch" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:booleanSwitch" - path: password description: "password - Et culpa officia eiusmod labore eiusmod occaecat." displayName: "Password" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:password" - path: checkbox description: "checkbox - Excepteur cillum quis proident sunt nulla ut in fugiat." displayName: "Checkbox" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:checkbox" - path: imagePullPolicy description: "imagePullPolicy - Ut adipisicing et aliqua tempor velit proident officia officia reprehenderit consequat voluptate irure esse." displayName: "Image Pull Policy" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:imagePullPolicy" - path: updateStrategy description: "updateStrategy - Amet minim ad cillum veniam exercitation excepteur aliqua anim cillum officia do aliquip." displayName: "Update Strategy" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:updateStrategy" - path: text description: "text - Culpa qui mollit velit do incididunt." displayName: "Text" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:text" - path: number description: "number - Eu dolore duis sit Lorem eu et ad veniam qui." displayName: "Number" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:number" - path: nodeAffinity description: "nodeAffinity - Labore officia esse consequat in sit ut laborum ex est elit tempor tempor." displayName: "Node Affinity" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:nodeAffinity" - path: podAffinity description: "podAffinity - Et sit aliquip fugiat nostrud ex enim reprehenderit mollit consequat laborum consectetur enim consequat." displayName: "Pod Affinity" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podAffinity" - path: podAntiAffinity description: "podAntiAffinity - Laborum est magna ullamco qui nulla minim ut." displayName: "Pod Anti Affinity" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podAntiAffinity" - path: advanced description: "advanced - Veniam ea aliqua aliqua sint proident consequat laborum sit laborum et deserunt est aliqua exercitation." displayName: "Advanced" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:advanced" - path: hidden description: "hidden - Sunt culpa Lorem ad ad ullamco." displayName: "Hidden" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:hidden" - path: objectWithArray displayName: Object With Array - path: objectWithArray.tags displayName: Tags - path: "objectWithArray.tags[0]" displayName: Tag Element - path: objectWithArray.birthday.month displayName: Birth Month x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:number" - path: objectWithArray.birthday.day displayName: Birth Day x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:number" - path: objectWithArray.birthday.year displayName: Birth Year x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:number" - path: objectWithArray.name displayName: Name - path: arrayWithObject displayName: Array With Object - path: "arrayWithObject[0]" displayName: Element - path: "arrayWithObject[0].organization.name" displayName: Organization Name - path: "arrayWithObject[0].organization.address.street" displayName: Organization Street - path: "arrayWithObject[0].organization.address.city" displayName: Organization City - path: "arrayWithObject[0].organization.address.state" displayName: Organization State - path: "arrayWithObject[0].current" displayName: Is Current x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:checkbox" - path: "arrayWithObject[0].resourceRequirements" displayName: Resource Requirements x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:resourceRequirements" - path: "deeplyNested.foo.bar.baz.bat" displayName: Foo Bar Baz Bat x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:resourceRequirements" - path: deeplyNested displayName: Deeply Nested - path: arrayFieldDependency[0].dependent displayName: Dependent Field displayName: Field dependency inside an array element x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:fieldDependency:arrayFieldDependency[0].enabled:true" statusDescriptors: - path: statuses description: Invalid main status displayName: Status - path: podStatuses description: "podStatuses - Deserunt ea duis culpa nostrud veniam." displayName: Pod Statuses x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podStatuses" - path: otherStatuses description: "otherStatuses - Deserunt ea duis culpa nostrud veniam." displayName: Other Statuses x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podStatuses" - path: podCount description: "podCount - Culpa amet cupidatat ipsum commodo ad dolore reprehenderit dolore esse non culpa." displayName: Pod Count x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podCount" - path: w3Link description: "w3Link - Minim in exercitation veniam laborum quis officia pariatur." displayName: W3 Link x-descriptors: - "urn:alm:descriptor:org.w3:link" - path: conditions description: "conditions - Exercitation magna eu tempor exercitation amet enim sit consectetur commodo esse consectetur." displayName: Conditions x-descriptors: - "urn:alm:descriptor:io.kubernetes.conditions" - path: text description: "text - Fugiat ipsum cillum elit aliqua ea fugiat esse eiusmod minim voluptate enim." displayName: Text x-descriptors: - "urn:alm:descriptor:text" - path: k8sPhase description: "k8sPhase - Sit cupidatat amet id voluptate do labore exercitation sit labore qui officia." displayName: K8s Phase x-descriptors: - "urn:alm:descriptor:io.kubernetes.phase" - path: k8sPhaseReason description: "k8sPhaseReason - Amet ad pariatur magna aliqua sit." displayName: K8s Phase Reason x-descriptors: - "urn:alm:descriptor:io.kubernetes.phase:reason" - path: hidden description: "hidden - Occaecat esse ea commodo duis do fugiat dolore excepteur dolore deserunt qui esse aliquip ipsum." displayName: Hidden x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:hidden" - path: customConditions description: "Some custom defined condition list" displayName: "Custom Conditions" x-descriptors: - "urn:alm:descriptor:io.kubernetes.conditions" - path: otherCustomConditions description: "Some other custom defined condition list" displayName: "Other Custom Conditions" x-descriptors: - "urn:alm:descriptor:io.kubernetes.conditions" - name: mock-resources.test.tectonic.com version: v1 kind: MockResource displayName: Mock Resource (v1) description: (v1) Mock resource instance for testing descriptors resources: [] - name: mock-resources.test.tectonic.com version: v1 kind: MockResource displayName: Mock Resource (v1) description: (v1) Mock resource instance for testing descriptors resources: [] 2) explain the resource by command : `oc explain mock-resources`
Actual results:
2) explain command failed: oc explain mock-resources GROUP: test.tectonic.com KIND: MockResource VERSION: v1error: template: plaintext:39:13: executing "plaintext" at <include "schema" (dict "gvk" $gvk "Document" $.Document "FieldPath" $.FieldPath "Recursive" $.Recursive)>: error calling include: template: plaintext:63:21: executing "schema" at <include "output" (set $ "schema" .)>: error calling include: template: plaintext:101:17: executing "output" at <include "fieldList" (dict "schema" $resolved "level" 1 "Document" $.Document "Recursive" $.Recursive)>: error calling include: template: plaintext:254:15: executing "typeGuess" at <.items>: can't evaluate field items in type bool echo $? 1
Expected results:
The explain command should failed
Additional info: