GitHub - alfiankan/crab-config-files-templating: Dynamic configuration file templating tool for kubernetes manifest or general configuration files (original) (raw)
Crab 🦀
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 -r -o
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):
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)