diff --git a/README.rst b/README.rst index 076fe96..508371e 100644 --- a/README.rst +++ b/README.rst @@ -36,6 +36,12 @@ Usage is really simple and has been thought so that it resembles how most dumper # dump to stdout etcdumper dump https://etcd.example.com:4001 + # vim ~/.bash_profile, SSL file path, from env variables + ETCD_SSL_CER="/Users/Lorryrui/etcd.pem" + ETCD_SSL_KEY="/Users/Lorryrui/etcd.key" + export ETCD_SSL_CER + export ETCD_SSL_KEY + # dump to file etcdumper --file dump.json dump https://etcd.example.com:4001 diff --git a/etcddump/cli.py b/etcddump/cli.py index 72f94d2..87a386b 100644 --- a/etcddump/cli.py +++ b/etcddump/cli.py @@ -18,4 +18,4 @@ def main(**kw): cl.dump(filename=args.file) elif args.action == 'restore': cl = operations.Restorer(url=args.host) - cl.restore(filename=args.file, preserve_indexes=args.preserve_indexes) + cl.restore(filename=args.file) diff --git a/etcddump/operations.py b/etcddump/operations.py index 0c2a547..0061db5 100644 --- a/etcddump/operations.py +++ b/etcddump/operations.py @@ -2,6 +2,10 @@ import etcd import json import sys +import os + +reload(sys) +sys.setdefaultencoding('utf8') class BaseOperations(object): @@ -10,10 +14,15 @@ def __init__(self, url='http://localhost:4001'): self.get_client(url) - def get_client(self, url, ca_cert=None, cert=None): + def get_client(self, url,cert=None): parsed = urlparse(url) (h, p) = parsed.netloc.split(':') - self.client = etcd.Client(host=h, port=int(p), protocol=parsed.scheme, allow_reconnect=False, ca_cert=ca_cert, cert=cert) + + # SSL certificate, env variables + if parsed.scheme == 'https': + cert = (os.getenv('ETCD_SSL_CER'),os.getenv('ETCD_SSL_KEY')) + + self.client = etcd.Client(host=h, port=int(p), protocol=parsed.scheme, allow_reconnect=False, cert=cert) def entry_from_result(self, entry): return { @@ -46,15 +55,8 @@ def dump(self, filename=None): print(json.dumps(dumplist)) class Restorer(BaseOperations): - def fake_entry(self): - return { - 'key': '/_etcd_dumper/bogus', - 'value': 'bogus', - 'ttl': 1, - 'dir': False - } - def restore(self, filename=None, preserve_indexes=False): + def restore(self, filename=None): if filename: with open(filename, 'rb') as f: data = json.load(f) @@ -62,20 +64,8 @@ def restore(self, filename=None, preserve_indexes=False): with sys.stdin as f: data = json.load(f) - lastidx = 0 - for entry in data: - if preserve_indexes: - self.fillin(entry['index'], lastidx) - r = self.write(entry) - lastidx = r.modifiedIndex - - def fillin(self, idx, lastidx): - while (idx < (lastidx - 1)): - r = self.write(fake_entry) - idx = r.modifiedIndex - return idx def write(self, entry): - return self.client.write(entry['key'].encode('utf-8'), entry['value'].encode('utf-8'), ttl = entry['ttl'], dir = entry['dir']) + return self.client.write(entry['key'], entry['value'], ttl = entry['ttl'], dir = entry['dir'])