Kumi
bc9c9aeb75
Removed unnecessary os.path.realpath usage for sys.executable in both manage_hetzner_servers.py and update_local_config.py. This reduces complexity and potential for errors when resolving paths. No significant changes to functionality. This change will make scripts easier to maintain and execute.
85 lines
2.4 KiB
Python
85 lines
2.4 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 = 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()
|