Init webservice commit
This commit is contained in:
parent
2623e36774
commit
6c5c428cd5
9
webservice-balancer/clean.sh
Executable file
9
webservice-balancer/clean.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
chmod +x deploy_webservice.py
|
||||
echo "### Creating venv is probably a good idea - let's make one..."
|
||||
python3 -m venv web_venv
|
||||
source ./web_venv/bin/activate
|
||||
echo "### Now install hcloud module..."
|
||||
pip install -q hcloud
|
||||
echo "### And clear last deployment results..."
|
||||
python deploy_webservice.py --clean
|
13
webservice-balancer/deploy.sh
Executable file
13
webservice-balancer/deploy.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
chmod +x deploy_webservice.py
|
||||
python3 -m venv web_venv
|
||||
source ./web_venv/bin/activate
|
||||
pip install -q hcloud
|
||||
echo "############################"
|
||||
echo "Let's clean everything from last run..."
|
||||
python deploy_webservice.py --clean
|
||||
echo "--------------------------------------------------------------------------"
|
||||
echo " Success! I guess..."
|
||||
echo "############################"
|
||||
echo "Let's spawn some new machines!"
|
||||
python deploy_webservice.py $1 --create
|
196
webservice-balancer/deploy_webservice.py
Executable file
196
webservice-balancer/deploy_webservice.py
Executable file
@ -0,0 +1,196 @@
|
||||
#!/bin/python3
|
||||
from hcloud import Client
|
||||
from hcloud.images.domain import Image
|
||||
from hcloud.networks.domain import NetworkSubnet
|
||||
from hcloud.server_types.domain import ServerType
|
||||
from hcloud.locations.domain import Location
|
||||
from hcloud.load_balancer_types.domain import LoadBalancerType
|
||||
from hcloud.load_balancers.domain import (
|
||||
LoadBalancerHealthCheck,
|
||||
LoadBalancerService,
|
||||
LoadBalancerHealtCheckHttp,
|
||||
)
|
||||
import sys
|
||||
|
||||
|
||||
CLIENT_ID = "s478841"
|
||||
SERVERS_NO = 2
|
||||
key_name = f"ssh-{CLIENT_ID}"
|
||||
net_name = f"webservice-net-{CLIENT_ID}"
|
||||
server_name = f"webservice-server-{CLIENT_ID}"
|
||||
load_balancer_name = f"webservice-load-balancer-{CLIENT_ID}"
|
||||
location = Location("hel1")
|
||||
|
||||
ci_webservice = r"""#cloud-config
|
||||
runcmd:
|
||||
- cd /home
|
||||
- git clone https://git.wmi.amu.edu.pl/s478841/DPZC-Hetzner.git
|
||||
- cd DPZC-Hetzner/webservice-balancer
|
||||
- chmod +x ./webservice
|
||||
- ./webservice
|
||||
"""
|
||||
|
||||
|
||||
def create_client(creds_path):
|
||||
with open(creds_path, "r") as f:
|
||||
token = str(f.readline()).strip()
|
||||
client = Client(token=token)
|
||||
print("The CLIENT has been CREATED")
|
||||
return client
|
||||
|
||||
|
||||
def load_key(pub_key_path):
|
||||
print(f"\t\tUsing the {pub_key_path} file")
|
||||
with open(pub_key_path) as f:
|
||||
key = f.readline()
|
||||
print("\t\tThe SSH KEY has been LOADED")
|
||||
return key
|
||||
|
||||
|
||||
def create_key(client, key_name, pub_key_path):
|
||||
print("The SSH KEY has been...")
|
||||
key_of_power = load_key(pub_key_path)
|
||||
key = client.ssh_keys.create(name=key_name, public_key=key_of_power)
|
||||
print("\tCREATED")
|
||||
return key
|
||||
|
||||
|
||||
def remove_key(client, key_name):
|
||||
print("The KEY has been...", end="")
|
||||
try:
|
||||
action = client.ssh_keys.delete(client.ssh_keys.get_by_name(key_name))
|
||||
action.wait_until_finished()
|
||||
except AttributeError:
|
||||
pass
|
||||
print("DELETED")
|
||||
|
||||
|
||||
def create_network(client, net_name, ip_range):
|
||||
print("The NETWORK has been...", end="")
|
||||
net = client.networks.create(
|
||||
name=net_name,
|
||||
ip_range=ip_range,
|
||||
subnets=[
|
||||
NetworkSubnet(ip_range=ip_range, network_zone="eu-central", type="cloud")
|
||||
],
|
||||
)
|
||||
print("CREATED")
|
||||
return net
|
||||
|
||||
|
||||
def remove_network(client, net_name):
|
||||
print("The NETWORK has been...", end="")
|
||||
try:
|
||||
action = client.networks.delete(client.networks.get_by_name(net_name))
|
||||
action.wait_until_finished()
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
print("DELETED")
|
||||
|
||||
|
||||
def create_server(client, server_name, ssh_key, vnet, location, user_data):
|
||||
print("The WEBSERVICE has been CREATED:", end=" ")
|
||||
webserver = client.servers.create(
|
||||
name=server_name,
|
||||
server_type=ServerType("cx11"),
|
||||
image=Image(name="ubuntu-22.04"),
|
||||
ssh_keys=[ssh_key],
|
||||
networks=[vnet],
|
||||
location=location,
|
||||
user_data=user_data,
|
||||
)
|
||||
webserver.action.wait_until_finished()
|
||||
print(webserver.action.complete)
|
||||
return webserver
|
||||
|
||||
|
||||
def remove_server(client, server_name):
|
||||
print("The WEBSERVICE has been...", end="")
|
||||
try:
|
||||
action = client.servers.delete(client.servers.get_by_name(server_name))
|
||||
action.wait_until_finished()
|
||||
except AttributeError:
|
||||
pass
|
||||
print("DELETED")
|
||||
|
||||
|
||||
def create_load_balancer(client, name, location, vnet, servers):
|
||||
print("The LOAD BALANCER has been CREATED:", end=" ")
|
||||
lb = client.load_balancers.create(
|
||||
name=name,
|
||||
load_balancer_type=LoadBalancerType("lb11"),
|
||||
location=location,
|
||||
services=[
|
||||
LoadBalancerService(
|
||||
protocol="http",
|
||||
listen_port=8080,
|
||||
destination_port=8080,
|
||||
proxyprotocol=False,
|
||||
health_check=LoadBalancerHealthCheck(
|
||||
protocol="http",
|
||||
port=8080,
|
||||
interval=20,
|
||||
timeout=10,
|
||||
retries=3,
|
||||
http=LoadBalancerHealtCheckHttp(
|
||||
path="/factors/6", status_codes=["2xx", "3xx"], tls=False
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
targets=servers,
|
||||
public_interface=True,
|
||||
network=vnet,
|
||||
)
|
||||
lb.action.wait_until_finished()
|
||||
print(lb.action.complete)
|
||||
return lb
|
||||
|
||||
|
||||
def remove_load_balancer(client, name):
|
||||
print("The LOAD BALANCER has been...", end="")
|
||||
try:
|
||||
action = client.load_balancers.delete(client.load_balancers.get_by_name(name))
|
||||
action.wait_until_finished()
|
||||
except AttributeError:
|
||||
pass
|
||||
print("DELETED")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
client = create_client("../tokens/token_file")
|
||||
|
||||
ssh_path = sys.argv[-2]
|
||||
action = sys.argv[-1]
|
||||
|
||||
if action == "--create":
|
||||
ssh_key = create_key(client, key_name, ssh_path)
|
||||
vnet = create_network(client, net_name, "10.10.10.0/24")
|
||||
|
||||
servers = [
|
||||
create_server(
|
||||
client, server_name + "_" + str(i+1), ssh_key, vnet, location, ci_webservice
|
||||
)
|
||||
for i in range(SERVERS_NO)
|
||||
]
|
||||
|
||||
# print(
|
||||
# f"You can access the server (in a few minutes) under the address: http://{server.server.data_model.public_net.ipv4.ip}:3000"
|
||||
# )
|
||||
load_balancer = create_load_balancer(
|
||||
client, load_balancer_name, location, vnet, servers
|
||||
)
|
||||
print(
|
||||
f"Your service should be available at {load_balancer.load_balancer.data_model.public_net.ipv4.ip}\n\n\t\tHave fun!"
|
||||
)
|
||||
elif action == "--clean":
|
||||
remove_load_balancer(client, load_balancer_name)
|
||||
for i in range(SERVERS_NO):
|
||||
remove_server(client, server_name + "_" + str(i+1))
|
||||
remove_network(client, net_name)
|
||||
remove_key(client, key_name)
|
||||
print("\n\n\t\tIt was nice to meet you!")
|
||||
else:
|
||||
print(f"\nSorry, don't know what the'{action}' means...bye!")
|
BIN
webservice-balancer/webservice
Executable file
BIN
webservice-balancer/webservice
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user