Skip to main content

A library to push/pull configurations inside etcd databases

Project description

Build Status

Introduction

etcdgo is a library to push/pull configurations inside etcd databases. Supported filetypes are the following:

  • JSON
  • Yaml
  • INI

Usage example:

import etcd3
import etcdgo

client = etcd3.Etcd3Client(host='127.0.0.1', port=4003)

# push a json configuration inside database
config = etcdgo.get_config(client, "json")
config.push("myconfig", "myfile.json")

# push a yaml configuration inside database
config = etcdgo.get_config(client, "yaml")
config.push("myconfig", "myfile.yaml")

# push a ini configuration inside database
config = etcdgo.get_config(client, "ini")
config.push("myconfig", "myfile.ini")

# pull data from etcd database
data = config.pull("myconfig")

To install the library:

pip install etcdgo

Push/pull via command line

etcdgo library contains a tool called etcdgo-cli which can be used to push/pull configurations inside an etcd database.

# push ini configuration
$ etcdgo-cli \
    --hostname 10.0.1.21 \
    --port 2379 \
    --basefile /configs \
    push pytest0 pytest.ini

# pull configuration
$ etcdgo-cli \
    --hostname 10.0.1.21 \
    --port 2379 \
    --basefile /configs \
    pull --output-type=ini pytest0
[pytest]
addopts = -vv -s
log_cli = True
log_level = DEBUG

etcdgo-cli will automatically recognize the file extension and push it as needed, but pull command needs to specify the output type, via --output-type option.

How data is stored

Before pushing configurations inside an etcd database, all files are converted into a dictionary and then flatten. The basefolder is given to the configuration object and it's the root of our configurations.

For example:

import etcd3
import etcdgo

client = etcd3.Etcd3Client(host='127.0.0.1', port=4003)
config = etcdgo.get_config(client, "ini", basefolder="/configs")
config.push("foods", "myconfig.ini")

Our myconfig.ini configuration:

[apple]
color = red
taste = sweet

[coffee]
color = black
taste = bitter

Once myconfig.ini is pushed into etcd, it will be flatten as following:

/configs/foods/apple/color = 'red'
/configs/foods/apple/taster = 'sweet'
/configs/foods/coffee/color = 'black'
/configs/foods/coffee/taste = 'bitter'

Yaml/JSON configurations are flatten with the same principle. In this case, lists are stored as strings.

For example:

import etcd3
import etcdgo

client = etcd3.Etcd3Client(host='127.0.0.1', port=4003)
config = etcdgo.get_config(client, "json", basefolder="/configs")
config.push("foods", "myconfig.json")

Our myconfig.json configuration:

{
    "fruits" : {
        "apple" : {
            "color": "red",
            "taste": "sweet"
        },
        "coffee" : {
            "color": "black",
            "taste": "bitter"
        },
    },
    "sets" : ["fruits", "vegetables" ]
}

Once myconfig.json is pushed into etcd, it will be flatten as following:

/configs/foods/fruits/apple/color = 'red'
/configs/foods/fruits/apple/taster = 'sweet'
/configs/foods/fruits/coffee/color = 'black'
/configs/foods/fruits/coffee/taste = 'bitter'
/configs/foods/sets = '["fruits", "vegetables"]'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

etcdgo-1.2.0.tar.gz (5.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page