mumble_server_config_service/dockerConfig.py
George bd6492564f feat:
--FREE docker-compose.yml
	--Fast API
2026-06-19 17:27:42 +05:30

118 lines
3.0 KiB
Python

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Optional
import re
import json
import os
from datetime import datetime
COMPOSE_FILE = "docker-compose.yml"
JSON_FILE = "compose_changes.json"
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
class ComposeConfig(BaseModel):
icesecretwrite: Optional[str] = None
icesecretread: Optional[str] = None
dbDriver: Optional[str] = None
dbHost: Optional[str] = None
dbPort: Optional[str] = None
database: Optional[str] = None
dbUsername: Optional[str] = None
dbPassword: Optional[str] = None
def read_json():
if not os.path.exists(JSON_FILE):
return {"file": "docker-compose.yml", "version": 0}
with open(JSON_FILE) as f:
return json.load(f)
def write_json(changes):
data = read_json()
data["version"] += 1
data["last_updated"] = datetime.now().isoformat()
with open(JSON_FILE, "w") as f:
json.dump(data, f, indent=2)
return data["version"]
def update_compose(
icesecretwrite=None,
icesecretread=None,
dbDriver=None,
dbHost=None,
dbPort=None,
database=None,
dbUsername=None,
dbPassword=None
):
with open(COMPOSE_FILE, "r") as f:
content = f.read()
changes = {
"MUMBLE_CONFIG_icesecretwrite": icesecretwrite,
"MUMBLE_CONFIG_icesecretread": icesecretread,
"MUMBLE_CONFIG_dbDriver": dbDriver,
"MUMBLE_CONFIG_dbHost": dbHost,
"MUMBLE_CONFIG_dbPort": dbPort,
"MUMBLE_CONFIG_database": database,
"MUMBLE_CONFIG_dbUsername": dbUsername,
"MUMBLE_CONFIG_dbPassword": dbPassword,
}
for key, value in changes.items():
if value is None:
continue # skip fields not passed in
# replace the value after the = sign
content = re.sub(
rf"({key}=).*",
rf"\g<1>{value}",
content
)
with open(COMPOSE_FILE, "w") as f:
f.write(content)
version = write_json(changes)
print(f"[✓] docker-compose.yml updated")
# --- usage ---
# update_compose(
# dbHost="172.test.test.test",
# dbPassword="testpassword",
# dbPort="5437test"
# )
@app.post("/update")
def update(config: ComposeConfig):
changes = config.model_dump()
# check at least one field provided
if not any(v is not None for v in changes.values()):
return {"error": "No fields provided — nothing to update"}
print(changes)
updated = update_compose(icesecretwrite=changes["icesecretwrite"],
icesecretread=changes["icesecretread"],
dbDriver=changes["dbDriver"],
dbHost=changes["dbHost"],
dbPort=changes["dbPort"],
database=changes["database"],
dbUsername=changes["dbUsername"],
dbPassword=changes["dbPassword"])
version = write_json(updated)
return {
"message": "docker-compose.yml updated"
}