-
Bug
-
Resolution: Not a Bug
-
Undefined
-
None
-
4.9
-
None
-
Low
-
None
-
False
-
Description of problem:
Here is one of the affected CRD from certified hazelcast-platform-operator : https://github.com/hazelcast/hazelcast-platform-operator/blob/main/config/crd/bases/hazelcast.com_hazelcasts.yaml in spec, there is a schema "exposeExternally" which does not have defaults specified for itself : ----------------- exposeExternally: description: Configuration to expose Hazelcast cluster to external clients. properties: discoveryServiceType: default: LoadBalancer description: Type of the service used to discover Hazelcast cluster. type: string memberAccess: description: 'How each member is accessed from the external client. Only available for "Smart" client and valid values are: - "NodePortExternalIP" (default): each member is accessed by the NodePort service and the node external IP/hostname - "NodePortNodeName": each member is accessed by the NodePort service and the node name - "LoadBalancer": each member is accessed by the LoadBalancer service external address' enum: - NodePortExternalIP - NodePortNodeName - LoadBalancer type: string type: default: Smart description: 'Specifies how members are exposed. Valid values are: - "Smart" (default): each member pod is exposed with a separate external address - "Unisocket": all member pods are exposed with one external address' enum: - Smart - Unisocket type: string type: object ----------------- If we go to the form view to create "Hazelcast" Custom Resource, and then switch back to the yaml view, here is the yaml rendered : ----------------- spec: agent: repository: docker.io/hazelcast/platform-operator-agent version: 0.1.0 clusterName: dev repository: docker.io/hazelcast/hazelcast-enterprise imagePullPolicy: IfNotPresent version: 5.1.2 clusterSize: 3 exposeExternally: discoveryServiceType: LoadBalancer type: Smart persistence: autoForceStart: false backupType: Local clusterDataRecoveryPolicy: FullRecoveryOnly licenseKeySecret: hazelcast-license-key ----------------- For the operator to work, "exposeExternally" is not required and should be completely optional unless explicitly defined and there is no default specifed for it but it gets filled up using the default values of the child properties "discoveryServiceType" and "type". The expectation of the developer is to make this optional. Adding an empty default for exposeExternally does not work. Also this conflicts with how the custom resources are created by default by k8s. if we create using the following spec : ---------- kind: Hazelcast apiVersion: hazelcast.com/v1alpha1 metadata: name: hazelcast namespace: default spec: clusterSize: 3 licenseKeySecret: hazelcast-license-key repository: docker.io/hazelcast/hazelcast-enterprise version: 5.1.2 ---------- k8s does not add exposeExternally to the resource by default. It fills up default values for the child properties only if one of the properties are given. Example if "discoveryServiceType" is specified in yaml, "type" also gets filled up. So "exposeExternally" remains optional unless specified.
Version-Release number of selected component (if applicable):
4.9 4.10
How reproducible:
Always
Steps to Reproduce:
1. Install 4.9/4.10 and Hazelcast Platform Operator platform operator 2. create "Hazelcast" resource from UI, click form view and then check yaml view, it has "exposeExternally
Actual results:
exposeExternally gets filled up
Expected results:
exposeExternally should not be filled up or there should be a way to mark this schema as optional by default
Additional info:
Migrated from https://bugzilla.redhat.com/show_bug.cgi?id=2102735
- is blocked by
-
CONSOLE-3637 Update rjsf to latest
- To Do
- is incorporated by
-
CONSOLE-3639 Omit JSON schema defaults from form generation
- To Do
- links to
(1 links to)