shcloud/shcloud.py

110 lines
No EOL
3.7 KiB
Python
Executable file

#!/bin/python3
import sys
from os import environ, system, path
from tabulate import tabulate
from hcloud import Client
from hcloud.images.domain import Image
from hcloud.server_types.domain import ServerType
from hcloud.ssh_keys.domain import SSHKey
from hcloud.datacenters.domain import Datacenter
from hcloud.primary_ips.domain import PrimaryIP
from hcloud.volumes.domain import Volume
from hcloud.servers.domain import ServerCreatePublicNetwork
from hcloud.locations.domain import Location
server_name = "lgsm-1"
#server_type = "cx11"
server_type_id = None
server_key = 6513932
server_image = 45557056
server_ipv4 = 11737045
server_ipv6 = 11737053
volume_id = 22257210 #11742041
# please put the token in a file named .token in the same dir as the python script
token_file = open("%s/.token"%path.dirname(__file__), "r")
token = token_file.read().replace("\n","")
token_file.close()
client = Client(token=token)
# get volume
volume = Volume(volume_id)
# get server types
models = client.server_types.get_all()
# functions
def delete_server(s):
print ("detach volume")
response = client.volumes.detach(volume)
response.wait_until_finished()
print("deleting server...")
response = s.delete()
response.wait_until_finished()
def check_servertype(server_type):
# return id or None
for m in models:
if m.name == server_type and m.deprecated == False:
return(m.id)
return(None)
def select_servertype():
# return id or None
models_list = []
for m in models:
models_list.append([str(m.id), str(m.name), str(m.description), str(m.cores), str(m.memory), str(m.disk), str(m.storage_type), str(m.cpu_type), str(m.deprecated)])
print(tabulate(models_list, headers=["ID","Name","Description", "Cores", "Memory", "Disk", "Storage Type", "CPU Type", "Deprecated"], tablefmt="rounded_grid"))
return(input("Selection: "))
if len(sys.argv) < 2:
print("shcloud python script")
print("")
print("usage:")
print("shcloud.py create <server_model>")
print("shcloud.py delete")
exit(0)
if sys.argv[1] == "delete":
delete_server(client.servers.get_by_name(server_name))
exit(0)
if sys.argv[1] == "create":
# check if server model was selected
if len(sys.argv) > 2:
# get server models
server_type_id = check_servertype(sys.argv[2])
# if not found force the user to select one
while server_type_id == None:
print("Server type not found. Please select one:")
server_type_id = check_servertype(select_servertype())
else:
while server_type_id == None:
print("Server type not found. Please select one:")
server_type_id = check_servertype(select_servertype())
# check if server already exists
servers = client.servers.get_all()
for s in servers:
if s.name == server_name:
print("server already there")
answer = input("delete? y/N: ")
if answer.lower() == "y":
delete_server(s)
exit(0) # for now, until I have a way to wait
else:
print("Server should not be deleted. Aboring...")
exit(0)
# create new server
print("create new server")
response = client.servers.create(
name=server_name,
server_type=ServerType(id=server_type_id),
image=Image(id=server_image),
ssh_keys=[SSHKey(id=server_key)],
location=Location(name="fsn1"),
volumes=[Volume(id=volume_id)],
public_net=ServerCreatePublicNetwork(ipv4=PrimaryIP(id=server_ipv4),ipv6=PrimaryIP(id=server_ipv6),enable_ipv4 = True, enable_ipv6 = True)
)
response.action.wait_until_finished()
print("done")