Crab ๐ฆ
July 21, 2022 ยท View on GitHub
Dynamic configuration file templating tool for kubernetes manifest or general configuration files
How to install
Download according to your computer architecture at release page go to release page
| OS | Platform | Status |
|---|---|---|
| Ubuntu, Debian | amd64, arm64, 386 | available |
| MacOS, Darwin | amd64, arm64, 386 | available |
| Windows | amd64, arm64, 386 | available |
Extract using command like :
tar -xzf crab-cli-v0.1.0-darwin-amd64.tar.gz -C crab
Move to /usr/local/bin (Optional) :
cp crab/crab /usr/local/bin
Then check crab cli working properly :
Build From Source
- clone this repository
- make sure you have go version 18
- run
make build
How to use
basic command fromat :
crab -f <fileinputpath> -r <keyvalue> -o <outputfilepath>
Flags :
| Flag | Description | Required | default |
|---|---|---|---|
| -f | file input path location eg. ./manifest/nginx.yaml (accept any config file ext, .env, json, yml, yaml etc.) | true | - |
| -o | write output file location eg. ./manifest/nginx-result.yaml | false | same as input file path (overwrite) |
| -r | key value replacable | true | - |
| -q | key value replacable with quotes | false | - |
| -v | verbose process | false | false |
Case 1 Standart replace
First add {{replacableName}} to your file :
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: {{namespace}}
spec:
ports:
- targetPort: 80
name: nginxhttp
port: {{exposePort}}
crab cli will replace {{replacableName}} as the key, based on the example above :
- {{namespace}}
- {{exposePort}}
then run crab command :
crab -f inputfile.yaml -r namespace=production -r exposePort=8081
yes you can override multiple key values โ๏ธ
write output to another file add -o flag:
crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml
to make verbose add -v flag:
crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml -v
verbose output :
[REPLACED] from namespace to production
[REPLACED] from exposePort to 8081
[DONE] Crab output result at result.yaml
the result will be :
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: production
spec:
ports:
- targetPort: 80
name: nginxhttp
port: 8081
Youtube demo video :
Case 2 Quotes replace
sometimes your config file needs string quotes, (like for env vars or connection string):
namespace="production"
template file example :
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: {{namespace}}
spec:
ports:
- targetPort: 80
name: nginxhttp
port: {{exposePort}}
let's say we need a quote in the namespace :
crab -f inputfile.yaml -q namespace=production -r exposePort=8081 -o result.yaml -v
yass you can simultaneously Replace multiple key values with quotes or not โ๏ธ
result will be :
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: "production"
spec:
ports:
- targetPort: 80
name: nginxhttp
port: 8081
Sample Github Action
name: Demo deployment using crab
on:
workflow_dispatch:
jobs:
crab-manifest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: mock job
run: pwd
deploy-test:
runs-on: ubuntu-latest
needs: crab-manifest
steps:
- uses: actions/checkout@v3
- name: install crab cli
run: wget -c https://github.com/alfiankan/crab-config-files-templating/releases/download/v1.0.5/crab-v1.0.5-linux-amd64.tar.gz -O - | tar -xz crab
- name: recreate deployment manifest on test
run: |
./crab -f example/manifest/nginx.yaml \
-r namespace=test \
-r publishPort=8000 \
-q portName=test-server \
-o nginx-test.yaml \
-v
- name: view manifest
run: cat nginx-test.yaml
deploy-production:
runs-on: ubuntu-latest
needs: crab-manifest
steps:
- uses: actions/checkout@v3
- name: install crab cli
run: wget -c https://github.com/alfiankan/crab-config-files-templating/releases/download/v1.0.5/crab-v1.0.5-linux-amd64.tar.gz -O - | tar -xz crab
- name: recreate deployment manifest on production
run: |
./crab -f example/manifest/nginx.yaml \
-r namespace=production \
-r publishPort=80 \
-q portName=prod-server \
-o nginx-prod.yaml \
-v
- name: view manifest
run: cat nginx-prod.yaml
Related article
- Replacing kubernetes manifest value dynamicly (coming soon on medium)