set up some initial work around starting a foundry container
This commit is contained in:
@@ -1,31 +1,66 @@
|
|||||||
import docker
|
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):
|
def start_container(table_name, prefix):
|
||||||
client = docker.from_env()
|
client = docker.from_env()
|
||||||
|
labels = build_container_labels(prefix)
|
||||||
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)
|
|
||||||
|
|
||||||
container = client.containers.run(
|
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
|
return container.id
|
||||||
|
|
||||||
|
|
||||||
def stop_container(docker_id):
|
def stop_container(docker_id):
|
||||||
client = docker.from_env()
|
client = docker.from_env()
|
||||||
container = client.containers.get(docker_id)
|
container = client.containers.get(docker_id)
|
||||||
container.kill()
|
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
|
||||||
|
|||||||
@@ -84,6 +84,15 @@ class GameTable:
|
|||||||
self._updated = False
|
self._updated = False
|
||||||
self._game_table_name = game_table_name
|
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
|
@property
|
||||||
def active(self):
|
def active(self):
|
||||||
return self._active
|
return self._active
|
||||||
@@ -121,11 +130,15 @@ def read_all(cursor):
|
|||||||
rows = cursor.execute(
|
rows = cursor.execute(
|
||||||
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables"
|
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables"
|
||||||
).fetchall()
|
).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):
|
def read_active(cursor):
|
||||||
rows = cursor.execute(
|
rows = cursor.execute(
|
||||||
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables WHERE active != 0"
|
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables WHERE active != 0"
|
||||||
).fetchall()
|
).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
|
||||||
|
]
|
||||||
|
|||||||
@@ -83,8 +83,8 @@ def activate_table(table_id):
|
|||||||
|
|
||||||
keys[0].reserve(table.game_table_id)
|
keys[0].reserve(table.game_table_id)
|
||||||
table.active = True
|
table.active = True
|
||||||
table.docker_id = container_managment.start_container(
|
table.docker_id = container_managment.start_foundry_container(
|
||||||
table.game_table_name, "test_table_1"
|
table.game_table_name, table.game_table_link
|
||||||
)
|
)
|
||||||
app.logger.info(table.docker_id)
|
app.logger.info(table.docker_id)
|
||||||
keys[0].commit(cursor)
|
keys[0].commit(cursor)
|
||||||
|
|||||||
Reference in New Issue
Block a user