wireguard-vpn-setup/manage_hetzner_servers.py
Kumi f24aec8da8
fix(config): change config path to current directory
Relative path for the configuration file was adjusted to refer to the current directory, simplifying file location and enhancing script portability. This change prevents issues when running the script from different directories.
2024-07-18 19:10:22 +02:00

85 lines
2.3 KiB
Python

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 = "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()