61 lines
1.8 KiB
Python
Executable File
61 lines
1.8 KiB
Python
Executable File
#!/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) |