Automatically requests Let's Encrypt certificates for containers with a vhost label
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

fetcher.py 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env python3
  2. import etcd
  3. import time
  4. class Fetcher:
  5. def __init__(self, host, port, prefix):
  6. self._client = etcd.Client(host=host, port=port)
  7. self._prefix = prefix
  8. def _read(self, key, **kwargs):
  9. try:
  10. node = self._client.read(self._prefix + key, **kwargs)
  11. return node.value if node else None
  12. except etcd.EtcdKeyNotFound:
  13. return None
  14. def _read_recursive(self, key):
  15. try:
  16. return self._client.read(self._prefix + key, recursive=True)
  17. except etcd.EtcdKeyNotFound:
  18. return None
  19. def get_label(self, label):
  20. node = self._read_recursive('/labels/%s' % label)
  21. if node:
  22. return {child.key.split('/')[-1]: child.value for child in node.children}
  23. else:
  24. return {}
  25. def wait_for_update(self):
  26. original_time = self._read('/_updated')
  27. new_time = original_time
  28. while new_time == original_time:
  29. try:
  30. new_time = self._read('/_updated', wait=True)
  31. except etcd.EtcdWatchTimedOut:
  32. new_time = self._read('/_updated')
  33. time.sleep(10)