gybe

A simple YAML transpilation tool for rendering kubernetes manifests


Keywords
cli, gybe, kubernetes, python, python3, validation, yaml
License
MIT
Install
pip install gybe==0.3.1

Documentation

Gybe

PyPI Package codecov.io

Transpile Kubernetes manifests with your simple values.yaml files using python type-hints. Gybe is a simple, declarative, and more pythonic alternative to helm that makes it easier to develop modest kubernetes deployments.

Reqiurements

Python 3.10+

Install

pip install gybe

Example

Create a simple values.yaml file:

image: python:3
command:
  - python
  - -m
  - http.server

Create a chart.py file:

import gybe


def create_standard_container(image: str, command: List[str]):
    return gybe.k8s.Container(image=image, command=command, name='my-python-server')


@gybe.transpiler
def two_pods(image: str, command: list[str]) -> gybe.Manifest:
    pod_spec = gybe.k8s.PodSpec(
        containers=[create_standard_container(image=image, command=command)],
    )
    return [
        gybe.k8s.Pod(
            kind='Pod',
            apiVersion='v1',
            metadata=gybe.k8s.ObjectMeta(name='pod-1'),
            spec=pod_spec,
        ),
        gybe.k8s.Pod(
            kind='Pod',
            apiVersion='v1',
            metadata=gybe.k8s.ObjectMeta(name='pod-2'),
            spec=pod_spec,
        ),
    ]


if __name__ == '__main__':
    two_pods()

Now run your transpiler with your values file:

python chart.py values.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
  - command:
    - python
    - -m
    - http.server
    image: python:3
    name: my-python-server
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-2
spec:
  containers:
  - command:
    - python
    - -m
    - http.server
    image: python:3
    name: my-python-server

If you're feeling lucky, you can pipe that into kubectl:

python chart.py values.yaml | kubectl apply -f -
pod/pod-1 created
pod/pod-2 created
kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
pod-1   1/1     Running   0          5s
pod-2   1/1     Running   0          5s
python chart.py values.yaml | kubectl delete -f -
pod "pod-1" deleted
pod "pod-2" deleted