# Dev guide

## Test

```bash
export KUBECONFIG="PATH_TO_KUBE_CONFIG"

cat > config.yaml <<EOF
provider: k8s
k8s:
  sdkKubeConfig: "$KUBECONFIG"
  tidbCluster:
    readyCheck:
      pingDB: false
tcms: http://tcms.pingcap.net
jwtPubKey: "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGt\
    pRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUExRndybU5rRlNoc0\
    ZmREdYRFN3MQp3V2J2UDZSRi9LbmNhRmh2RzRtd3UwN1ZsNmJBVnB2U\
    lRZeEM3cHJLbWhPNnlqNmdtK3BtN0UzT05JYURzeTRmCnh6QUlqZjBL\
    NGhXVzVKRlBpSU12ZGYxUTl1c0k3R1g0VkVqMXZmcnI4K3hzTUxxTEd\
    iZTZQS1Y1RDNxYk1qRU4KQjJ5TXBHRWRMUHFYZFJyTlJacTlPUkdoen\
    I1cWxkNTI5TGowUjNoWXliUzcxdVQxcXRPNkhaOEpOR0dGTE1xUgpla\
    3pDbUZBQkZPcURFQXVweGxDUDIwdTVuanRwSm1iZ1dMa3Y1NHRMMTZu\
    bFN4Ym9TOUtSREFBczM0WGczd3JnCjhqR0VLZDdweEFvZTU4a2pMUmt\
    vRGMrTC9KZmU3Z3NHSEZtdndERUdFbG8wUjBZYlFHaC9ldGVYQmduek\
    JXcGgKQXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg=="
EOF

bin/rms --config=config/config.yaml
```

### Create testbed

```bash
curl --location --request POST 'http://127.0.0.1/api/v1/testbed' \
--header 'Content-Type: application/json' \
--data-raw '{
  "generateName": "testbed-",
  "items": [
    {
      "name": "tc-1",
      "type": "TIDB_CLUSTER",
      "spec": {
        "pd": {
          "replicas": 1,
          "image": "pingcap/pd:v5.0.0"
        },
        "tidb": {
          "replicas": 1,
          "image": "pingcap/tidb:v5.0.0"
        },
        "tikv": {
          "replicas": 1,
          "image": "pingcap/tikv:v5.0.0"
        }
      },
      "qos": {
        "tidb": {
          "podGroup": "cluster-1",
          "exclusive": false
        },
        "tikv": {
          "podGroup": "cluster-1",
          "exclusive": true
        }
      }
    },
    {
      "name": "workload",
      "type": "WORKLOAD_NODE",
      "spec": {
        "container": {
          "name": "alpineblock",
          "image": "alpine:latest",
          "resources": {
            "requests": {
              "memory": "64Mi",
              "cpu": "250m",
              "storage": "1Gi"
            }
          }
        }
      }
    },
    {
      "name": "tidb-lightning",
      "type": "TIDB_LIGHTNING",
      "spec": {
        "image": "docker.io/pingcap/tidb-lightning:v5.0.1",
        "resources": {
          "requests": {
            "memory": "64Mi",
            "cpu": "250m",
            "storage": "1Gi"
          }
        }
      },
      "qos": {
        "podGroup": "cluster-1",
        "exclusive": true
      }
    }
  ],
  "qos": [
    {
      "podGroup": "cluster-1"
    }
  ]
}'
```

### Get testbed

```bash
curl --location --request GET 'http://127.0.0.1/api/v1/testbed' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "testbed-xd7fq",
    "items": [
        {
            "name": "tc-1",
            "testbed": "testbed-xd7fq",
            "type": "TIDB_CLUSTER"
        },
        {
            "name": "tc-2",
            "testbed": "testbed-xd7fq",
            "type": "TIDB_CLUSTER"
        }
    ]
}'
```

### Delete testbed

```bash
curl --location --request DELETE 'http://127.0.0.1/api/v1/testbed' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "testbed-xd7fq"
}'
```

## Deployment

```bash
kubectl apply -f deploy/*.yaml
```

### Upgrade

```bash
kubectl rollout restart deployments/rms-apiserver -n test-infra
```