start working on python replacement of the bash tool
This commit is contained in:
parent
d47052f216
commit
1008e00ca5
3 changed files with 113 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
**/.env
|
**/.env
|
||||||
|
**/.token
|
||||||
|
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
tabulate==0.8.10
|
||||||
|
hcloud==1.18.0
|
110
shcloud.py
Executable file
110
shcloud.py
Executable file
|
@ -0,0 +1,110 @@
|
||||||
|
#!/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")
|
Loading…
Reference in a new issue