- Introduced `certbot.py` for ACME certificate management, including certificate issuance, renewal, and environment validation. - Added `haproxy.py` for HAProxy process management, configuration validation, and dynamic command handling. - Implemented `container_env.py` for reading and parsing environment variables with YAML overrides. - Created `consts.py` for centralized management of static and dynamic paths. - Added `manager.py` to enable plugin discovery, initialization, configuration, and execution. - Refactored logging and configuration handling across modules for consistency. Enhances modularity and scalability by introducing feature-dedicated modules and structured configuration handling.
35 lines
No EOL
1.4 KiB
Python
35 lines
No EOL
1.4 KiB
Python
import socket
|
|
|
|
import docker
|
|
|
|
from .interface import ProcessorInterface
|
|
|
|
|
|
class Docker(ProcessorInterface):
|
|
def __init__(self, filename=None):
|
|
self.parsed_object = None
|
|
self.client = docker.from_env()
|
|
super().__init__()
|
|
|
|
def inspect_network(self):
|
|
try:
|
|
ha_proxy_network_name = next(
|
|
iter(self.client.containers.get(socket.gethostname()).attrs["NetworkSettings"]["Networks"]))
|
|
except Exception:
|
|
# HAProxy is not running in a container, get first container network
|
|
if len(self.client.containers.list()) == 0:
|
|
return
|
|
ha_proxy_network_name = next(iter(
|
|
self.client.containers.get(self.client.containers.list()[0].name).attrs["NetworkSettings"]["Networks"]))
|
|
|
|
ha_proxy_network = self.client.networks.get(ha_proxy_network_name)
|
|
|
|
self.parsed_object = {}
|
|
for container in self.client.containers.list():
|
|
# Issue 32 - Docker container cannot connect to containers in different network.
|
|
if ha_proxy_network_name not in container.attrs["NetworkSettings"]["Networks"].keys():
|
|
ha_proxy_network.connect(container.name)
|
|
container = self.client.containers.get(container.name) # refresh object
|
|
|
|
ip_address = container.attrs["NetworkSettings"]["Networks"][ha_proxy_network_name]["IPAddress"]
|
|
self.parsed_object[ip_address] = container.labels |