2022-01-12 08:06:10 +00:00
# Keycloak on Quarkus
The module holds the codebase to build the Keycloak Operator on top of [Quarkus ](https://quarkus.io/ ).
Using the [Quarkus Operator SDK ](https://github.com/quarkiverse/quarkus-operator-sdk ).
## Activating the Module
When build from the project root directory, this module is only enabled if the installed JDK is 11 or newer.
## Building
Ensure you have JDK 11 (or newer) installed.
Build the Docker image with:
```bash
mvn clean package -Doperator -Dquarkus.container-image.build=true
```
2022-02-11 11:55:57 +00:00
## Configuration
The Keycloak image can be configured, when starting the operator, using the Java property:
```
operator.keycloak.image
```
And the imagePullPolicy with:
```
operator.keycloak.image-pull-policy
```
2022-01-12 08:06:10 +00:00
## Contributing
### Quick start on Minikube
Enable the Minikube Docker daemon:
```bash
eval $(minikube -p minikube docker-env)
```
Compile the project and generate the Docker image with JIB:
```bash
mvn clean package -Doperator -Dquarkus.container-image.build=true -Dquarkus.kubernetes.deployment-target=minikube
```
2022-01-13 10:34:35 +00:00
Install the CRD definition and the operator in the cluster in the `keycloak` namespace:
2022-01-12 08:06:10 +00:00
```bash
2022-01-13 10:34:35 +00:00
kubectl apply -k target
```
to install in the `default` namespace:
```bash
kubectl apply -k overlays/default-namespace
```
Remove the created resources with:
```bash
kubectl delete -k < previously-used-folder >
2022-01-12 08:06:10 +00:00
```
2022-02-08 14:13:58 +00:00
### Testing
Testing allows 2 methods specified in the property `test.operator.deployment` : `local` & `remote` .
`local` : resources will be deployed to the local cluster and the operator will run out of the cluster
`remote` : same as local test but an image for the operator will be generated and deployed run inside the cluster
```bash
mvn clean verify \
-Dquarkus.container-image.build=true \
-Dquarkus.container-image.tag=test \
-Dquarkus.kubernetes.deployment-target=kubernetes \
-Dtest.operator.deployment=remote
2022-03-09 13:25:18 +00:00
```
To run tests on Mac with `minikube` and the `docker` driver you should run `minikube tunnel` in a separate shell and configure the Java properties as follows:
```bash
-Dtest.operator.kubernetes.ip=localhost
```
On Linux or on Mac using `minikube` on a VM, instead you should pass this additional property:
```bash
-Dtest.operator.kubernetes.ip=$(minikube ip)
```
2022-03-21 17:52:00 +00:00
To avoid skipping tests that are depending on custom Keycloak images, you need to build those first:
```bash
2022-03-24 15:18:24 +00:00
./build-testing-docker-images.sh [SOURCE KEYCLOAK IMAGE TAG] [SOURCE KEYCLOAK IMAGE]
2022-03-21 17:52:00 +00:00
```
And run the tests passing an extra Java property:
```bash
-Dtest.operator.custom.image=custom-keycloak:latest
```