consulsync

command module
v0.0.0-...-ca75248 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2020 License: MIT Imports: 11 Imported by: 0

README

consulsync

Syncs a collection of YAML / JSON files to consul KV.

The source files are authoritative and sync is one way (for now). Key & content diffing is performed so only differences will cause KV writes to happen.

Usage

consulsync -datacenter ams2 -consul-address demo.consul.io -kv-prefix test jsonfile1.json yamlfile1.yaml yamlfile2.yaml

You may specify -dryrun to only show the changes that would be made and -quiet to silence any output.

When multiple files are provided, each one is processed in turn in to the same map. This means that the contents of the later files will override the earlier ones.

String filters

While the main purpose of consulsync is to mirror structures from version controlled config files in to KV prefixes, there are some specific serialisation features to make some things nicer to do. These filters cause the subtree of a key to be marshaled in to a string format and stored in the key that contained the trigger tag.

You can specify a trigger tag by appending either !env, !yaml or !json to a key. Please note that everything in the key before the tag is arbitrary and need not contain .json for the json filter for example.

JSON

The following will store the string { "somevalue": "test", "someothervalue": "test" } in the service1/configfile.json key.

The subtree is simply serialized to JSON. Please note that the subtree must be a map / hash type (and not a scalar / list type).

service1:
  configfile.json!json:
    somevalue: test
    someothervalue: test
YAML

The following will store the string somevalue: test\nsomeothervalue: test\n in the service1/configfile.yaml key.

The subtree is simply serialized to YAML.

service1:
  configfile.yaml!yaml:
    somevalue: test
    someothervalue: test
ENV

The following will store the string SOME_VALUE=test\nSOMEOTHERVALUE=test in the service1/configfile.env key.

The subtree is traversed and flattened. All keys are uppercased and nested keys are joined with _. Please note that no escaping is performed on keys nor values at this time.

service1:
  configfile.env!env:
    some:
      value: test
    someothervalue: test

Status

Only tested on a prototype project but PRs welcome.

ACL tokens nor CA certificates are supported at this time but since we are using github.com/hashicorp/consul/api for the consul client, support is there; we just need to expose the options to configure it.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL