#!/usr/bin/env python3 import json import shutil import subprocess from pathlib import Path SOURCE_DIR = "/var/source" IMAGES = { "game": [ "minecraft", "minecraft_bedrock", "terraria", ], } def generate(cfg): # minecraft shutil.copy("minecraft/server.default", "minecraft/server.properties") with open("minecraft/server.properties", "a") as f: f.write(f"level-name=data/{cfg["minecraft"]["world"]}\n") # minecraft_bedrock shutil.copy("minecraft_bedrock/server.default", "minecraft_bedrock/server.properties") with open("minecraft_bedrock/server.properties", "a") as f: f.write(f"level-name={cfg["minecraft_bedrock"]["world"]}\n") # terraria shutil.copy("terraria/config.default", "terraria/config.txt") with open("terraria/config.txt", "a") as f: f.write(f"world=/root/data/worlds/{cfg["terraria"]["world"]}.wld\n") f.write(f"autocreate={cfg["terraria"]["autogen"]["size"]}\n") # 1=small, 2=medium, 3=large f.write(f"difficulty={cfg["terraria"]["autogen"]["difficulty"]}\n") # 0=normal, 1=expert, 2=master, 3=journey with open("terraria/password.txt", "w") as f: f.write(cfg["terraria"]["password"]) def run(cmds): try: subprocess.check_output(["ssh", f"core@{cfg["core"]["hostname"]}.local", ";".join(cmds)], stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: print("\033[31m", end="") print(e.output.decode()) print("\033[0m", end="") exit(1) if __name__ == "__main__": cfg = json.load(open("config/server.json")) # generate helper files generate(cfg) # copy files for f in (f for l in IMAGES.values() for f in l): subprocess.run(["scp", "-r", f, f"core@{cfg["core"]["hostname"]}.local:{SOURCE_DIR}"], check=True) # run builds for user in IMAGES: print(f"building images for {user}...") run([f"cd {SOURCE_DIR}"] + [ f"sudo -u {user} podman build --tag {i} {SOURCE_DIR}/{i}" for i in IMAGES[user] ]) # restart pods for user in IMAGES: print(f"restarting pod for {user}...") run([ f"cd {SOURCE_DIR}", f"sudo systemctl --machine={user}@.host --user restart {user}-pod " + " ".join(IMAGES[user]), ])