mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
autoconf - filter events
This commit is contained in:
parent
c8452aada6
commit
5e71cfc156
3 changed files with 36 additions and 3 deletions
|
|
@ -100,10 +100,15 @@ class DockerController(Controller):
|
|||
first=not self._loaded,
|
||||
)
|
||||
|
||||
def __process_event(self, event):
|
||||
return "Actor" in event and "Attributes" in event["Actor"] and ("bunkerweb.INSTANCE" in event["Actor"]["Attributes"] or "bunkerweb.SERVER_NAME" in event["Actor"]["Attributes"])
|
||||
|
||||
def process_events(self):
|
||||
self._set_autoconf_load_db()
|
||||
for _ in self.__client.events(decode=True, filters={"type": "container"}):
|
||||
for event in self.__client.events(decode=True, filters={"type": "container"}):
|
||||
try:
|
||||
if not self.__process_event(event):
|
||||
continue
|
||||
self._update_settings()
|
||||
self._instances = self.get_instances()
|
||||
self._services = self.get_services()
|
||||
|
|
|
|||
|
|
@ -228,6 +228,22 @@ class IngressController(Controller):
|
|||
configs[config_type][f"{config_site}{config_name}"] = config_data
|
||||
return configs
|
||||
|
||||
def __process_event(self, event):
|
||||
object = event.object
|
||||
metadata = object.metadata if object else None
|
||||
annotations = metadata.annotations if metadata else None
|
||||
if not object:
|
||||
return False
|
||||
if object.kind == "Pod":
|
||||
return annotations and "bunkerweb.io/INSTANCE" in annotations
|
||||
if object.kind == "Ingress":
|
||||
return True
|
||||
if object.kind == "ConfigMap":
|
||||
return annotations and "bunkerweb.io/CONFIG_TYPE" in annotations
|
||||
if object.kind == "Service":
|
||||
return True
|
||||
return False
|
||||
|
||||
def __watch(self, watch_type):
|
||||
w = watch.Watch()
|
||||
what = None
|
||||
|
|
@ -246,9 +262,13 @@ class IngressController(Controller):
|
|||
locked = False
|
||||
error = False
|
||||
try:
|
||||
for _ in w.stream(what):
|
||||
for event in w.stream(what):
|
||||
self.__internal_lock.acquire()
|
||||
locked = True
|
||||
if not self.__process_event(event):
|
||||
self.__internal_lock.release()
|
||||
locked = False
|
||||
continue
|
||||
self._update_settings()
|
||||
self._instances = self.get_instances()
|
||||
self._services = self.get_services()
|
||||
|
|
|
|||
|
|
@ -113,14 +113,21 @@ class SwarmController(Controller):
|
|||
first=not self._loaded,
|
||||
)
|
||||
|
||||
def __process_event(self, event):
|
||||
return "Actor" in event and "Attributes" in event["Actor"] and "Spec" in event["Actor"]["Attributes"] and "Labels" in event["Actor"]["Attributes"]["Spec"] and ("bunkerweb.INSTANCE" in event["Actor"]["Attributes"]["Spec"]["Labels"] or "bunkerweb.CONFIG_TYPE" in event["Actor"]["Attributes"]["Spec"]["Labels"])
|
||||
|
||||
def __event(self, event_type):
|
||||
while True:
|
||||
locked = False
|
||||
error = False
|
||||
try:
|
||||
for _ in self.__client.events(decode=True, filters={"type": event_type}):
|
||||
for event in self.__client.events(decode=True, filters={"type": event_type}):
|
||||
self.__internal_lock.acquire()
|
||||
locked = True
|
||||
if not self.__process_event(event):
|
||||
self.__internal_lock.release()
|
||||
locked = False
|
||||
continue
|
||||
try:
|
||||
self._update_settings()
|
||||
self._instances = self.get_instances()
|
||||
|
|
@ -137,6 +144,7 @@ class SwarmController(Controller):
|
|||
self._logger.info(
|
||||
"Successfully deployed new configuration 🚀",
|
||||
)
|
||||
self._set_autoconf_load_db()
|
||||
except:
|
||||
self._logger.error(f"Exception while processing Swarm event ({event_type}) :\n{format_exc()}")
|
||||
self.__internal_lock.release()
|
||||
|
|
|
|||
Loading…
Reference in a new issue