Setting up a Development Environment
Tilt is a great way to run OpenCost on a local or remote Kubernetes environment. Tilt automatically redeploys OpenCost when code or configuration changes, provides easy access to back end debugging, and automatically handles port forwarding.
Prerequisites
Required
- Delve and the Delve plugin for your preferred IDE or text editor
- Docker Desktop or Docker Engine
- Go
- Helm
- kind or your preferred tool for a Kubernetes development environment
- kubectl
- Node.js
- Tilt
Run OpenCost
- In a terminal, run:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- Update
tilt-values.yaml
or create a new yaml file to contain desired attributes - see Helm chart. - Optional - configure JSON files for cloud integration(s) and a service key (see configuration documentation for more).
- Update
Tiltfile
to allow your remote Kubernetes contexts, if desired. See comment block near top of theTiltfile
. See Tilt documentation here. - If using
kind
, in a terminal, runkind create cluster
to create local cluster, or set your Kubernetes context to the desired cluster. - Configure a
tilt_config.json
file - see Tilt Command Options below. - In a terminal, run
tilt up
at the root of the OpenCost repository. See Tilt Command Options below for more options. - Follow instructions in the terminal to open the Tilt UI in browser.
- As you update code,
tilt_config.json
, ortilt-values.yaml
, Tilt will automatically watch relevant source code and recompile, build, deploy, and run tests. tilt down
will tear down resources created, otherwise they will continue to run indefinitely.kind delete
cluster will delete the local cluster, if desired.
Tilt Command Options
via tilt_config.json
The best way to configure OpenCost to use Tilt is with a tilt_config.json
file in the root of the OpenCost repository. The file must live there; a symlink is an alternative if you wish to store it elsewhere. This file is automatically reloaded in Tilt when updated. Omitted values will use defaults.
Example file:
{
"arch":"amd64",
"cloud-integration":"../cloud-integration.json"
}
via CLI
These options can also be placed after tilt up --
.
Example command:
tilt up -- --arch arm64 --docker-repo dockerhub-username --cloud-integration ../cloud-integration.json --service-key ../service-key.json
Options defined from the CLI will override those from tilt_config.json
.
Options
arch
Value:amd64
(default),arm64
cloud-integration
Value: Path to a JSON file for cloud integrations Optional. Defaults to an empty string. This is the path to the JSON file to use for thecloud-integration
secret. See configuration documentation here.delve-continue
Value:true
(default) orfalse
Optional, defaults to true. Determines if the--continue
flag is used with delve. By default, this will let applications start without a debugger attached.false
will wait for a debugger to attach before starting.docker-repo
Value: Docker Hub username or repository, defaults to an empty string. Required for a remote cluster, optional for local. Optional. This is the CPU architecture of the desired node(s) on the cluster. The value is prepended to the Docker image names (the -t flag in a Docker build command). See Docker Documentation.helm-values
Optional. Defaults to./tilt-values.yaml
This is the path to the values.yaml file that will be used for the OpenCost Helm chart.service-key
Value: Path to a JSON file for a service key Optional. Defaults to an empty string. This is the path to the JSON file to use for theservice-key
secret. See configuration documentation.port-costmodel
Optional. Defaults to 9003. This is the port forwarded to localhost for the costmodel (back end). Note: Intilt_config.json
, this is a string and must be in quotes, since Tilt options must be a bool or a string.port-debug
Optional. Defaults to 40000. This is the port forwarded to localhost for delve. Note: Intilt_config.json
, this is a string and must be in quotes, since Tilt options must be a bool or a string.port-prometheus
Optional. Defaults to 9080. This is the port forwarded to localhost for Prometheus. Note: Intilt_config.json
, this is a string and must be in quotes, since Tilt options must be a bool or a string.port-ui
Optional. Defaults to 9090. This is the port forwarded to localhost for the web UI. Note: Intilt_config.json
, this is a string and must be in quotes, since Tilt options must be a bool or a string.
Attach Debugger to the Back End
The OpenCost back end auto starts with delve by default. Configure your IDE or text editor to attach to http://localhost:40000
(or specified value of the port-debug
option).
If you want to attach the debugger at startup, remove the --continue
flag from the entrypoint in the docker_build_with_restart
function in the Tiltfile
, then connect the debugger. Once connected, the OpenCost back end will start.