feat: implement Port
This commit is contained in:
parent
5d090fca45
commit
2b9ddaa865
5 changed files with 171 additions and 47 deletions
|
@ -64,8 +64,8 @@ class Graph:
|
|||
self.add_vertex(volume.source, "volume")
|
||||
self.add_edge(service.name, volume.source, "links")
|
||||
for port in service.ports:
|
||||
self.add_vertex(port, "port")
|
||||
self.add_edge(service.name, port, "ports")
|
||||
self.add_vertex(port.host_port, "port")
|
||||
self.add_edge(service.name, port.host_port, "ports")
|
||||
for depends_on in service.depends_on:
|
||||
self.dot.edge(depends_on, service.name, "depends_on")
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ from ruamel.yaml import YAML
|
|||
|
||||
from compose_viz.compose import Compose, Service
|
||||
from compose_viz.extends import Extends
|
||||
from compose_viz.port import Port
|
||||
from compose_viz.volume import Volume, VolumeType
|
||||
|
||||
|
||||
|
@ -86,7 +87,13 @@ class Parser:
|
|||
image=service_image,
|
||||
networks=service_networks,
|
||||
extends=service_extends,
|
||||
ports=service_ports,
|
||||
ports=[
|
||||
Port(
|
||||
# TODO: not implemented yet
|
||||
host_port=service_ports[0],
|
||||
container_port=service_ports[0],
|
||||
)
|
||||
],
|
||||
depends_on=service_depends_on,
|
||||
volumes=service_volumes,
|
||||
links=service_links,
|
||||
|
|
25
compose_viz/port.py
Normal file
25
compose_viz/port.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
from enum import Enum
|
||||
|
||||
|
||||
class Protocol(str, Enum):
|
||||
tcp = "tcp"
|
||||
udp = "udp"
|
||||
|
||||
|
||||
class Port:
|
||||
def __init__(self, host_port: str, container_port: str, protocol: Protocol = Protocol.tcp):
|
||||
self._host_port = host_port
|
||||
self._container_port = container_port
|
||||
self._protocol = protocol
|
||||
|
||||
@property
|
||||
def host_port(self):
|
||||
return self._host_port
|
||||
|
||||
@property
|
||||
def container_port(self):
|
||||
return self._container_port
|
||||
|
||||
@property
|
||||
def protocol(self):
|
||||
return self._protocol
|
|
@ -1,6 +1,7 @@
|
|||
from typing import List, Optional
|
||||
|
||||
from compose_viz.extends import Extends
|
||||
from compose_viz.port import Port
|
||||
from compose_viz.volume import Volume
|
||||
|
||||
|
||||
|
@ -9,7 +10,7 @@ class Service:
|
|||
self,
|
||||
name: str,
|
||||
image: Optional[str] = None,
|
||||
ports: List[str] = [],
|
||||
ports: List[Port] = [],
|
||||
networks: List[str] = [],
|
||||
volumes: List[Volume] = [],
|
||||
depends_on: List[str] = [],
|
||||
|
|
|
@ -3,6 +3,7 @@ import pytest
|
|||
from compose_viz.compose import Compose
|
||||
from compose_viz.extends import Extends
|
||||
from compose_viz.parser import Parser
|
||||
from compose_viz.port import Port
|
||||
from compose_viz.service import Service
|
||||
from compose_viz.volume import Volume, VolumeType
|
||||
|
||||
|
@ -80,7 +81,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="web",
|
||||
image="build from .",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="redis",
|
||||
|
@ -96,19 +99,25 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
networks=["front-tier", "back-tier"],
|
||||
),
|
||||
Service(
|
||||
name="monitoring",
|
||||
image="awesome/monitoring",
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
networks=["admin"],
|
||||
),
|
||||
Service(
|
||||
name="backend",
|
||||
image="awesome/backend",
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
networks=["back-tier", "admin"],
|
||||
),
|
||||
]
|
||||
|
@ -121,7 +130,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="monitoring",
|
||||
|
@ -130,7 +141,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="backend",
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -142,7 +155,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
networks=["front-tier", "back-tier"],
|
||||
),
|
||||
Service(
|
||||
|
@ -152,7 +167,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
Service(
|
||||
name="backend",
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
networks=["back-tier", "admin"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
),
|
||||
|
@ -252,18 +269,24 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="monitoring",
|
||||
image="awesome/monitoring",
|
||||
depends_on=["backend"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="backend",
|
||||
image="awesome/backend",
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -282,7 +305,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
image="awesome/monitoring",
|
||||
networks=["admin"],
|
||||
depends_on=["backend"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="backend",
|
||||
|
@ -299,18 +324,24 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="monitoring",
|
||||
depends_on=["backend"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="backend",
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -329,7 +360,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
networks=["admin"],
|
||||
depends_on=["backend"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="backend",
|
||||
|
@ -450,7 +483,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
type=VolumeType.bind,
|
||||
),
|
||||
],
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -481,7 +516,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
type=VolumeType.bind,
|
||||
),
|
||||
],
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -509,7 +546,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
extends=Extends(service_name="monitoring"),
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -540,7 +579,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
extends=Extends(service_name="monitoring"),
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -670,12 +711,16 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="frontend",
|
||||
image="awesome/webapp",
|
||||
ports=["8000:5000"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5000"),
|
||||
],
|
||||
),
|
||||
Service(
|
||||
name="monitoring",
|
||||
image="awesome/monitoring",
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
volumes=[
|
||||
Volume(source="db-data", target="/data"),
|
||||
Volume(
|
||||
|
@ -689,7 +734,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="backend",
|
||||
image="awesome/backend",
|
||||
ports=["8000:5001"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5001"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -721,7 +768,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
depends_on=["monitoring"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -750,7 +799,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
],
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -782,7 +833,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
],
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
|
@ -896,7 +949,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="backend",
|
||||
image="awesome/backend",
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -924,7 +979,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
name="backend",
|
||||
image="awesome/backend",
|
||||
networks=["back-tier", "admin"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -949,7 +1006,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
Service(
|
||||
name="backend",
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -977,7 +1036,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
name="backend",
|
||||
networks=["back-tier", "admin"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1109,7 +1170,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
name="backend",
|
||||
image="awesome/backend",
|
||||
depends_on=["monitoring"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1138,7 +1201,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
image="awesome/backend",
|
||||
networks=["back-tier", "admin"],
|
||||
depends_on=["monitoring"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1164,7 +1229,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
name="backend",
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1193,7 +1260,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
networks=["back-tier", "admin"],
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1360,7 +1429,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
type=VolumeType.bind,
|
||||
),
|
||||
],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1396,7 +1467,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
type=VolumeType.bind,
|
||||
),
|
||||
],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1429,7 +1502,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1465,7 +1540,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1637,7 +1714,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
depends_on=["monitoring"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1674,7 +1753,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
),
|
||||
],
|
||||
depends_on=["monitoring"],
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1708,7 +1789,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
],
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1745,7 +1828,9 @@ from compose_viz.volume import Volume, VolumeType
|
|||
],
|
||||
depends_on=["monitoring"],
|
||||
extends=Extends(service_name="frontend"),
|
||||
ports=["8000:5010"],
|
||||
ports=[
|
||||
Port(host_port="8000", container_port="5010"),
|
||||
],
|
||||
links=["db:database"],
|
||||
),
|
||||
Service(
|
||||
|
@ -1766,7 +1851,13 @@ def test_parse_file(test_input: str, expected: Compose) -> None:
|
|||
for actual_service, expected_service in zip(actual.services, expected.services):
|
||||
assert actual_service.name == expected_service.name
|
||||
assert actual_service.image == expected_service.image
|
||||
assert actual_service.ports == expected_service.ports
|
||||
|
||||
assert len(actual_service.ports) == len(expected_service.ports)
|
||||
for actual_port, expected_port in zip(actual_service.ports, expected_service.ports):
|
||||
assert actual_port.host_port == expected_port.host_port
|
||||
assert actual_port.container_port == expected_port.container_port
|
||||
assert actual_port.protocol == expected_port.protocol
|
||||
|
||||
assert actual_service.networks == expected_service.networks
|
||||
|
||||
assert len(actual_service.volumes) == len(expected_service.volumes)
|
||||
|
|
Loading…
Reference in a new issue