-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into mpj/split-test-api-users
- Loading branch information
Showing
31 changed files
with
1,027 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# Local development with Kubernetes | ||
|
||
We use tilt to provide a local development environment for Kubernetes. | ||
Tilt is a tool that helps you develop applications for Kubernetes. | ||
It watches your files for changes, rebuilds your containers, and restarts your pods. | ||
It's like having a conversation with your cluster. | ||
|
||
|
||
## Prerequisites | ||
|
||
This guide assumes you have the following tools installed: | ||
|
||
- [Docker](https://docs.docker.com/get-docker/) | ||
- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) | ||
- [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) | ||
* [mkcert](https://github.com/FiloSottile/mkcert) | ||
- [ctlptl](https://github.com/tilt-dev/ctlptl) | ||
- [Tilt](https://docs.tilt.dev/install.html) | ||
* [helm](https://helm.sh/docs/intro/install/) | ||
* [helmfile](https://github.com/helmfile/helmfile) | ||
* [secrets](https://github.com/jkroepke/helm-secrets/wiki/Installation) | ||
* [sops](https://github.com/getsops/sops) | ||
|
||
|
||
### SOPS configuration | ||
|
||
**Generate a SOPS key** | ||
|
||
For this specific step you need to have the `age-keygen` tool installed. | ||
See https://github.com/FiloSottile/age. | ||
Then generate a key: | ||
|
||
```bash | ||
age-keygen -o my-age.key | ||
``` | ||
|
||
**Install the SOPS key** | ||
|
||
Read the SOPS documentation on how to install the key in your environment. | ||
https://github.com/getsops/sops?tab=readme-ov-file#22encrypting-using-age | ||
|
||
On Ubuntu it's like: | ||
|
||
```bash | ||
mkdir -p ~/.config/sops/age/ | ||
cp my-age.key ~/.config/sops/age/keys.txt | ||
chmod 400 ~/.config/sops/age/keys.txt | ||
``` | ||
|
||
**Add the SOPS key to the repository** | ||
|
||
Update the [.sops.yaml](../.sops.yaml) file with the **public** key id you generated. | ||
|
||
|
||
### Helmfile in Docker | ||
|
||
If you use helmfile in Docker, you may need an additional configuration to make | ||
it work with you age key. | ||
|
||
You need to mount `-v "${HOME}/.config/sops/age/:/helm/.config/sops/age/"` | ||
|
||
```bash | ||
#!/bin/sh | ||
|
||
docker run --rm --net=host \ | ||
-v "${HOME}/.kube:/root/.kube" \ | ||
-v "${HOME}/.config/helm:/root/.config/helm" \ | ||
-v "${HOME}/.config/sops/age/:/helm/.config/sops/age/" \ | ||
-v "${HOME}/.minikube:/${HOME}/.minikube" \ | ||
-v "${PWD}:/wd" \ | ||
-e KUBECONFIG=/root/.kube/config \ | ||
--workdir /wd ghcr.io/helmfile/helmfile:v0.150.0 helmfile "$@" | ||
``` | ||
|
||
|
||
## Getting started | ||
|
||
### Create the kubernetes cluster | ||
|
||
Run the following command to create a kubernetes cluster using kind: | ||
|
||
```bash | ||
./bin/start-kind.sh | ||
``` | ||
|
||
**or** run the equivalent using the makefile | ||
|
||
```bash | ||
make start-kind | ||
``` | ||
|
||
### Deploy the application | ||
|
||
```bash | ||
tilt up -f ./bin/Tiltfile | ||
``` | ||
|
||
**or** run the equivalent using the makefile | ||
|
||
```bash | ||
make tilt-up | ||
``` | ||
|
||
That's it! You should now have a local development environment for Kubernetes. | ||
|
||
You can access the application at https://desk.127.0.0.1.nip.io | ||
|
||
## Management | ||
|
||
To manage the cluster, you can use k9s. | ||
|
||
## Next steps | ||
|
||
- Add dimail to the local development environment | ||
- Add a reset demo `cmd_button` to Tilt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
"""Core plugins package.""" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
"""Base plugin class for organization plugins.""" | ||
|
||
|
||
class BaseOrganizationPlugin: | ||
""" | ||
Base class for organization plugins. | ||
Plugins must implement all methods of this class even if it is only to "pass". | ||
""" | ||
|
||
def run_after_create(self, organization) -> None: | ||
"""Method called after creating an organization.""" | ||
raise NotImplementedError("Plugins must implement the run_after_create method") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
"""Helper functions to load and run organization plugins.""" | ||
|
||
from functools import lru_cache | ||
from typing import List | ||
|
||
from django.conf import settings | ||
from django.utils.module_loading import import_string | ||
|
||
from core.plugins.base import BaseOrganizationPlugin | ||
|
||
|
||
@lru_cache(maxsize=None) | ||
def get_organization_plugins() -> List[BaseOrganizationPlugin]: | ||
""" | ||
Return a list of all organization plugins. | ||
While the plugins initialization does not depend on the request, we can cache the result. | ||
""" | ||
return [ | ||
import_string(plugin_path)() for plugin_path in settings.ORGANIZATION_PLUGINS | ||
] | ||
|
||
|
||
def organization_plugins_run_after_create(organization): | ||
""" | ||
Run the after create method for all organization plugins. | ||
Each plugin will be called in the order they are listed in the settings. | ||
Each plugin is responsible to save changes if needed, this is not optimized | ||
but this could be easily improved later if needed. | ||
""" | ||
for plugin_instance in get_organization_plugins(): | ||
plugin_instance.run_after_create(organization) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.