k8s — lilu API

←index

Overview

Minimal Kubernetes client for Lilush. Talks directly to the k8s API server using web.request — no kubectl dependency. Supports kubeconfig parsing, bearer token and client certificate authentication, and core CRUD operations against the k8s REST API.

Submodules

ModuleDescription
k8s.apiKubernetes API URL builder and request execution.
k8s.kubeconfigAd-hoc YAML parser for Kubernetes kubeconfig files.
k8s.resourcesKubernetes resource type registry mapping resource names to their API group, version, and namespace scope.

Functions

NameSignature
getget(self, resource, name, opts) -> result, err
listlist(self, resource, opts) -> result, err
createcreate(self, resource, body, opts) -> result, err
updateupdate(self, resource, name, body, opts) -> result, err
patchpatch(self, resource, name, body, opts) -> result, err
deletedelete(self, resource, name, opts) -> result, err
logslogs(self, pod_name, opts) -> text, err
closeclose(self)
newnew(cfg) -> client, err
load_kubeconfigload_kubeconfig(path) -> config, err

get(self, resource, name, opts) -> result, err

Get a single resource by name

list(self, resource, opts) -> result, err

List resources of a given type

Returns the k8s List object containing an items array. Supports label_selector, field_selector, limit, and continue in opts.

create(self, resource, body, opts) -> result, err

Create a new resource

update(self, resource, name, body, opts) -> result, err

Replace (full update) an existing resource

patch(self, resource, name, body, opts) -> result, err

Patch an existing resource

Supports different patch strategies via opts.patch_type:

delete(self, resource, name, opts) -> result, err

Delete a resource by name

logs(self, pod_name, opts) -> text, err

Get logs from a pod

Returns plain text log output. Supported opts:

close(self)

Clean up temporary certificate files

new(cfg) -> client, err

Create a new Kubernetes client

Constructs a k8s client from either a kubeconfig file or explicit configuration.

Kubeconfig mode:

local client, err = k8s.new({
    kubeconfig = "~/.kube/config",
    context = "my-context",     -- optional, uses current-context if omitted
    namespace = "my-ns",        -- optional, overrides context namespace
    timeout = 10,               -- optional, request timeout in seconds
})

Explicit mode:

local client, err = k8s.new({
    server = "https://k8s-api:6443",
    token = "my-token",         -- or token_file = "/path/to/token"
    ca_cert = "/path/to/ca.crt",
    client_cert = "/path/to/cert.pem",   -- optional, for mTLS
    client_key = "/path/to/key.pem",     -- optional, for mTLS
    namespace = "default",
    timeout = 10,
})

load_kubeconfig(path) -> config, err

Load and parse a kubeconfig file without creating a client