{"id":16270321,"url":"https://github.com/alexsjones/vortex","last_synced_at":"2025-07-14T19:43:09.113Z","repository":{"id":56286391,"uuid":"104920100","full_name":"AlexsJones/vortex","owner":"AlexsJones","description":"Generate files from templates and var files with golang templating","archived":false,"fork":false,"pushed_at":"2020-02-20T03:59:15.000Z","size":1454,"stargazers_count":5,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-16T00:51:49.410Z","etag":null,"topics":["docker","golang","kubernetes","templating","vault","vortex","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexsJones.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-26T17:59:23.000Z","updated_at":"2023-03-06T09:14:13.000Z","dependencies_parsed_at":"2022-08-15T16:00:54.764Z","dependency_job_id":null,"html_url":"https://github.com/AlexsJones/vortex","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexsJones%2Fvortex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexsJones%2Fvortex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexsJones%2Fvortex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexsJones%2Fvortex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexsJones","download_url":"https://codeload.github.com/AlexsJones/vortex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231742828,"owners_count":18419857,"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":["docker","golang","kubernetes","templating","vault","vortex","yaml"],"created_at":"2024-10-10T18:10:21.024Z","updated_at":"2024-12-29T17:10:50.310Z","avatar_url":"https://github.com/AlexsJones.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n   :::     :::  ::::::::  ::::::::: ::::::::::: :::::::::: :::    :::\n  :+:     :+: :+:    :+: :+:    :+:    :+:     :+:        :+:    :+:  \n +:+     +:+ +:+    +:+ +:+    +:+    +:+     +:+         +:+  +:+    \n+#+     +:+ +#+    +:+ +#++:++#:     +#+     +#++:++#     +#++:+      \n+#+   +#+  +#+    +#+ +#+    +#+    +#+     +#+         +#+  +#+      \n#+#+#+#   #+#    #+# #+#    #+#    #+#     #+#        #+#    #+#      \n ###      ########  ###    ###    ###     ########## ###    ###       \n```\n\n---\n\n[![Build Status](https://travis-ci.org/AlexsJones/vortex.svg?branch=master)](https://travis-ci.org/AlexsJones/vortex)\n[![Maintainability](https://api.codeclimate.com/v1/badges/93b3be49a1b077adc0ba/maintainability)](https://codeclimate.com/github/AlexsJones/vortex/maintainability)\n\nA simple template reader and variable injector\n\n- Used for when you have a bunch of templates (e.g. kubernetes files) and want to inject a yaml file of variables\n- Supports giving it a directory of nested templates and an output path (it will reproduce the directory structure)\n\n\n## Install\n\n`go get github.com/AlexsJones/vortex`\n\n_Or navigate to the releases page and install as a binary on the path_\n\n### Run straight from docker on a local directory\n\n` docker run -v /home/foo/myproject:/tmp tibbar/vortex:v1 -template /tmp/demo.yaml -output /tmp/deployment -varpath /tmp/vars.vortex`\n\nOutputs on `/home/foo/myproject/deployment`\n\n## Example\n\ndemo.tmpl\n```\napiVersion: v1\nkind: Pod\nmetadata:\n  name: console\nspec:\n  restartPolicy: Always\n  containers:\n    - name: {{.name}}\n      image: {{.image}}\n\n```\n\nvars.yaml\n```\nname: \"test\"\nimage: \"us.gcr.io/test\"\n\n```\n\nThe result;\n```\napiVersion: v1\nkind: Pod\nmetadata:\n  name: console\nspec:\n  restartPolicy: Always\n  containers:\n    - name: test\n      image: us.gcr.io/test\n````\n## Usage\n\n```\nvortex -template example/demo.yaml -output deployment -varpath example/vars.vortex\n\n```\n\n## Recursive folder templating\n\nVortex also can recursively follow a template folder\n\ne.g.\n```\nsomefolders/\n            foo/\n                template.yaml\n            bar/\n                another.yaml\n\n```\n\n```\nvortex -template somefolders -output anoutputfolder -var example/vars.yaml\n```\n\n\n### Other examples\n\nThe perfect Kubernetes companion...\n\n```\napiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: {{.info.namespace}}-ingress\n  namespace: {{.info.namespace}}\n  annotations:\n    kubernetes.io/ingress.class: \"nginx\"\n    kubernetes.io/ingress.allow-http: \"false\"\nspec:\n  tls:\n  {{ range .ingress }}\n  - hosts:\n    - {{.ing.hostname}}\n    secretName: {{.ing.tlssecretname}}\n  {{end}}\n  rules:\n  {{ range .ingress }}\n  - host: {{.ing.hostname}}\n    http:\n      paths:\n      - backend:\n          serviceName: {{.ing.servicename}}\n          servicePort: {{.ing.serviceport}}\n  {{end}}\n\n ```\n ```\n apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: kubernetes-{{.info.environment}}-service-account\n  namespace: frontier\n\n---\n\nkind: ClusterRoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: kubernetes-{{.info.environment}}-service-account-binding\nsubjects:\n  - kind: ServiceAccount\n    name: kubernetes-{{.info.environment}}-service-account\n    namespace: frontier\nroleRef:\n  kind: ClusterRole\n  name: view\n  apiGroup: \"\"\n ```\n\n### Loading a variable from a connected vault instance.\n\n```\nenv:\n    API_KEY: {{ vaultsecret \"/secret/path/to/secret\" \"keyInDataMap\" }}\n```\n\nFor this to work, you will need to have:\n- VAULT_ADDR exported in your shell to the running vault instance\n- VAULT_TOKEN exported in your shell if \"${HOME}/.vault-token\" isn't present\n\nUsing environment variables inside your templates:\n\n```\nannotations:\n  UpdatedBy: {{ getenv \"USER\" }}\n  SecretUsed: {{ getenv \"SECRET_TOKEN\" }}\n```\n\nThis enables secrets to be loaded via environment variables rather than alternative methods such as using `sed` over\nthe template before processing.\n\n\n#### Docker Build\n\n```\ngo mod vendor\ndocker build .\n```\n\n\n#### Run from a docker image\n\n `docker run -v /Users/alex/Work/vortex-test:/tmp vortex:v1 -template /tmp/demo.yaml -output /tmp/deployment -varpath /tmp/vars.vortex`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsjones%2Fvortex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexsjones%2Fvortex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsjones%2Fvortex/lists"}