go-git-sync will sync JSON or YAML files to Consul when they change in Git.
Basic usage:
$ go-git-sync -c http://consul:8500 sync \ -s https://github.com/jmoeser/go-git-sync.git \ -f example/consul/sample-json.json
For example, given a directory test
in the repo https://github.com/jmoeser/test-gitops-repo
any JSON or YAML files will be synced to the path test/
in Consul.
Contents of the repo
$ tree test/ test/ └── a.json $ cat test/a.json { "test": "yes", "data": "no" }
Will produce the following in Consul:
$ consul kv get test/a { "test": "yes", "data": "no" }
Changes to these files pushed to Git will update the values as they are in Consul.
Currently the application will poll Git for changes every 3-5 minutes.
Config files are supported you can pass in all the values in the config file instead of passing them in as arguments.
$ go-git-sync --config example/config.yaml sync
Instead of using a config file or command arguments you can use environment variables, just prefix them with GGS_
. For example:
$ export GGS_FILE=example/consul/sample-json.json $ export GGS_SOURCE=https://github.com/jmoeser/go-git-sync.git $ export GGS_CONSUL="127.0.0.1:8500" $ go-git-sync sync
To Do:
- Github Webhooks so we don't need to poll
- Store state (last synced Git hash) in Consul instead of SQLite
- Check if hash in Git differs from recorded hash
- Perform sync if hash is different
- Record current Git hash in Consul
- Diff what's in Consul with what we got?
- Option to auto-heal, if the value in Consul changes change it back to what's in Git.
- Vault support (with an intermediate decrypt step)