<img src="https://user-images.githubusercontent.com/15922119/44146028-0dac3246-a08e-11e8-99dc-95c8731e9f3a.png" alt="Exoscale" align="right" height="120" width="120">
<img src="https://github.com/kubernetes/kubernetes/raw/master/logo/logo.png" alt="Exoscale" align="right" height="100" width="100">


# Kubernetes Cluster API Provider Exoscale


## Prerequisite

- [kubectl 1.14+](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
- deepcopy-gen `$ go get k8s.io/code-generator/cmd/deepcopy-gen`
- clone into `$GOPATH/src/sigs.k8s.io/cluster-api-provider-exoscale`

## Docker side

```console
% make docker-build

% make docker-push
```

## Run

Configuration is done via the following environement variables.


```console
export EXOSCALE_API_KEY=EXO...
export EXOSCALE_SECRET_KEY=...
export EXOSCALE_COMPUTE_ENDPOINT=https://api.exoscale.com/compute
```

[kind](https://github.com/kubernetes-sigs/kind) is required to act as the bootstrap cluster. `run` calls `clusterctl`.

```
% go get -u sigs.k8s.io/kind

% make run
```

Follow the master bootstrap.

```console
% export KUBECONFIG=$(kind get kubeconfig-path --name=clusterapi)

% kubectl logs -f exoscale-provider-controller-... -n exoscale-provider-system
```

Follow the node bootstrap.

```console
% kubectl --kubeconfig kubeconfig logs -f exoscale-provider-controllers-... -n exoscale-provider-system
```

And finally.

```console
% kubectl --kubeconfig kubeconfig get nodes
NAME                       STATUS   ROLES    AGE     VERSION
my-exoscale-master-s5lmn   Ready    master   4m23s   v1.13.3
my-exoscale-node-n7dww     Ready    <none>   34s     v1.13.3
```

Deleting the cluster use `clusterctl` as well.

```console
% make delete
```


## Use Exoscale Cluster API

### Nodes example
- [Add a node to a deployed cluster](./doc/add-node-example.md)
- [Delete a node to a deployed cluster](./doc/delete-node-example.md)

### Create a cluster with `kubectl`
- [Cluster with two nodes example](./doc/create-cluster-kubectl.md)