# Infra API References

## APIs

### cloud.pingcap.com/v1

- [provider](./provider.md)
- [network](./network.md)
- [cluster](./cluster.md)
- [backup](./backup.md)
- [restore](./restore.md)
- [import](./import.md)

## API Versioning

The versioning strategy of Infra API is same as [Kubernetes](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning).

## Client Library

### Generic Client

You can use `client.Client` provided by [controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) to do low-level CRUD operations upon Infra API.

1. Introduce the dependencies

```bash
$ VERSION=<version>
$ go get github.com/tidbcloud/infra-api/api@${VERSION}
$ go get sigs.k8s.io/controller-runtime
```

2. Access Infra API

```go
import (
	"k8s.io/client-go/kubernetes/scheme"
	"sigs.k8s.io/controller-runtime/pkg/client"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
)

func main() {
	// register Infra API types 
	_ := cloudv1.AddToScheme(scheme.Scheme)
	infraCli, err = client.New(restConfig, client.Options{
		Scheme: scheme.Scheme,
	})
	cluster := &cloudv1.Cluster{}
	_ := infraCli.Create(context.TODO(), cluster)
	_ := infraCli.Get(context.TODO(), types.NamespacedName{Namespace: cluster.Namespace, Name: cluster.Name}, cluster)
	_ := infraCli.Delete(context.TODO(), cluster)
}
```

### GO SDK

WIP
