Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/novotnyr/aedile
Consul configuration K/V importer and exporter in the spirit of `git2consul`
https://github.com/novotnyr/aedile
consul
Last synced: 2 months ago
JSON representation
Consul configuration K/V importer and exporter in the spirit of `git2consul`
- Host: GitHub
- URL: https://github.com/novotnyr/aedile
- Owner: novotnyr
- Created: 2017-01-31T09:00:53.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-11T19:39:10.000Z (9 months ago)
- Last Synced: 2024-10-14T22:19:01.112Z (2 months ago)
- Topics: consul
- Language: Java
- Homepage:
- Size: 75.2 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.markdown
Awesome Lists containing this project
README
About
=====
Aedile as a Consul configuration K/V importer and exporter in the spirit of `git2consul`Running the Aedile
==================Download the `aedile.jar`.
It is a standalone JAR, executable via `java -jar aedile.jar`
There are following functionalities:
* import to Consul K/V from a specific directory with a set of `.properties` files
* import to Consul K/V from Git
* import to Consul K/V from a set of datacenter-specific directories
* export from Consul K/V to the directory treeImporting from the filesystem
=============================To import the files from the filesystem directory, run Aedile:
java -jar aedile.jar import /etc/consul/config/ft-prod
The Consul configuration for the import is guided by Environment Variables.
By default, all subdirectories are imported as well, recursively.
For example, `/etc/consul/config/ft-prod/mt` and `/etc/consul/config/ft-prod/meta`
subdirectories will be imported as `mt` and `meta` subdirectories respectively,
under `ft-prod` directory in Consul K/V.Renaming property files (`--remap-config-name`)
-----------------------------------------------Property filenames can be remapped:
--remap-config-name application-local=application,local
This will remap `application-local.properties` to `application,local` directory in Consul K/V.
Disabling recursion
-------------------
To disable recursive import, use the `--no-recurse` argument, such as:java -jar aedile.jar import --no-recurse /etc/consul/config/ft-prod
Exporting from the Consul K/V to the filesystem
===============================================To export the whole Consul K/V configuration into the filesystem directory
hierarchy, run Aedile exporter:java -jar aedile.jar export /tmp
This will import the root folder and all recursive subfolders to the `/tmp`
folder in the filesystem.All Consul K/V folders will be mapped to the filesystem directories.
The bottommost folders will be mapped to the `.properties` files, containing
keys and values separated by `=`.Importing large datacenter structure
====================================
Imports multiple folders that corresponds to datacenter configurations.To import, run Aedile:
java -jar aedile.jar import-dc /etc/consul/config/datacenters
Imagine the following folder hierarchy:
./datacenters
|- dc1
| |- config
| |- unittest
| | |- application
| | |- code.properties
| | |- demo.properties
| |- unittest2
| |- application
| |- demo2.properties
|- dc2
|- config
|- prod
|- application.properties
|- impl.propertiesImporting the `datacenters` directory creates the following structure in Consul
K/V. The `dc1` and `dc2` directories will map to the *dc*
parameter in Consul K/V REST API requests. The first directory `dc1` will map to
the `dc=dc1` query parameter, and the second directory `dc2` will map to the
`dc=dc2` query param.The datacenter `dc1` will contain the structure that corresponds to the filesystem
structure.|- config
| |- unittest
| | |- application
| | |- code
| | | |- key=value from code.properties
| | | |- another key=value from code.properties
| | |- demo
| | |- key=value from demo.properties
| | |- another key=value demo code.properties
| |- unittest2
|- application
|- demo2
|- key=value from demo2.properties
|- another key=value from demo2.properties### Ignoring Folders
The `CONSUL_IMPORT_EXCLUDE` variable contains a datacenter/folder specification
that shall be ignored upon import.An example:
dc1#config/unittest/application:dc1#config/unittest/application2
* The datacenter `dc1` shall ignore the `config/unittest/application` folder
* The datacenter `dc1` shall ignore the `config/unittest2/application` folder#### Wildcard supports
Specification may contain Ant-based wildcards:
dc1#config/**/*
This ignores any subfolder (recursively) in the `config` folder for datacenter `dc1`.
Git import
==========To import the files from the Git directory, run Aedile:
java -jar aedile.jar git config.json
Git config
----------Git config is configured via `git2consul`-like configuration file.
{
"version": "1.0",
"local_store" : "./target/gitrepo",
"repos" : [{
"name" : "aedile",
"url" : "https://github.com/novotnyr/aedile.git",
"source_root": "src/test/resources/datacenters/dc1/config/unittest/application",
"mountpoint": "config"
}]
}* `version`: always 1.0
* `local_store`: the local temporary file that will hold the cloned Git repo
* `name`: name of the Git repo. Will be appended to the Consul K/V prefix.
When building the key name, git2consul will concatenate mountpoint, repo
name, and the path of the file in your git repo.
* `url`: URL of the Git repo
* `source_root`: A `source_root` is a repo-level option instructing Aedile to
navigate to a subdirectory in the git repo before mapping files to K/Vs. By
default, Aedile mirrors the entire repo into Consul KVs.
If you have a repo configured with the `source_root`
`src/test/resources/datacenters/dc1/`, the file
`src/test/resources/datacenters/dc1/config/unittest/application/config.properties` would be
mapped to the KV as `config/unittest/application/config.properties`.Environment Variables
=====================* `CONSUL_ENDPOINT` represents a Consul agent host. It is `localhost` by default.
* `CONSUL_PORT` represents a Consul agent port. It is 8500 by default.
* `TOKEN` corresponds to the ACL token as specified by Consul ACL protection. It is empty by default.
* `CONSUL_HTTP_USER` represents a user that is sent in the HTTP Basic Authentication with HTTP requests to Consul API.
* `CONSUL_HTTP_PASSWORD` represents a password that is sent in the HTTP Basic authentication with HTTP requests.
* `CONSUL_KEY_PREFIX` represents a default prefix for the configuration values.
* `CONSUL_DATACENTER` represents a datacenter that is targeted with requests.
* `CONSUL_IMPORT_EXCLUDE` contains a specification of ignored datacenters and subfolders