This is an automated email from the ASF dual-hosted git repository.

wangyang0918 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new de75dcd  [FLINK-27097] Document custom validator implementations
de75dcd is described below

commit de75dcdc51ef3ee8e0477a8799ffe000088546f1
Author: SteNicholas <programg...@163.com>
AuthorDate: Wed May 4 14:07:28 2022 +0800

    [FLINK-27097] Document custom validator implementations
    
    This closes #192.
---
 docs/content/docs/operations/validator.md | 91 +++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/docs/content/docs/operations/validator.md 
b/docs/content/docs/operations/validator.md
new file mode 100644
index 0000000..587cc63
--- /dev/null
+++ b/docs/content/docs/operations/validator.md
@@ -0,0 +1,91 @@
+---
+title: "Validator"
+weight: 5
+type: docs
+aliases:
+- /operations/validator.html
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Custom `FlinkResourceValidator` implementation
+
+`FlinkResourceValidator`, an interface for validating the resources of 
`FlinkDeployment` and `FlinkSessionJob`,  is a pluggable component based on the 
[Plugins](https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/filesystems/plugins)
 mechanism. During development, we can customize the implementation of 
`FlinkResourceValidator` and make sure to retain the service definition in 
`META-INF/services`. 
+The following steps demonstrate how to develop and use a custom validator.
+
+1. Implement `FlinkResourceValidator` interface:
+    ```java
+    package org.apache.flink.kubernetes.operator.validation;
+   
+    import org.apache.flink.kubernetes.operator.crd.FlinkDeployment;
+    import org.apache.flink.kubernetes.operator.crd.FlinkSessionJob;
+   
+    import java.util.Optional;
+   
+    /** Custom validator implementation of {@link FlinkResourceValidator}. */
+    public class CustomValidator implements FlinkResourceValidator {
+   
+        @Override
+        public Optional<String> validateDeployment(FlinkDeployment deployment) 
{
+            if (deployment.getSpec().getFlinkVersion() == null) {
+              return Optional.of("Flink Version must be defined.");
+            }
+            return Optional.empty();
+        }
+   
+        @Override
+        public Optional<String> validateSessionJob(
+                 FlinkSessionJob sessionJob, Optional<FlinkDeployment> 
session) {
+            if (sessionJob.getSpec().getJob() == null) {
+              return Optional.of("The job spec should not be empty");
+            }
+            return Optional.empty();
+        }
+    }
+    ```
+
+2. Create service definition file 
`org.apache.flink.kubernetes.operator.validation.FlinkResourceValidator` in 
`META-INF/services`.   With custom `FlinkResourceValidator` implementation, the 
service definition describes as follows:
+    ```text
+    org.apache.flink.kubernetes.operator.validation.CustomValidator
+    ```
+
+3. Use the Maven tool to package the project and generate the custom validator 
JAR.
+
+4. Create Dockerfile to build a custom image from the 
`apache/flink-kubernetes-operator` official image and copy the generated JAR to 
custom validator plugin directory. 
+    `/opt/flink/plugins` is the value of `FLINK_PLUGINS_DIR` environment 
variable in the flink-kubernetes-operator helm chart. The structure of custom 
validator directory under `/opt/flink/plugins` is as follows:
+    ```text
+    /opt/flink/plugins
+        ├── custom-validator
+        │   ├── custom-validator.jar
+        └── ...
+    ```
+    
+    With the custom validator directory location, the Dockerfile is defined as 
follows:
+    ```shell script
+    FROM apache/flink-kubernetes-operator
+    ENV FLINK_PLUGINS_DIR=/opt/flink/plugins
+    ENV CUSTOM_VALIDATOR_DIR=custom-validator
+    RUN mkdir $FLINK_PLUGINS_DIR/$CUSTOM_VALIDATOR_DIR
+    COPY custom-validator.jar $FLINK_PLUGINS_DIR/$CUSTOM_VALIDATOR_DIR/
+    ```
+
+5. Install the flink-kubernetes-operator helm chart with the custom image and 
verify the `deploy/flink-kubernetes-operator` log has:
+    ```text
+    2022-05-04 14:01:46,551 o.a.f.k.o.u.FlinkUtils         [INFO ] Discovered 
resource validator from plugin directory[/opt/flink/plugins]: 
org.apache.flink.kubernetes.operator.validation.CustomValidator.
+    ```

Reply via email to