diff --git a/manage_hetzner_servers.py b/manage_hetzner_servers.py new file mode 100644 index 0000000..060f842 --- /dev/null +++ b/manage_hetzner_servers.py @@ -0,0 +1,68 @@ +import subprocess +import configparser +from hcloud import Client +import argparse +import pathlib + +UPDATE_SCRIPT_PATH = pathlib.Path(__file__).parent / "update_local_config.py" +CONFIG_PATH = pathlib.Path(__file__).parent / "config.ini" + +def get_hetzner_client(): + config = configparser.ConfigParser() + config.read(CONFIG_PATH) + api_token = config["hetzner"]["api_token"] + return Client(token=api_token) + +def list_hetzner_servers(client): + return client.servers.get_all() + +def delete_hetzner_server(client, server): + server.delete() + +def run_update_script(provider, location, server_type, interface, config_path): + command = [ + "python", UPDATE_SCRIPT_PATH, + "--provider", provider, + "--location", location, + "--server_type", server_type, + "--interface", interface + ] + + if config_path: + command.extend(["--config_path", config_path]) + + result = subprocess.run(command, capture_output=True, text=True) + if result.returncode != 0: + raise Exception(f"Error executing update script: {result.stderr}") + print(result.stdout) + +def main(): + parser = argparse.ArgumentParser(description="Manage Hetzner servers and update local Wireguard VPN.") + parser.add_argument("--provider", type=str, required=True, help="Cloud provider (e.g., hetzner)") + parser.add_argument("--location", type=str, required=True, help="Server location") + parser.add_argument("--server_type", type=str, required=True, help="Server type") + parser.add_argument("--interface", type=str, required=True, help="Wireguard interface (e.g., wg0)") + parser.add_argument("--config_path", type=str, help="Path to the Wireguard configuration file") + + args = parser.parse_args() + + provider = args.provider + location = args.location + server_type = args.server_type + interface = args.interface + config_path = args.config_path + + # Step 1: Get Hetzner client and list existing servers + client = get_hetzner_client() + existing_servers = list_hetzner_servers(client) + + # Step 2: Run the update_local_config.py script + run_update_script(provider, location, server_type, interface, config_path) + + # Step 3: Delete old servers that existed before running the update script + for server in existing_servers: + delete_hetzner_server(client, server) + print(f"Deleted server: {server.name}") + +if __name__ == "__main__": + main() \ No newline at end of file