I lost track of what I was doing. But we dont need the license.json anymore.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
import docker
|
import docker
|
||||||
from game_tables import GameTable
|
from game_tables import GameTable
|
||||||
from key_tables import KeyTable
|
from key_tables import KeyTable
|
||||||
import shutil
|
|
||||||
import os
|
import os
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
|
|
||||||
def build_container_routing_labels(prefix: str, strip_prefix=True):
|
def build_container_routing_labels(prefix: str, strip_prefix=True):
|
||||||
@@ -37,7 +37,7 @@ def stop_container(docker_id):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def start_foundry_container(table: GameTable, key: KeyTable, version=12):
|
def start_foundry_container(table: GameTable, key: KeyTable):
|
||||||
client = docker.from_env()
|
client = docker.from_env()
|
||||||
container = None
|
container = None
|
||||||
|
|
||||||
@@ -51,23 +51,21 @@ def start_foundry_container(table: GameTable, key: KeyTable, version=12):
|
|||||||
container.start()
|
container.start()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
image = "felddy/foundryvtt:{version}".format(version=version)
|
image = "felddy/foundryvtt:{version}".format(version=table.version)
|
||||||
labels = build_container_routing_labels(table.game_table_link, False)
|
labels = build_container_routing_labels(table.game_table_link, False)
|
||||||
os.makedirs("/data/" + table.game_table_link + "/Config", exist_ok=True)
|
|
||||||
shutil.copyfile(
|
|
||||||
src="/data/keys/" + key.key_file,
|
|
||||||
dst="/data/" + table.game_table_link + "/Config/license.json",
|
|
||||||
)
|
|
||||||
volumes = {
|
volumes = {
|
||||||
"/home/cow/Projects/dockertesting/data/{prefix}".format(
|
"{data_bind}/{prefix}".format(
|
||||||
prefix=table.game_table_link
|
data_bind=os.environ.get("FOUNDRY_DATA_BIND"),
|
||||||
|
prefix=table.game_table_link,
|
||||||
): {"bind": "/data", "mode": "rw"},
|
): {"bind": "/data", "mode": "rw"},
|
||||||
"/home/cow/Projects/dockertesting/data/container_cache": {
|
"{data_bind}/container_cache".format(
|
||||||
"bind": "/data/container_cache"
|
data_bind=os.environ.get("FOUNDRY_DATA_BIND")
|
||||||
},
|
): {"bind": "/data/container_cache"},
|
||||||
}
|
}
|
||||||
environment = [
|
environment = [
|
||||||
"FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link)
|
"FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link),
|
||||||
|
"FOUNDRY_TELEMETRY=FALSE",
|
||||||
|
"FOUNDRY_LICENSE_KEY={key_value}".format(key_value=key.key),
|
||||||
]
|
]
|
||||||
|
|
||||||
ports = {"30000": str(30000 + table.game_table_id)}
|
ports = {"30000": str(30000 + table.game_table_id)}
|
||||||
|
|||||||
@@ -12,12 +12,13 @@ def get_db():
|
|||||||
|
|
||||||
_game_table_create = """
|
_game_table_create = """
|
||||||
CREATE TABLE IF NOT EXISTS "game_tables" (
|
CREATE TABLE IF NOT EXISTS "game_tables" (
|
||||||
"game_table_id" INTEGER NOT NULL UNIQUE,
|
"game_table_id" INTEGER NOT NULL UNIQUE,
|
||||||
"game_table_name" TEXT UNIQUE,
|
"game_table_name" TEXT UNIQUE,
|
||||||
"game_table_link" TEXT UNIQUE,
|
"game_table_link" TEXT UNIQUE,
|
||||||
"active" INTEGER DEFAULT 0,
|
"version" INTEGER
|
||||||
"game_key" TEXT,
|
"active" INTEGER DEFAULT 0,
|
||||||
"docker_id" TEXT,
|
"game_key" TEXT,
|
||||||
|
"docker_id" TEXT,
|
||||||
PRIMARY KEY("game_table_id")
|
PRIMARY KEY("game_table_id")
|
||||||
);
|
);
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -2,15 +2,18 @@ from sqlite3 import Connection, Cursor
|
|||||||
from database import SmartCursor
|
from database import SmartCursor
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
|
||||||
class GameTableException(Exception):
|
class GameTableException(Exception):
|
||||||
def __init__(self, message):
|
def __init__(self, message):
|
||||||
super().__init__(self, message)
|
super().__init__(self, message)
|
||||||
|
|
||||||
|
|
||||||
class GameTable:
|
class GameTable:
|
||||||
_game_table_id: int
|
_game_table_id: int
|
||||||
_game_table_name: str
|
_game_table_name: str
|
||||||
_game_table_link: str
|
_game_table_link: str
|
||||||
_active: bool
|
_active: bool
|
||||||
|
_version: int
|
||||||
_docker_id: str
|
_docker_id: str
|
||||||
_created: bool
|
_created: bool
|
||||||
_updated: bool
|
_updated: bool
|
||||||
@@ -22,15 +25,17 @@ class GameTable:
|
|||||||
game_table_name: str,
|
game_table_name: str,
|
||||||
game_table_link: str,
|
game_table_link: str,
|
||||||
active: bool,
|
active: bool,
|
||||||
|
version: int,
|
||||||
docker_id: int,
|
docker_id: int,
|
||||||
created: bool = False,
|
created: bool = False,
|
||||||
updated: bool = False,
|
updated: bool = False,
|
||||||
delete: bool = False
|
delete: bool = False,
|
||||||
):
|
):
|
||||||
self._game_table_id = game_table_id
|
self._game_table_id = game_table_id
|
||||||
self._game_table_name = game_table_name
|
self._game_table_name = game_table_name
|
||||||
self._game_table_link = game_table_link
|
self._game_table_link = game_table_link
|
||||||
self._active = active
|
self._active = active
|
||||||
|
self._version = version
|
||||||
self._docker_id = docker_id
|
self._docker_id = docker_id
|
||||||
self._created = created
|
self._created = created
|
||||||
self._updated = updated
|
self._updated = updated
|
||||||
@@ -41,6 +46,7 @@ class GameTable:
|
|||||||
"id": self._game_table_id,
|
"id": self._game_table_id,
|
||||||
"table_name": self._game_table_name,
|
"table_name": self._game_table_name,
|
||||||
"table_link": self._game_table_link,
|
"table_link": self._game_table_link,
|
||||||
|
"version": self._version,
|
||||||
"active": self._active,
|
"active": self._active,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,12 +56,13 @@ class GameTable:
|
|||||||
self._game_table_id = random.randint(1, 999999999)
|
self._game_table_id = random.randint(1, 999999999)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""INSERT INTO game_tables
|
"""INSERT INTO game_tables
|
||||||
(game_table_id, game_table_name, game_table_link, active, docker_id)
|
(game_table_id, game_table_name, game_table_link, version, active, docker_id)
|
||||||
VALUES (?, ?, ?, ?, ?)""",
|
VALUES (?, ?, ?, ?, ?, ?)""",
|
||||||
(
|
(
|
||||||
self._game_table_id,
|
self._game_table_id,
|
||||||
self._game_table_name,
|
self._game_table_name,
|
||||||
self._game_table_link,
|
self._game_table_link,
|
||||||
|
self._version,
|
||||||
self._active,
|
self._active,
|
||||||
self._docker_id,
|
self._docker_id,
|
||||||
),
|
),
|
||||||
@@ -66,11 +73,12 @@ class GameTable:
|
|||||||
if not self._updated:
|
if not self._updated:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""UPDATE game_tables
|
"""UPDATE game_tables
|
||||||
SET game_table_name = ?, game_table_link = ?, active = ?, docker_id = ?
|
SET game_table_name = ?, game_table_link = ?, version = ?, active = ?, docker_id = ?
|
||||||
WHERE game_table_id = ?""",
|
WHERE game_table_id = ?""",
|
||||||
(
|
(
|
||||||
self._game_table_name,
|
self._game_table_name,
|
||||||
self._game_table_link,
|
self._game_table_link,
|
||||||
|
self._version,
|
||||||
self._active,
|
self._active,
|
||||||
self._docker_id,
|
self._docker_id,
|
||||||
self._game_table_id,
|
self._game_table_id,
|
||||||
@@ -79,7 +87,10 @@ class GameTable:
|
|||||||
self._updated = True
|
self._updated = True
|
||||||
return
|
return
|
||||||
if self._delete:
|
if self._delete:
|
||||||
cursor.execute("DELETE FROM game_tables WHERE game_table_id = ?", (self._game_table_id,))
|
cursor.execute(
|
||||||
|
"DELETE FROM game_tables WHERE game_table_id = ?",
|
||||||
|
(self._game_table_id,),
|
||||||
|
)
|
||||||
self._created = False
|
self._created = False
|
||||||
self._updated = True
|
self._updated = True
|
||||||
self._delete = False
|
self._delete = False
|
||||||
@@ -118,6 +129,15 @@ class GameTable:
|
|||||||
self._updated = False
|
self._updated = False
|
||||||
self._game_table_link = game_table_link
|
self._game_table_link = game_table_link
|
||||||
|
|
||||||
|
@property
|
||||||
|
def version(self):
|
||||||
|
return self._version
|
||||||
|
|
||||||
|
@version.setter
|
||||||
|
def version(self, version: int):
|
||||||
|
self._updated = False
|
||||||
|
self._version = version
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def active(self):
|
def active(self):
|
||||||
return self._active
|
return self._active
|
||||||
@@ -146,7 +166,7 @@ class GameService:
|
|||||||
def read_by_id(self, game_table_id, cursor=None):
|
def read_by_id(self, game_table_id, cursor=None):
|
||||||
with SmartCursor(cursor, self.connection) as smartCursor:
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
||||||
rows = smartCursor.execute(
|
rows = smartCursor.execute(
|
||||||
"""SELECT game_table_id, game_table_name, game_table_link, active, docker_id
|
"""SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id
|
||||||
FROM game_tables
|
FROM game_tables
|
||||||
WHERE game_table_id = ?""",
|
WHERE game_table_id = ?""",
|
||||||
(game_table_id,),
|
(game_table_id,),
|
||||||
@@ -155,24 +175,54 @@ class GameService:
|
|||||||
if len(rows) == 0:
|
if len(rows) == 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return GameTable(rows[0], rows[1], rows[2], rows[3], rows[4], True, True, False)
|
return GameTable(
|
||||||
|
game_table_id=rows[0],
|
||||||
|
game_table_name=rows[1],
|
||||||
|
game_table_link=rows[2],
|
||||||
|
active=rows[3],
|
||||||
|
version=rows[4],
|
||||||
|
docker_id=rows[5],
|
||||||
|
created=True,
|
||||||
|
updated=True,
|
||||||
|
delete=False,
|
||||||
|
)
|
||||||
|
|
||||||
def read_all(self, cursor=None):
|
def read_all(self, cursor=None):
|
||||||
with SmartCursor(cursor, self.connection) as smartCursor:
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
||||||
rows = smartCursor.execute(
|
rows = smartCursor.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, version, docker_id FROM game_tables"
|
||||||
).fetchall()
|
).fetchall()
|
||||||
return [
|
return [
|
||||||
GameTable(row[0], row[1], row[2], row[3], row[4], True, True, False)
|
GameTable(
|
||||||
|
game_table_id=row[0],
|
||||||
|
game_table_name=row[1],
|
||||||
|
game_table_link=row[2],
|
||||||
|
active=row[3],
|
||||||
|
version=row[4],
|
||||||
|
docker_id=row[5],
|
||||||
|
created=True,
|
||||||
|
updated=True,
|
||||||
|
delete=False,
|
||||||
|
)
|
||||||
for row in rows
|
for row in rows
|
||||||
]
|
]
|
||||||
|
|
||||||
def read_active(self, cursor=None):
|
def read_active(self, cursor=None):
|
||||||
with SmartCursor(cursor, self.connection) as smartCursor:
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
||||||
rows = smartCursor.execute(
|
rows = smartCursor.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, version, docker_id FROM game_tables WHERE active != 0"
|
||||||
).fetchall()
|
).fetchall()
|
||||||
return [
|
return [
|
||||||
GameTable(row[0], row[1], row[2], row[3], row[4], True, True, False)
|
GameTable(
|
||||||
|
game_table_id=row[0],
|
||||||
|
game_table_name=row[1],
|
||||||
|
game_table_link=row[2],
|
||||||
|
active=row[3],
|
||||||
|
version=row[4],
|
||||||
|
docker_id=row[5],
|
||||||
|
created=True,
|
||||||
|
updated=True,
|
||||||
|
delete=False,
|
||||||
|
)
|
||||||
for row in rows
|
for row in rows
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,13 +10,12 @@ tables = Blueprint("tables_api", __name__)
|
|||||||
|
|
||||||
@tables.route("/tables", methods=["POST"])
|
@tables.route("/tables", methods=["POST"])
|
||||||
def create_table():
|
def create_table():
|
||||||
current_app.logger.info(request.get_json())
|
|
||||||
db = get_db()
|
db = get_db()
|
||||||
with SmartCursor(connection=db) as smartCursor:
|
with SmartCursor(connection=db) as smartCursor:
|
||||||
table = GameTable(
|
table = GameTable(
|
||||||
game_table_id=random.randrange(1, 100000),
|
|
||||||
game_table_name=request.get_json()["table_name"],
|
game_table_name=request.get_json()["table_name"],
|
||||||
game_table_link=request.get_json()["table_link"],
|
game_table_link=request.get_json()["table_link"],
|
||||||
|
version=request.get_json()["version"],
|
||||||
active=False,
|
active=False,
|
||||||
docker_id=None,
|
docker_id=None,
|
||||||
)
|
)
|
||||||
@@ -34,7 +33,16 @@ def get_table(table_id):
|
|||||||
|
|
||||||
@tables.route("/tables/<int:table_id>", methods=["POST"])
|
@tables.route("/tables/<int:table_id>", methods=["POST"])
|
||||||
def update_table(table_id):
|
def update_table(table_id):
|
||||||
return
|
db = get_db()
|
||||||
|
gameService = GameService(db)
|
||||||
|
table = gameService.read_by_id(table_id)
|
||||||
|
table.game_table_name = request.get_json()["table_name"]
|
||||||
|
table.game_table_link = request.get_json()["table_link"]
|
||||||
|
table.version = request.get_json()["version"]
|
||||||
|
with SmartCursor(connection=db) as smartCursor:
|
||||||
|
table.commit(smartCursor)
|
||||||
|
db.commit()
|
||||||
|
return table.toJson(), 200
|
||||||
|
|
||||||
|
|
||||||
@tables.route("tables/<table_id>", methods=["DELETE"])
|
@tables.route("tables/<table_id>", methods=["DELETE"])
|
||||||
@@ -47,7 +55,7 @@ def delete_table(table_id):
|
|||||||
|
|
||||||
table.delete()
|
table.delete()
|
||||||
with SmartCursor(connection=db) as smartCursor:
|
with SmartCursor(connection=db) as smartCursor:
|
||||||
table.commit(smartCursor)
|
table.commit(smartCursor)
|
||||||
db.commit()
|
db.commit()
|
||||||
return jsonify({}), 200
|
return jsonify({}), 200
|
||||||
|
|
||||||
@@ -90,10 +98,13 @@ def activate_table(table_id):
|
|||||||
if len(keys) == 0:
|
if len(keys) == 0:
|
||||||
return "No more keys", 400
|
return "No more keys", 400
|
||||||
|
|
||||||
keys[0].reserve(table.game_table_id)
|
key = keys[0]
|
||||||
|
current_app.logger.info(table.game_table_id)
|
||||||
|
current_app.logger.info(table.docker_id)
|
||||||
|
key.reserve(table.game_table_id)
|
||||||
table.active = True
|
table.active = True
|
||||||
table.docker_id = container_managment.start_foundry_container(table, keys[0])
|
table.docker_id = container_managment.start_foundry_container(table, key)
|
||||||
keys[0].commit(cursor)
|
key.commit(cursor)
|
||||||
table.commit(cursor)
|
table.commit(cursor)
|
||||||
cursor.close()
|
cursor.close()
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|||||||
Reference in New Issue
Block a user