Ledger
Ledger allows you to record versions of applications you manage. It gives insights in your team's deployment habits.
flowchart TB
subgraph ledger [ ]
ui(server-ui) --> server(server-api)
admin(admin-cli) --> server
server --> database[(Database)]
end
subgraph external
client(client-cli) ---> server
agent(kubernetes-agent) ---> server
curl([curl]) ---> server
end
Installation
helm repo add ledger https://stenic.github.io/ledger/
helm install ledger --namespace ledger ledger/ledger
Check the helm chart for more configuration options.
Collecting versions
Ledger lets you choose how you want to record versions.
- Client CLI
- Kubernetes agent
- Direct GraphQL API
Client CLI
The client CLI simplifies the interaction with the API. This requires a TOKEN to be used, you can use an OIDC token or generate a long-lived token using the admin CLI.
curl -o ledger https://[ledger-installation]/download
chmod +x ledger
./ledger client new-version app env version
Kubernetes Agent
It will collect changes to Deployments and Statefulsets. When a change is detected, the agent will use the image name without the repository as the application and the tag as the version. This can be overwritten by using setting one or more of the annotations below.
Aannotation | Description | Default |
---|---|---|
ledger.stenic.io/location |
Overwrite the location | Set by the agent |
ledger.stenic.io/environment |
Overwrite the environment | Resource namespace |
ledger.stenic.io/application |
Overwrite the application name | The image without the repository |
GraphQL API
Communication between any system is possible using the GraphQL API. This requires a TOKEN to be used, you can use an OIDC token or generate a long-lived token using the admin CLI.
export TOKEN=ey...
export version=1.2.3
curl 'https://ledger.development.tbnlabs.be/query' \
-H "authorization: Bearer $TOKEN" \
-H 'content-type: application/json' \
--data-raw "{\"query\":\"mutation { createVersion( input: { application:\\\"$version\\\", environment:\\\"test\\\", version:\\\"$version\\\" } ) { id } }\"}" \
--compressed \
--insecure
Administration
kubectl exec -ti svc/ledger-server /app/ledger admin -h