PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/engines/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/engines/docker_events.py |
""" Send events from Docker events :Depends: Docker API >= 1.22 """ import logging import traceback import salt.utils.event import salt.utils.json try: import docker # pylint: disable=import-error,no-name-in-module import docker.utils # pylint: disable=import-error,no-name-in-module HAS_DOCKER_PY = True except ImportError: HAS_DOCKER_PY = False log = logging.getLogger(__name__) # pylint: disable=invalid-name # Default timeout as of docker-py 1.0.0 CLIENT_TIMEOUT = 60 # Define the module's virtual name __virtualname__ = "docker_events" __deprecated__ = ( 3009, "docker", "https://github.com/saltstack/saltext-docker", ) def __virtual__(): """ Only load if docker libs are present """ if not HAS_DOCKER_PY: return (False, "Docker_events engine could not be imported") return True def start( docker_url="unix://var/run/docker.sock", timeout=CLIENT_TIMEOUT, tag="salt/engines/docker_events", filters=None, ): """ Scan for Docker events and fire events Example Config .. code-block:: yaml engines: - docker_events: docker_url: unix://var/run/docker.sock filters: event: - start - stop - die - oom The config above sets up engines to listen for events from the Docker daemon and publish them to the Salt event bus. For filter reference, see https://docs.docker.com/engine/reference/commandline/events/ """ if __opts__.get("__role") == "master": fire_master = salt.utils.event.get_master_event( __opts__, __opts__["sock_dir"] ).fire_event else: fire_master = None def fire(tag, msg): """ How to fire the event """ if fire_master: fire_master(msg, tag) else: __salt__["event.send"](tag, msg) try: # docker-py 2.0 renamed this client attribute client = docker.APIClient(base_url=docker_url, timeout=timeout) except AttributeError: # pylint: disable=not-callable client = docker.Client(base_url=docker_url, timeout=timeout) # pylint: enable=not-callable try: events = client.events(filters=filters) for event in events: data = salt.utils.json.loads( event.decode(__salt_system_encoding__, errors="replace") ) # https://github.com/docker/cli/blob/master/cli/command/system/events.go#L109 # https://github.com/docker/engine-api/blob/master/types/events/events.go # Each output includes the event type, actor id, name and action. # status field can be ommited if data["Action"]: fire("{}/{}".format(tag, data["Action"]), data) else: fire("{}/{}".format(tag, data["status"]), data) except Exception: # pylint: disable=broad-except traceback.print_exc()