synku
v0.3.3
Published
SYNthesize KUbernetes manifests
Readme
synku
SYNthesize KUbernetes manifests
Why?
- Concise
- Unopinionated
- Typesafe
- Composition
Documentation
https://lajosbencz.github.io/synku/
Examples
Glossary
Manifest
- Kubernetes API Object
Behavior
- Mutates manifests based on user logic
Component
- Contains a list of Manifests
- Has a list of attached Behaviors
- Is organized into a tree structure
- Behaviors of parent components are inherited
Usage
Install
yarn add kubernetes-models synkuCompose
// project.ts
import * as k8s from "kubernetes-models";
import synku, { behavior } from "synku";
export default synku("example", (release) => {
const config = release.add("config");
config
.with(
behavior((component) => {
component.findAll(k8s.v1.ConfigMap).forEach((configMap) => {
configMap.data!.baz = "bax";
});
})
)
.draft(k8s.v1.ConfigMap, {
data: {
foo: "bar",
},
});
});Synthesize
npx synku ./project.ts > project.yamlHelm Charts
Download
helm pull oci://registry-1.docker.io/bitnamicharts/kafka --version 32.4.3 --untar --untardir chartsGenerate
npx synku chart ./charts/kafka --name Kafka --output kafka-chart.tsCompose
// project.ts
import * as k8s from "kubernetes-models";
import synku, { behavior } from "synku";
import { KafkaChart } from "./kafka-chart.ts";
export default synku("example", (release) => {
release
.with(
behavior((component) => {
component.findAll(k8s.v1.ConfigMap).forEach((configMap) => {
configMap.data!.baz = "bax";
});
})
)
.draft(k8s.v1.ConfigMap, {
data: {
foo: "bar",
},
});
const kafka = release.add("kafka", KafkaChart, {
broker: {
persistence: {
enabled: false,
},
},
});
kafka.with(
behavior((component) => {
component.findAll(k8s.v1.ConfigMap).forEach((configMap) => {
delete configMap.data?.baz;
});
})
);
});Synthesize
export SYNKU_TRACE=1
npx synku ./project.ts > project.yaml