################################################################################
#  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.
################################################################################

apiVersion: flink.apache.org/v1beta1
kind: FlinkBlueGreenDeployment
metadata:
  name: basic-bg-laststate-example
spec:
  configuration:
    kubernetes.operator.bluegreen.deployment-deletion.delay: "1s"
  template:
    spec:
      image: flink:1.20
      flinkVersion: v1_20
      flinkConfiguration:
        rest.port: "8081"
        execution.checkpointing.interval: "10s"
        execution.checkpointing.storage: "filesystem"
        state.backend.incremental: "true"
        state.checkpoints.dir: file:///opt/flink/volume/flink-cp
        state.savepoints.dir: file:///opt/flink/volume/flink-sp
        state.checkpoints.num-retained: "5"
        taskmanager.numberOfTaskSlots: "1"
      serviceAccount: flink
      jobManager:
        resource:
          memory: 1G
          cpu: 1
        podTemplate:
          spec:
            containers:
              - name: flink-main-container
                resources:
                  requests:
                    ephemeral-storage: 2048Mi
                  limits:
                    ephemeral-storage: 2048Mi
                volumeMounts:
                  - mountPath: /opt/flink/volume
                    name: flink-volume
            volumes:
              - name: flink-volume
                persistentVolumeClaim:
                  claimName: flink-bg-laststate
      taskManager:
        resource:
          memory: 2G
          cpu: 1
      job:
        jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
        parallelism: 1
        entryClass: org.apache.flink.streaming.examples.statemachine.StateMachineExample
        args:
          - "--error-rate"
          - "0.15"
          - "--sleep"
          - "30"
        upgradeMode: last-state
      mode: native

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: flink-bg-laststate
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi

---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
  labels:
    app.kubernetes.io/component: controller
  name: nginx
spec:
  controller: k8s.io/ingress-nginx