Export/Import/Edit etcd directory as JSON/YAML/TOML and validate directory using JSON schema
Go Shell Makefile
Clone or download
mickep76 Merge pull request #23 from marquetemb/master
Num infer list option to keep original json when directories are expo…
Latest commit b4d45c4 Mar 20, 2018

README.md

etcdtool

Export/Import/Edit etcd directory as JSON/YAML/TOML and validate directory using JSON schema.

Use cases

  • Backup/Restore in a format which is not database or version specific.
  • Migration of data from production to testing.
  • Store configuration in Git and use import to populate etcd.
  • Validate directory entries using JSON schema.

Build

git clone https://github.com/mickep76/etcdtool.git
cd etcdtool
make

Build RPM

Make sure you have Docker configured.

git clone https://github.com/mickep76/etcdtool.git
cd etcdtool
make rpm

Install using Homebrew on Mac OS X

brew tap mickep76/funk-gnarge
brew install etcdtool

Update

brew update
brew upgrade --all

Example

Make sure you have Docker configured.

Start etcd:

./init-etcd.sh start
eval "$(./init-etcd.sh env)"

Import some data:

cd examples/host/
etcdtool import /hosts/test1.example.com test1.example.com.json
etcdtool import /hosts/test2.example.com test2.example.com.json

Inspect the content:

etcdtool tree /
etcdtool export /

**Export the content and infer numbers lists to keep original json:**
etcdtool export / --num-infer-list

Validate data with different routes:

etcdtool -d -c etcdtool.toml validate /
etcdtool -d -c etcdtool.toml validate /hosts
etcdtool -d -c etcdtool.toml validate /hosts/test2.example.com
etcdtool -d -c etcdtool.toml validate /hosts/test2.example.com/interfaces
etcdtool -d -c etcdtool.toml validate /hosts/test2.example.com/interfaces/eth0

Import with validation:

etcdtool -d -c etcdtool.toml import -v /hosts/test3.example.com test2.example.com.json

Fix validation error:

etcdtool -d -c etcdtool.toml edit -v -f toml /hosts/test2.example.com
---
    gw = "1.192.168.0.1"
+++
    gw = "192.168.0.1"

Re-validate data:

etcdtool -d -c etcdtool.toml validate /hosts

Authentication

These commands will prompt you for the password for the user. Alternatively, you can pass the password in a file with --password-file or -F:

cat /path/to/passwordfile
passwordstring

etcdtool -password-file /path/to/passwordfile validate /hosts

Caveats

  • etcd doesn't support list's, this is handled by using the index as the key:

JSON Input:

{
    "users": [
        { "username": "jblack", "first_name": "John", "last_name": "Blackbeard" },
        { "username": "ltrier", "first_name": "Lars", "last_name": "Von Trier" }
    ]
}

Result in etcd:

users/0/username: jblack
users/0/first_name: John
users/0/last_name: Blackbeard
users/1/username: ltrier
users/1/first_name: Ludwig
users/1/last_name: Von Treimer

TODO

  • Add detection of format for import based on file type