#!/usr/bin/env python3 from hcloud import Client, APIException from hcloud.server_types.domain import ServerType import time import argparse import sys # Get Servername parser = argparse.ArgumentParser() parser.add_argument("serverName") parser.add_argument("serverType") parser.add_argument("apiKey") args = parser.parse_args() serverName = args.serverName serverType = args.serverType apiKey = args.apiKey try: client = Client(token=apiKey) server = client.servers.get_by_name(name=serverName) if server.server_type.name == serverType: sys.exit('Server type is already: %s' % serverType) if server.status != "off": print("Stopping: ", server.name) response = client.servers.power_off(server) while server.status != "off": print("Server not yet powerd off, waiting 2 seconds") time.sleep(2) server = client.servers.get_by_name(name=serverName) print("Change Server Type: ", server.name, " to: ", serverType) response = client.servers.change_type( server, server_type=ServerType(name=serverType), upgrade_disk="false") print("Change server type initiated. Waiting 10 seconds.") time.sleep(10) server = client.servers.get_by_name(name=serverName) while server.status == "migrating": print("Server is migrating, waiting 10 seconds.") time.sleep(10) server = client.servers.get_by_name(name=serverName) while server.status == "starting": print("Server is starting, waiting 5 seconds.") time.sleep(5) server = client.servers.get_by_name(name=serverName) if server.status == "running": print("Server finished migration successfully") else: print("Server finished migration with unexpected status.") print("Server status: ", server.status) except APIException as e: print("API Error ", e)