{"id":13409865,"url":"https://github.com/alfiankan/crab-config-files-templating","last_synced_at":"2026-01-11T03:36:30.664Z","repository":{"id":44421953,"uuid":"505227780","full_name":"alfiankan/crab-config-files-templating","owner":"alfiankan","description":"Dynamic configuration file templating tool for kubernetes manifest or general configuration files","archived":false,"fork":false,"pushed_at":"2022-07-21T13:48:31.000Z","size":314,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-07-31T20:39:22.713Z","etag":null,"topics":["ci-cd","cli","devops","devops-tools","kubernetes","yaml-configuration"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alfiankan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-19T21:57:12.000Z","updated_at":"2023-09-27T02:03:07.000Z","dependencies_parsed_at":"2022-08-12T11:10:47.961Z","dependency_job_id":null,"html_url":"https://github.com/alfiankan/crab-config-files-templating","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiankan%2Fcrab-config-files-templating","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiankan%2Fcrab-config-files-templating/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiankan%2Fcrab-config-files-templating/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfiankan%2Fcrab-config-files-templating/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alfiankan","download_url":"https://codeload.github.com/alfiankan/crab-config-files-templating/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221477225,"owners_count":16829002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-cd","cli","devops","devops-tools","kubernetes","yaml-configuration"],"created_at":"2024-07-30T20:01:03.777Z","updated_at":"2024-10-26T00:31:10.519Z","avatar_url":"https://github.com/alfiankan.png","language":"Go","funding_links":[],"categories":["Command Line","命令行","Build Automation"],"sub_categories":["Advanced Console UIs","高级控制台用户界面"],"readme":"# Crab 🦀\r\nDynamic configuration file templating tool for kubernetes manifest or general configuration files\r\n\r\n[![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)\r\n[![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)\r\n[![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)\r\n[![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)\r\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go)  \r\n\r\n\r\n## How to install\r\n\r\nDownload according to your computer architecture at release page [go to release page](https://github.com/alfiankan/crab-config-files-templating/releases)\r\n\r\n| OS        | Platform           | Status  |\r\n| ------------- |:-------------:| -----:|\r\n| Ubuntu, Debian | amd64, arm64, 386| available |\r\n| MacOS, Darwin  | amd64, arm64, 386| available |\r\n| Windows | amd64, arm64, 386| available |\r\n\r\nExtract using command like :\r\n```bash\r\ntar -xzf crab-cli-v0.1.0-darwin-amd64.tar.gz -C crab\r\n```\r\n\r\nMove to /usr/local/bin (Optional) :\r\n```bash\r\ncp crab/crab /usr/local/bin\r\n```\r\n\r\nThen check crab cli working properly :\r\n\u003cimage cli\u003e\r\n\r\n## Build From Source\r\n- clone this repository\r\n- make sure you have go version 18\r\n- run `make build`\r\n\r\n## How to use\r\nbasic command fromat :\r\n```bash\r\n  crab -f \u003cfileinputpath\u003e -r \u003ckeyvalue\u003e -o \u003coutputfilepath\u003e\r\n```\r\nFlags :\r\n| Flag       | Description           | Required  | default |\r\n| :------------- |:-------------| :-----| :-----|\r\n| -f | file input path location eg. ./manifest/nginx.yaml (accept any config file ext, .env, json, yml, yaml etc.) | true | - |\r\n| -o  | write output file location eg. ./manifest/nginx-result.yaml | false  | same as input file path (overwrite) |\r\n| -r | key value replacable | true | - |\r\n| -q | key value replacable with quotes | false | - |\r\n| -v | verbose process | false | false |\r\n\r\n### Case 1 Standart replace\r\nFirst add {{replacableName}} to your file :\r\n```yaml\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n    name: nginx\r\n    namespace: {{namespace}}\r\nspec:\r\n    ports:\r\n      - targetPort: 80\r\n        name: nginxhttp\r\n        port: {{exposePort}}\r\n```\r\ncrab cli will replace {{replacableName}} as the key, based on the example above :\r\n- {{namespace}}\r\n- {{exposePort}}\r\n\r\nthen run crab command :\r\n```bash\r\n  crab -f inputfile.yaml -r namespace=production -r exposePort=8081\r\n```\r\nyes you can override multiple key values  ✔️\r\n  \r\nwrite output to another file add -o flag:\r\n```bash\r\n  crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml\r\n```\r\n  \r\nto make verbose add -v flag:\r\n```bash\r\n  crab -f inputfile.yaml -r namespace=production -r exposePort=8081 -o result.yaml -v\r\n```\r\nverbose output :\r\n```bash\r\n[REPLACED] from namespace to production\r\n[REPLACED] from exposePort to 8081\r\n[DONE] Crab output result at result.yaml\r\n```\r\n\r\nthe result will be :\r\n```yaml\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n    name: nginx\r\n    namespace: production\r\nspec:\r\n    ports:\r\n      - targetPort: 80\r\n        name: nginxhttp\r\n        port: 8081\r\n```\r\nClick to watch the demo :\r\n[![asciicast](https://asciinema.org/a/E76kRn2G8uoIXBm6KZPtPn27x.svg)](https://asciinema.org/a/E76kRn2G8uoIXBm6KZPtPn27x)\r\n\r\nYoutube demo video :\r\n- [go to youtube](https://youtu.be/HdRQ3mz64us)\r\n\r\n  \r\n### Case 2 Quotes replace\r\nsometimes your config file needs string quotes, (like for env vars or connection string):\r\n  ```sh\r\n    namespace=\"production\"\r\n  ```\r\ntemplate file example :\r\n```yaml\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n    name: nginx\r\n    namespace: {{namespace}}\r\nspec:\r\n    ports:\r\n      - targetPort: 80\r\n        name: nginxhttp\r\n        port: {{exposePort}}\r\n```\r\nlet's say we need a quote in the namespace :\r\n```bash\r\n  crab -f inputfile.yaml -q namespace=production -r exposePort=8081 -o result.yaml -v\r\n```\r\nyass you can simultaneously Replace multiple key values with quotes or not  ✔️\r\n\r\nresult will be :\r\n```yaml\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n    name: nginx\r\n    namespace: \"production\"\r\nspec:\r\n    ports:\r\n      - targetPort: 80\r\n        name: nginxhttp\r\n        port: 8081\r\n```\r\n\r\n## Sample Github Action\r\n\r\n```yaml\r\nname: Demo deployment using crab\r\n\r\non:\r\n  workflow_dispatch:\r\n\r\njobs:\r\n  crab-manifest:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions/checkout@v3\r\n      - name: mock job\r\n        run: pwd\r\n\r\n  deploy-test:\r\n    runs-on: ubuntu-latest\r\n    needs: crab-manifest\r\n    steps:\r\n      - uses: actions/checkout@v3\r\n      - name: install crab cli\r\n        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\r\n      - name: recreate deployment manifest on test\r\n        run: |\r\n          ./crab -f example/manifest/nginx.yaml \\\r\n          -r namespace=test \\\r\n          -r publishPort=8000 \\\r\n          -q portName=test-server \\\r\n          -o nginx-test.yaml \\\r\n          -v\r\n      - name: view manifest\r\n        run: cat nginx-test.yaml\r\n                    \r\n  \r\n  deploy-production:\r\n    runs-on: ubuntu-latest\r\n    needs: crab-manifest\r\n    steps:\r\n      - uses: actions/checkout@v3\r\n      - name: install crab cli\r\n        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\r\n      - name: recreate deployment manifest on production\r\n        run: |\r\n          ./crab -f example/manifest/nginx.yaml \\\r\n          -r namespace=production \\\r\n          -r publishPort=80 \\\r\n          -q portName=prod-server \\\r\n          -o nginx-prod.yaml \\\r\n          -v\r\n      - name: view manifest\r\n        run: cat nginx-prod.yaml\r\n```\r\n\r\n## Related article\r\n- Replacing kubernetes manifest value dynamicly (coming soon on medium)\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfiankan%2Fcrab-config-files-templating","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falfiankan%2Fcrab-config-files-templating","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfiankan%2Fcrab-config-files-templating/lists"}