wireguard-vpn-setup/manage_hetzner_servers.py

86 lines
2.4 KiB
Python
Raw Normal View History

import subprocess
import configparser
from hcloud import Client
import argparse
import pathlib
import sys
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 = [
sys.executable,
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("--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 = "hetzner"
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()