Skip to content

lajosbencz/synku

Repository files navigation

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 synku

Compose

// 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.yaml

Helm Charts

Download

helm pull oci://registry-1.docker.io/bitnamicharts/kafka --version 32.4.3 --untar --untardir charts

Generate

npx synku chart ./charts/kafka --name Kafka --output kafka-chart.ts

Compose

// 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

About

SYNthesize KUbernetes manifests

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors