diff --git a/deploy/crd.yaml b/deploy/crd.yaml index acd245e9..3ac3c8d2 100644 --- a/deploy/crd.yaml +++ b/deploy/crd.yaml @@ -11,9 +11,357 @@ spec: singular: flinkapplication shortNames: - flinkapp - scope: Namespaced version: v1alpha1 + validation: + # openAPIV3Schema is the schema for validating custom objects. + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + image: + type: string + imagePullPolicy: + type: string + enum: [Always, Never, IfNotPresent] + imagePullSecrets: + type: array + items: + type: object + properties: + name: + type: string + jarName: + type: string + programArgs: + type: string + entryClass: + type: string + flinkVersion: + type: string + restartNonce: + type: string + parallelism: + type: integer + minimum: 1 + deleteMode: + type: string + enum: [Savepoint, None, ForceCancel] + deploymentMode: + type: string + enum: [Dual] + rpcPort: + type: integer + minimum: 1 + maximum: 65535 + blobPort: + type: integer + minimum: 1 + maximum: 65535 + queryPort: + type: integer + minimum: 1 + maximum: 65535 + metricsQueryPort: + type: integer + minimum: 1 + maximum: 65535 + flinkConfig: + type: object + properties: + additionalProperties: + type: string + savepointInfo: + type: object + properties: + savepointLocation: + type: string + jobManagerConfig: + type: object + properties: + replicas: + type: integer + minimum: 1 + offHeapMemoryFraction: + type: float + nodeSelector: + type: object + properties: + additionalProperties: + type: string + envConfig: + type: object + properties: + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: {} + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + resources: + type: object + properties: + requests: + type: object + properties: + memory: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + cpu: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + ephemeral-storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + limits: + type: object + properties: + memory: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + cpu: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + ephemeral-storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + taskManagerConfig: + type: object + properties: + taskSlots: + type: integer + minimum: 1 + offHeapMemoryFraction: + type: float + nodeSelector: + type: object + properties: + additionalProperties: + type: string + envConfig: + type: object + properties: + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: {} + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + resources: + type: object + properties: + requests: + type: object + properties: + memory: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + cpu: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + ephemeral-storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + limits: + type: object + properties: + memory: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + cpu: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + ephemeral-storage: + type: string + pattern: ^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$ + volumes: + type: array + items: + type: object + properties: + name: + type: string + required: + - name + volumeMounts: + type: array + items: + type: object + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - name + - mountPath + required: + - image + - jarName + - parallelism + - entryClass additionalPrinterColumns: - name: Phase @@ -42,4 +390,4 @@ spec: JSONPath: .status.jobStatus.jobRestartCount - name: Age type: date - JSONPath: .metadata.creationTimestamp \ No newline at end of file + JSONPath: .metadata.creationTimestamp diff --git a/integ/test_app.yaml b/integ/test_app.yaml index a1586faa..83351487 100644 --- a/integ/test_app.yaml +++ b/integ/test_app.yaml @@ -35,7 +35,7 @@ spec: path: /tmp/checkpoints type: Directory flinkVersion: "1.8" - deployType: Dual + deploymentMode: Dual jarName: "operator-test-app-1.0.0-SNAPSHOT.jar" parallelism: 3 entryClass: "com.lyft.OperatorTestApp" diff --git a/pkg/apis/app/v1alpha1/types.go b/pkg/apis/app/v1alpha1/types.go index 96fbdf09..d8cce778 100644 --- a/pkg/apis/app/v1alpha1/types.go +++ b/pkg/apis/app/v1alpha1/types.go @@ -40,7 +40,7 @@ type FlinkApplicationSpec struct { EntryClass string `json:"entryClass,omitempty"` ProgramArgs string `json:"programArgs,omitempty"` SavepointInfo SavepointInfo `json:"savepointInfo,omitempty"` - DeploymentMode DeploymentMode `json:"deploymentMode"` + DeploymentMode DeploymentMode `json:"deploymentMode,omitempty"` RPCPort *int32 `json:"rpcPort,omitempty"` BlobPort *int32 `json:"blobPort,omitempty"` QueryPort *int32 `json:"queryPort,omitempty"` @@ -49,7 +49,7 @@ type FlinkApplicationSpec struct { Volumes []apiv1.Volume `json:"volumes,omitempty"` VolumeMounts []apiv1.VolumeMount `json:"volumeMounts,omitempty"` RestartNonce string `json:"restartNonce"` - DeleteMode DeleteMode `json:"deleteMode"` + DeleteMode DeleteMode `json:"deleteMode,omitempty"` } type FlinkConfig map[string]interface{} @@ -101,7 +101,7 @@ type JobManagerConfig struct { Environment EnvironmentConfig `json:"envConfig"` Replicas *int32 `json:"replicas,omitempty"` OffHeapMemoryFraction *float64 `json:"offHeapMemoryFraction,omitempty"` - NodeSelector map[string]string `json:"nodeSelector"` + NodeSelector map[string]string `json:"nodeSelector,omitempty"` } type TaskManagerConfig struct {