From 8f156e9f704740cbdfc0b0583d429b0461aed4a3 Mon Sep 17 00:00:00 2001 From: Enno Tensing Date: Fri, 8 Aug 2025 21:26:56 +0200 Subject: [PATCH] generate: container: Combine Network, Dns and Ports to ContainerNetwork Signed-off-by: Enno Tensing --- generate/container.py | 48 +++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/generate/container.py b/generate/container.py index de0e908..ef624da 100644 --- a/generate/container.py +++ b/generate/container.py @@ -415,7 +415,7 @@ class Environment: if cmd == "": return "" - return header + cmd + return header + f"printf '\\n' > {self.file}\n" + cmd def remove(self) -> str: """Remove env file.""" @@ -665,15 +665,44 @@ class ContainerOptions: return "" +@dataclass +class ContainerNetwork: + """Wrapper for Network, Dns and Ports.""" + + network: Network + dns: Dns + ports: Ports + + @classmethod + def from_json(cls, json: ConfigValue, logger: Log) -> Self: + """Create from JSON.""" + network_config = maybe(json, "network") + dns_config = maybe(json, "dns") + ports_config = maybe(json, "ports") + + network = Network.from_json(network_config, logger) + dns = Dns.from_json(dns_config, logger) + ports = Ports.from_json(ports_config, logger) + + return cls(network, dns, ports) + + def command(self) -> str: + """Option for podman container create.""" + cmd = "" + cmd += self.network.command() + cmd += self.dns.command() + cmd += self.ports.command() + + return cmd + + class Container: """Container.""" name: str image: Image ct_opts: ContainerOptions - network: Network - dns: Dns - ports: Ports + ct_network: ContainerNetwork env: Environment secrets: list volumes: list @@ -695,9 +724,6 @@ class Container: ct_opts = ContainerOptions.from_json(json, logger) if not ct_opts.is_valid: return - network = maybe(json, "network") - dns = maybe(json, "dns") - ports = maybe(json, "ports") env = maybe(json, "env") secrets = maybe(json, "secrets") volumes = maybe(json, "volumes") @@ -706,9 +732,7 @@ class Container: self.name = str(name) self.image = Image.from_json(image, logger) self.ct_opts = ct_opts - self.network = Network.from_json(network, logger) - self.dns = Dns.from_json(dns, logger) - self.ports = Ports.from_json(ports, logger) + self.ct_network = ContainerNetwork.from_json(json, logger) self.env = Environment.from_json(env, logger) self.env.file = "/var/lib/containerctl/environment-files/" self.env.file += f"{self.name}" @@ -747,9 +771,7 @@ class Container: cmd += "podman container create \\\n" cmd += f"\t--name={self.name} \\\n" cmd += f"{self.ct_opts.command()}" - cmd += f"{self.network.command()}" - cmd += f"{self.dns.command()}" - cmd += f"{self.ports.command()}" + cmd += f"{self.ct_network.command()}" cmd += f"{self.env.command()}" for secret in self.secrets: cmd += f"{secret.command()}"