Easy customization of kubernetes manifests
Project description
ksux

A simple way for templating kubernetes manifests.
tldr.
ksux -b <path_to_base_dir> -p <path_to_patches_dir> -o <output_dir>
or using docker:
docker run --rm -v /path/to/your/configs:/configs tsladecek/ksux ksux -b /configs/base -p /configs/patches -o /configs/out
Requirements
This is a python package. So the only requirements are python3 and pip
Installation
Local
- Optional: Create and activate a virtual env.
# option 1: virualvenv
virtualvenv ksux
source ksux/bin/activate
# option 2: venv
python -m venv ksux
source ksux/bin/activate
# option 3: conda
conda create -n ksux python
conda activate ksux
- Install
pip install ksux
Docker
use the docker image
To run the command inside a docker container, you need to make sure that all volumes are mapped to the container. Let's say that you have a following file structure:
|- /home/project
| |- base
| |- patches
| |- out
To generate patched manifests in the /home/project/out folder, run following command:
docker run --rm -v /home/project:/configs tsladecek/ksux ksux -b /configs/base -p /configs/patches -o /configs/out
the important part is the -v flag, which will mount your local folder as volume to the container.
How does it work?
Let's say that you have many manifests in some directory (base directory) that you wish to patch with patches (in the
patches) directory.
Patches could be in yaml or json format (as well as your manifests). However, they must adhere to following schema:
name: <patch_description>
target:
apiVersion: <apiVersion of targeted resource>
kind: <Deployment type of targeted resource>
name: <name of targeted resource>
ops:
- name: <operation description>
path: <path to the part of the manifest to be patched>
value: <value which should be replaced or added>
action: <add|replace|remove>
each patch file can be a list of patches. You can use the classic yaml format, e.g.:
- name: deployment_patches
target:
apiVersion: apps/v1
kind: Deployment
name: web
ops:
- name: replace_image
path: /spec/template/spec/containers/nginx/image
value: nginx:1.23
action: replace
- name: service_patches
target:
apiVersion: v1
kind: Service
name: nginx-service
ops:
- name: add_https_port
path: /spec/ports
value:
name: https
port: 443
protocol: TCP
targetPort: 443
action: add
- name: rename_http_port
path: /spec/ports/http/name
action: replace
value: new_name
or use the --- separator:
---
name: deployment_patches
target:
apiVersion: apps/v1
kind: Deployment
name: web
ops:
- name: replace_image
path: /spec/template/spec/containers/nginx/image
value: nginx:1.23
action: replace
---
name: service_patches
target:
apiVersion: v1
kind: Service
name: nginx-service
ops:
- name: add_https_port
path: /spec/ports
value:
name: https
port: 443
protocol: TCP
targetPort: 443
action: add
- name: rename_http_port
path: /spec/ports/http/name
action: replace
value: new_name
Then all you need to do, is run:
ksux -b <path_to_base_dir> -p <path_to_patches_dir> -o <output_dir>
This will save all patched manifests to the output dir. You can use the --dry-run flag to print the patched
manifests to stdout:
ksux -b <path_to_base_dir> -p <path_to_patches_dir> --dry-run
For list of all options see:
ksux --help
the op.path
This is a pretty cool thing. Similar to kustomize path, however you can target list item by names of child objects. E.g. say you have a list of ports in a service:
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-service
name: nginx-service
spec:
ports:
- name: new_name
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: web
type: ClusterIP
To target the https service and change its name, you can specify the path: /spec/ports/https/name and then
set the value to the new name 💪.
Example
In the ./examples folder there are 3 sub-folders:
- /examples/base with deployment, service and a configmap manifests. These are the base manifests which we wish
to patch
- /examples/patches contain the patches (notice that both base kubernetes manifests and patches can be either in
json or yml/yaml format)
- /examples/out is the output directory where the patched resources will be output
First, we will dry-run the patching:
ksux -b examples/base -p examples/patches --dry-run
You should see the patched manifests printed out to the console. Now we can run it and save the patched manifests
to the output folder:
ksux -b examples/base -p examples/patches -o examples/out
By default, the manifests will be saved in yaml format with .yaml extension. If you wish to use the .yml extension
or save the manifests in json format, simply provide the -e flag with corresponding extension. E.g.:
ksux -b examples/base -p examples/patches -o examples/out -e json
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ksux-0.5.0.tar.gz.
File metadata
- Download URL: ksux-0.5.0.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81bb17e4a7d5a91680f1a8651bad0b2333d4ef35b78ca6ad89a41a1592db3600
|
|
| MD5 |
618848fd843d3b8a45c8a1ecf862b34f
|
|
| BLAKE2b-256 |
596c49e6f7d33808fbd402e9e4fafa7c6c3febb691074d9b5e8212a9e6f9937d
|
File details
Details for the file ksux-0.5.0-py3-none-any.whl.
File metadata
- Download URL: ksux-0.5.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c655119acfdc86b658427c615a6ee6869618b63eb2990dd8748bb42b3a8ff58
|
|
| MD5 |
57ba9b2f869fc557c1afd928c12e6dbf
|
|
| BLAKE2b-256 |
bb270bcb450b92d2098165d387b277aedff6465dea9a91b36be76ab735b01450
|