Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alfiankan/crab-config-files-templating
Dynamic configuration file templating tool for kubernetes manifest or general configuration files
https://github.com/alfiankan/crab-config-files-templating
ci-cd cli devops devops-tools kubernetes yaml-configuration
Last synced: 14 days ago
JSON representation
Dynamic configuration file templating tool for kubernetes manifest or general configuration files
- Host: GitHub
- URL: https://github.com/alfiankan/crab-config-files-templating
- Owner: alfiankan
- License: mit
- Created: 2022-06-19T21:57:12.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2022-07-21T13:48:31.000Z (over 2 years ago)
- Last Synced: 2024-07-31T20:39:22.713Z (3 months ago)
- Topics: ci-cd, cli, devops, devops-tools, kubernetes, yaml-configuration
- Language: Go
- Homepage:
- Size: 307 KB
- Stars: 7
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-go - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- fucking-awesome-go - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- awesome-go - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- awesome-go - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- awesome-go-extra - crab-config-files-templating - 06-19T21:57:12Z|2022-07-21T13:48:31Z| (Build Automation / Advanced Console UIs)
- awesome-go-with-stars - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- awesome-go-plus - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. (Command Line / Advanced Console UIs)
- awesome-go-plus - crab-config-files-templating - Dynamic configuration file templating tool for kubernetes manifest or general configuration files. ![stars](https://img.shields.io/badge/stars-7-blue) ![forks](https://img.shields.io/badge/forks-0-blue) (Command Line / Advanced Console UIs)
README
# Crab 🦀
Dynamic configuration file templating tool for kubernetes manifest or general configuration files[![codecov](https://codecov.io/gh/alfiankan/crab-config-files-templating/branch/master/graph/badge.svg?token=DJHuZmbYeU)](https://codecov.io/gh/alfiankan/crab-config-files-templating)
[![Go Reference](https://pkg.go.dev/badge/github.com/alfiankan/crab-config-files-templating.svg)](https://pkg.go.dev/github.com/alfiankan/crab-config-files-templating)
[![Go Report Card](https://goreportcard.com/badge/github.com/alfiankan/crab-config-files-templating)](https://goreportcard.com/report/github.com/alfiankan/crab-config-files-templating)
[![Generate release-artifacts](https://github.com/alfiankan/crab-config-files-templating/actions/workflows/go.yml/badge.svg?branch=v1.0.5)](https://github.com/alfiankan/crab-config-files-templating/actions/workflows/go.yml)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go)## How to install
Download according to your computer architecture at release page [go to release page](https://github.com/alfiankan/crab-config-files-templating/releases)
| OS | Platform | Status |
| ------------- |:-------------:| -----:|
| Ubuntu, Debian | amd64, arm64, 386| available |
| MacOS, Darwin | amd64, arm64, 386| available |
| Windows | amd64, arm64, 386| available |Extract using command like :
```bash
tar -xzf crab-cli-v0.1.0-darwin-amd64.tar.gz -C crab
```Move to /usr/local/bin (Optional) :
```bash
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 :
```bash
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 :
```yaml
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 :
```bash
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:
```bash
crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml
```
to make verbose add -v flag:
```bash
crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml -v
```
verbose output :
```bash
[REPLACED] from namespace to production
[REPLACED] from exposePort to 8081
[DONE] Crab output result at result.yaml
```the result will be :
```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: production
spec:
ports:
- targetPort: 80
name: nginxhttp
port: 8081
```
Click to watch the demo :
[![asciicast](https://asciinema.org/a/E76kRn2G8uoIXBm6KZPtPn27x.svg)](https://asciinema.org/a/E76kRn2G8uoIXBm6KZPtPn27x)Youtube demo video :
- [go to youtube](https://youtu.be/HdRQ3mz64us)
### Case 2 Quotes replace
sometimes your config file needs string quotes, (like for env vars or connection string):
```sh
namespace="production"
```
template file example :
```yaml
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 :
```bash
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 :
```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: "production"
spec:
ports:
- targetPort: 80
name: nginxhttp
port: 8081
```## Sample Github Action
```yaml
name: Demo deployment using crabon:
workflow_dispatch:jobs:
crab-manifest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: mock job
run: pwddeploy-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)