Kleat is tool for managing Spinnaker configuration files that is intended to replace Halyard. Please see the RFC for an overview of what this tool will do.
It is currently under active development, but is ready for early adopters to try in development clusters! Please share any feedback in the #kleat channel in Spinnaker slack.
Please see spinnaker/kustomization-base for step-by-step instructions on how to install Spinnaker to a Kubernetes cluster using kleat and kustomize.
Please see the migration README for details on migrating from Halyard.
Download the appropriate binary from the releases page.
kleat generate /path/to/halconfig /path/to/output/directorykleat helpkleat versionThe overarching design goal of kleat is that is should be as lightweight as possible, and should know as little as possible about implementation details of Spinnaker's microservices.
Problems should be solved at the right level of abstraction. For example:
kleat hard-code defaults.kleat to catch erroneous config.This is in contrast to Halyard, which often had detailed knowledge of how the Spinnaker microservices worked (even to the point of importing a number of the microservices as libraries).
Much of the the effort in writing kleat involved:
kleathalconfig and the microservice configsAll configurable fields should have sensible defaults; users should be able to get a working installation of Spinnaker with as little config as possible.
The microservices are responsible for defaulting config properties to sensible values; kleat should not explicitly default any config properties. If a property has not been explicitly configured by the user, kleat should omit it from the generated output and let the relevant microservice handle defaulting.
While it might seem reasonable to have kleat set default values for a service's properties, the need to do this is generally a sign that the service should better default its properties.
Our experience with Halyard is that having a config management tool handle defaulting leads to the following issues:
One of the reasons that Halyard became difficult to maintain is that it tried to solve a lot of problems that were better solved at a different level of abstraction.
The core competency of kleat is understanding what parts of the halconfig belong in each microservice's config. This is valuable, as:
halconfig and defer to kleat to generate microservice configs.kleat allows users to specify these parameters once and handles duplicating them in the required config files.kleat should not transform input fields to the halconfig and should just pass these through unchanged to the appropriate places in the output configs.
If it seems necessary for kleat to transform a config value before passing it along to the microservice, please consider updating the relevant microservice to handle this transformation when loading its config. This will allow users manually writing their microservice configs to benefit from the change, and will keep the code handling this transformation in the relevant microservice rather than in the config management tool.