diff --git a/src/container_managment.py b/src/container_managment.py index b4a8366..5d99f5e 100644 --- a/src/container_managment.py +++ b/src/container_managment.py @@ -1,31 +1,66 @@ import docker +def build_container_routing_labels(prefix, strip_prefix=True): + router_key = "traefik.http.routers.{prefix}.rule".format(prefix=prefix) + middleware_key = ( + "traefik.http.middlewares.{prefix}-stripprefix.stripprefix.prefixes".format( + prefix=prefix + ) + ) + middleware_router_key = "traefik.http.routers.{prefix}.middlewares".format( + prefix=prefix + ) + + labels = {} + labels[router_key] = "Host(`localhost`) && PathPrefix(`/{prefix}`)".format( + prefix=prefix + ) + if strip_prefix: + labels[middleware_key] = "/{prefix}".format(prefix=prefix) + labels[middleware_router_key] = "{prefix}-stripprefix".format( + prefix=prefix + ) + + return labels + + def start_container(table_name, prefix): client = docker.from_env() - - router_key = "traefik.http.routers.{table_name}.rule".format(table_name=table_name) - middleware_key = ( - "traefik.http.middlewares.{table_name}-stripprefix.stripprefix.prefixes".format( - table_name=table_name - ) - ) - middleware_router_key = "traefik.http.routers.{table_name}.middlewares".format( - table_name=table_name - ) - - labels = {} - labels[router_key] = "Host(`localhost`) && PathPrefix(`/{prefix}`)".format(prefix=prefix) - labels[middleware_key] = "/{prefix}".format(prefix=prefix) - labels[middleware_router_key] = "{table_name}-stripprefix".format(table_name=table_name) + labels = build_container_labels(prefix) container = client.containers.run( - image="crccheck/hello-world", detach=True, labels=labels, ports={8000:8000} + image="crccheck/hello-world", detach=True, labels=labels, ports={8000: 8000} ) return container.id + def stop_container(docker_id): client = docker.from_env() container = client.containers.get(docker_id) container.kill() + + +def start_foundry_container(table_name, prefix, version=12): + client = docker.from_env() + + image = "felddy/foundryvtt:{version}".format(version=version) + labels = build_container_routing_labels(prefix, False) + volumes = { + "/home/cow/Projects/dockertesting/server_data_mount/{prefix}".format( + prefix=prefix + ): {"bind": "/data", "mode": "rw"}, + "/home/cow/Projects/dockertesting/server_data_mount/foundry_cache": { + "bind": "/data/container_cache" + }, + } + environment = [ + "FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=prefix) + ] + + container = client.containers.run( + image=image, labels=labels, volumes=volumes, environment=environment, ports={"30000":"30000"}, detach=True + ) + + return container.id diff --git a/src/game_tables.py b/src/game_tables.py index 15dd41c..a1246b2 100644 --- a/src/game_tables.py +++ b/src/game_tables.py @@ -84,6 +84,15 @@ class GameTable: self._updated = False self._game_table_name = game_table_name + @property + def game_table_link(self): + return self._game_table_link + + @game_table_link.setter + def game_table_link(self, game_table_link): + self._updated = False + self._game_table_link = game_table_link + @property def active(self): return self._active @@ -121,11 +130,15 @@ def read_all(cursor): rows = cursor.execute( "SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables" ).fetchall() - return [GameTable(row[0], row[1], row[2], row[3], row[4], True, True) for row in rows] + return [ + GameTable(row[0], row[1], row[2], row[3], row[4], True, True) for row in rows + ] def read_active(cursor): rows = cursor.execute( "SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables WHERE active != 0" ).fetchall() - return [GameTable(row[0], row[1], row[2], row[3], row[4],True, True) for row in rows] + return [ + GameTable(row[0], row[1], row[2], row[3], row[4], True, True) for row in rows + ] diff --git a/src/main.py b/src/main.py index e718116..8bdd5e2 100644 --- a/src/main.py +++ b/src/main.py @@ -83,8 +83,8 @@ def activate_table(table_id): keys[0].reserve(table.game_table_id) table.active = True - table.docker_id = container_managment.start_container( - table.game_table_name, "test_table_1" + table.docker_id = container_managment.start_foundry_container( + table.game_table_name, table.game_table_link ) app.logger.info(table.docker_id) keys[0].commit(cursor)