1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/usr/bin/env python3
-
- import etcd
- import time
-
-
- class Fetcher:
-
- def __init__(self, host, port, prefix):
- self._client = etcd.Client(host=host, port=port)
- self._prefix = prefix
-
-
- def _read(self, key, **kwargs):
- try:
- node = self._client.read(self._prefix + key, **kwargs)
- return node.value if node else None
- except etcd.EtcdKeyNotFound:
- return None
-
-
- def _read_recursive(self, key):
- try:
- return self._client.read(self._prefix + key, recursive=True)
- except etcd.EtcdKeyNotFound:
- return None
-
-
- def get_label(self, label):
- node = self._read_recursive('/labels/%s' % label)
- if node:
- return {child.key.split('/')[-1]: child.value for child in node.children}
- else:
- return {}
-
-
- def wait_for_update(self):
- original_time = self._read('/_updated')
- new_time = original_time
-
- while new_time == original_time:
- try:
- new_time = self._read('/_updated', wait=True)
- except etcd.EtcdWatchTimedOut:
- new_time = self._read('/_updated')
- time.sleep(10)
|