#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # 2020 Nico Schottelius (nico.schottelius at ungleich.ch) # # This file is part of uncloud. # # uncloud is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # uncloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with uncloud. If not, see . # # import etcd3 import json class DB(object): def __init__(self, config): self.config = config self.prefix= '/nicohack/' self.connect() def connect(self): self._db_clients = [] for endpoint in self.config.etcd_hosts: client = etcd3.client(host=endpoint, **self.config.etcd_args) self._db_clients.append(client) def get_value(self, key): pass def set(self, key, value, store_as_json=False, **kwargs): if store_as_json: value = json.dumps(value) key = "{}/{}".format(self.prefix, key) # FIXME: iterate over clients in case of failure ? return self._db_clients[0].put(key, value, **kwargs) if __name__ == '__main__': endpoints = [ "https://etcd1.ungleich.ch:2379", "https://etcd2.ungleich.ch:2379", "https://etcd3.ungleich.ch:2379" ] db = DB(url=endpoints)