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

# Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: dubbo-demo
---
apiVersion: v1
kind: Namespace
metadata:
  name: dubbo-system
---

# Seata-Mysql
apiVersion: v1
kind: ConfigMap
metadata:
  name: seata-mysql-init
  namespace: dubbo-demo
data:
  # Set the properties you want to override, properties not set here will be using the default values
  # check application.properties inside dubbo-admin project for the keys supported
  dubbo-biz.sql: |
    DROP TABLE IF EXISTS `storage_tbl`;
    CREATE TABLE `storage_tbl`
    (
        `id`             int(11) NOT NULL AUTO_INCREMENT,
        `commodity_code` varchar(255) DEFAULT NULL,
        `count`          int(11)      DEFAULT 0,
        PRIMARY KEY (`id`),
        UNIQUE KEY (`commodity_code`)
    ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8;
    
    
    DROP TABLE IF EXISTS `order_tbl`;
    CREATE TABLE `order_tbl`
    (
        `id`             int(11) NOT NULL AUTO_INCREMENT,
        `user_id`        varchar(255) DEFAULT NULL,
        `commodity_code` varchar(255) DEFAULT NULL,
        `count`          int(11)      DEFAULT 0,
        `money`          int(11)      DEFAULT 0,
        PRIMARY KEY (`id`)
    ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8;
    
    
    DROP TABLE IF EXISTS `account_tbl`;
    CREATE TABLE `account_tbl`
    (
        `id`      int(11) NOT NULL AUTO_INCREMENT,
        `user_id` varchar(255) DEFAULT NULL,
        `money`   int(11)      DEFAULT 0,
        PRIMARY KEY (`id`)
    ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8;

  undo-log.sql: |
    CREATE TABLE `undo_log`
    (
        `id`            bigint(20) NOT NULL AUTO_INCREMENT,
        `branch_id`     bigint(20) NOT NULL,
        `xid`           varchar(100) NOT NULL,
        `context`       varchar(128) NOT NULL,
        `rollback_info` longblob     NOT NULL,
        `log_status`    int(11) NOT NULL,
        `log_created`   datetime     NOT NULL,
        `log_modified`  datetime     NOT NULL,
        PRIMARY KEY (`id`),
        UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: seata-mysql-pv-volume
  namespace: dubbo-demo
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: seata-mysql-pv-claim
  namespace: dubbo-demo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-mysql
  namespace: dubbo-demo
spec:
  selector:
    matchLabels:
      app: seata-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: seata-mysql
    spec:
      containers:
        - image: mysql:5.7
          name: seata-mysql
          env:
            - name: MYSQL_DATABASE
              value: seata-demo
            - name: MYSQL_ROOT_PASSWORD
              value: helloworld
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: seata-mysql-persistent-storage
              mountPath: /var/lib/mysql
            - name: seata-mysql-init
              mountPath: /docker-entrypoint-initdb.d
      volumes:
        - name: seata-mysql-persistent-storage
          persistentVolumeClaim:
            claimName: seata-mysql-pv-claim
        - name: seata-mysql-init
          configMap:
            name: seata-mysql-init
---
apiVersion: v1
kind: Service
metadata:
  name: seata-mysql
  namespace: dubbo-demo
spec:
  ports:
    - port: 3306
  selector:
    app: seata-mysql
  clusterIP: None
---

# Seata Server

apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-server
  namespace: dubbo-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: seata-server
  template:
    metadata:
      labels:
        app: seata-server
    spec:
      containers:
        - name: seata-server
          image: seataio/seata-server:latest
          imagePullPolicy: Always
          ports:
            - name: seata-server
              containerPort: 8091
              protocol: TCP
          env:
            - name: SEATA_PORT
              value: "8091"
            - name: STORE_MODE
              value: "file"
---
apiVersion: v1
kind: Service
metadata:
  name: seata-server
  namespace: dubbo-demo
spec:
  ports:
    - port: 8091
  selector:
    app: seata-server
  clusterIP: None
---

# Nacos
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nacos
  namespace: dubbo-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      containers:
        - name: consumer
          image: nacos/nacos-server:v2.1.2
          imagePullPolicy: Always
          resources:
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
            - containerPort: 8848
              name: client
            - containerPort: 9848
              name: client-rpc
          env:
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: NACOS_APPLICATION_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: MODE
              value: "standalone"
            - name: NACOS_AUTH_ENABLE
              value: "true"
---

# Account
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-account
  namespace: dubbo-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: seata-account
  template:
    metadata:
      labels:
        app: seata-account
    spec:
      containers:
        - name: seata-account
          image: apache/dubbo-demo:dubbo-samples-seata-account_0.0.1
          imagePullPolicy: Always
          ports:
            - name: dubbo
              containerPort: 20881
              protocol: TCP
            - name: qos
              containerPort: 20991
              protocol: TCP
          env:
            - name: JAVA_TOOL_OPTIONS
              value: -Dnacos.address=nacos.dubbo-system.svc -Dmysql.address=seata-mysql -Dseata.address=seata-server
---

# Business
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-business
  namespace: dubbo-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: seata-business
  template:
    metadata:
      labels:
        app: seata-business
    spec:
      containers:
        - name: seata-business
          image: apache/dubbo-demo:dubbo-samples-seata-business_0.0.1
          imagePullPolicy: Always
          ports:
            - name: dubbo
              containerPort: 20882
              protocol: TCP
            - name: qos
              containerPort: 20992
              protocol: TCP
          env:
            - name: JAVA_TOOL_OPTIONS
              value: -Dnacos.address=nacos.dubbo-system.svc -Dmysql.address=seata-mysql -Dseata.address=seata-server
---

# Order
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-order
  namespace: dubbo-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: seata-order
  template:
    metadata:
      labels:
        app: seata-order
    spec:
      containers:
        - name: seata-order
          image: apache/dubbo-demo:dubbo-samples-seata-order_0.0.1
          imagePullPolicy: Always
          ports:
            - name: dubbo
              containerPort: 20883
              protocol: TCP
            - name: qos
              containerPort: 20993
              protocol: TCP
          env:
            - name: JAVA_TOOL_OPTIONS
              value: -Dnacos.address=nacos.dubbo-system.svc -Dmysql.address=seata-mysql -Dseata.address=seata-server
---

# Storage
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-storage
  namespace: dubbo-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: seata-storage
  template:
    metadata:
      labels:
        app: seata-storage
    spec:
      containers:
        - name: seata-storage
          image: apache/dubbo-demo:dubbo-samples-seata-storage_0.0.1
          imagePullPolicy: Always
          ports:
            - name: dubbo
              containerPort: 20884
              protocol: TCP
            - name: qos
              containerPort: 20994
              protocol: TCP
          env:
            - name: JAVA_TOOL_OPTIONS
              value: -Dnacos.address=nacos.dubbo-system.svc -Dmysql.address=seata-mysql -Dseata.address=seata-server
---