apiVersion: api/v1
kind: Plan
name: pd-dr-autosync
schedule: '0 0 * * 1,3,5'
tags: []
testbed:
  generateName: pd-dr-autosync-
  # resourcePool: htap
  reclaimPolicy:
    gcStrategy:
      onFailure:
        artifact:
          monitor: true
          log: true
        reserveEnv:
          durationOnWorkingHour: '{{meta.parameters.onFailureNoReserve}}'
        notification:
          feishu: https://open.feishu.cn/open-apis/bot/v2/hook/259e813d-7676-4876-8de2-962df96f4d8e
      onSuccess:
        notification:
          feishu: https://open.feishu.cn/open-apis/bot/v2/hook/259e813d-7676-4876-8de2-962df96f4d8e 
  items:
  - name: tc
    type: TIDB_CLUSTER
    spec:
      timezone: UTC
      version: '{{meta.parameters.base_image_version}}' 
      pd:
          replicas: 2 
          service:
              type: NodePort
          baseImage: '{{meta.parameters.pd_base_image}}'
          # more refer to: https://github.com/tikv/pd/blob/master/conf/config.toml
          # config is string type and toml format, I prefer uses https://www.convertsimple.com/convert-yaml-to-toml/ to transfer yaml to toml
          config: |
              [replication-mode]
                replication-mode = "dr-auto-sync"
              [replication-mode.dr-auto-sync]
                label-key = "zone"
                primary = "cn-west-1"
                primary-replicas = 2
                dr = "cn-east-1"
                dr-replicas = 1
                wait-store-timeout = "1m"
                wait-sync-timeout = "1m"
              [dashboard]
                internal-proxy = true  
          requests:
              cpu: 2000m
              memory: 4Gi
          limits:
              cpu: 2000m
              memory: 4Gi
      tidb:
        replicas: 2
        baseImage: '{{meta.parameters.tidb_base_image}}'
        #image: hub.pingcap.net/qa/tidb:master
        config: |
          [log]
          # Log level: debug, info, warn, error, fatal.
          level = "info"
        requests:
          cpu: 2000m
          memory: 4Gi
        limits:
          cpu: 8000m
          memory: 16Gi
      tikv:
        replicas: 3
        baseImage: '{{meta.parameters.tikv_base_image}}'
        config: |
          ## Log levels: trace, debug, info, warning, error, critical.
          ## Note that `debug` and `trace` are only available in development builds.
          log-level = "info"
          [storage]
          reserve-space = "0"
          [server.labels]
            zone = "cn-west-1"
        requests:
          cpu: 4000m
          memory: 8Gi
        limits:
          cpu: 8000m
          memory: 16Gi
  - name: tc2
    type: TIDB_CLUSTER
    spec:
        timezone: UTC
        version: '{{meta.parameters.base_image_version}}' 
        cluster:
            name: tc
        pd:
            replicas: 1 
            #image: pingcap/pd:v4.0.14-pre
            baseImage: '{{meta.parameters.pd_base_image}}'
            #image: hub.pingcap.net/qa/pd:master
            # more refer to: https://github.com/tikv/pd/blob/master/conf/config.toml
            # config is string type and toml format, I prefer uses https://www.convertsimple.com/convert-yaml-to-toml/ to transfer yaml to toml
            config: |
                [replication-mode]
                replication-mode = "dr-auto-sync"
                [replication-mode.dr-auto-sync]
                label-key = "zone"
                primary = "cn-west-1"
                primary-replicas = 2
                dr = "cn-east-1"
                dr-replicas = 1
                wait-store-timeout = "1m"
                wait-sync-timeout = "1m"
                [dashboard]
                internal-proxy = true  
            requests:
                cpu: 2000m
                memory: 4Gi
            limits:
                cpu: 2000m
                memory: 4Gi
        tidb:
            replicas: 1
            baseImage: '{{meta.parameters.tidb_base_image}}'
            #image: hub.pingcap.net/qa/tidb:master
            config: |
                [log]
                # Log level: debug, info, warn, error, fatal.
                level = "info"
            requests:
                cpu: 2000m
                memory: 4Gi
            limits:
                cpu: 4000m
                memory: 8Gi
        tikv:
            replicas: 2
            baseImage: '{{meta.parameters.tikv_base_image}}'
            #image: hub.pingcap.net/qa/tikv:master
            #image: hub.pingcap.net/csn/tikv:dr-debug-941ce28
            config: |
                ## Log levels: trace, debug, info, warning, error, critical.
                ## Note that `debug` and `trace` are only available in development builds.
                log-level = "info"
                [storage]
                reserve-space = "0"
                [server.labels]
                    zone = "cn-east-1"
            requests:
                cpu: 4000m
                memory: 8Gi
            limits:
                cpu: 8000m
                memory: 16Gi
                  #topologySpreadConstraints:
                # means the tikv node is evenly distributed in three zone: zone1, zone2, zone3 in our test
                #- topologyKey: zone
                # I suggest don't add the hostname topologyKey since the scale of our testing cluster is small
                # - topologyKey: kubernetes.io/hostname          
  - name: br
    type: BR_NODE
    spec:
      image: '{{meta.parameters.br_image}}'
      artifact:
        artifactPaths:
        - /tmp/br.log*
  - name: benchtoolset
    type: WORKLOAD_NODE
    spec:
      container:
        name: benchtoolset
        image: '{{meta.parameters.bench_toolset_image}}'
        command:
        - tail
        - "-f"
        - "/dev/null"
        resources:
          requests:
            cpu: 8000m
            memory: 16Gi                                                
steps:
- name: pd-dr-001
  caseName: pd_dr_001
  # caseImage: hub.pingcap.net/jianghongmei/endless-pd-dr:latest
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'
- name: pd-dr-002
  caseName: pd_dr_002
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'
- name: pd-dr-003
  caseName: pd_dr_003
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'
- name: pd-dr-004
  caseName: pd_dr_004
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'
- name: pd-dr-005
  caseName: pd_dr_005
  # caseImage: hub.pingcap.net/jianghongmei/endless-pd-dr:latest
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'
- name: pd-dr-006
  caseName: pd_dr_006
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'   
- name: pd-dr-007
  caseName: pd_dr_007
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}' 
- name: pd-dr-008
  caseName: pd_dr_008
  arguments:
  - name: tc
    value: '{{testbed.tc}}'
  - name: tc2
    value: '{{testbed.tc2}}'    
  - name: benchtoolset
    value: '{{testbed.benchtoolset}}'
  - name: br
    value: '{{testbed.br}}'                          
failFast: false
