Lacking variables and bash scripts fixes

This commit is contained in:
MatOgr 2023-01-13 10:48:25 +01:00
parent 226c42b9eb
commit 31d5a09460
3 changed files with 70 additions and 43 deletions

View File

@ -1,9 +1,14 @@
#!/bin/bash
chmod +x deploy_webservice.py
echo "### Creating venv is probably a good idea - let's make one..."
python3 -m venv web_venv
if [ -d "web_venv" ]; then
echo " web_venv already exists, skipping creation..."
else
python3 -m venv web_venv
echo " CREATED"
fi
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
python deploy_webservice.py --clean

View File

@ -1,11 +1,16 @@
#!/bin/bash
chmod +x deploy_webservice.py
python3 -m venv web_venv
echo "### Creating venv is probably a good idea - let's make one..."
if [ -d "web_venv" ]; then
echo " web_venv already exists, skipping creation..."
else
python3 -m venv web_venv
echo " CREATED"
fi
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 "############################"

View File

@ -9,12 +9,14 @@ from hcloud.load_balancers.domain import (
LoadBalancerHealthCheck,
LoadBalancerService,
LoadBalancerHealtCheckHttp,
LoadBalancerTarget,
)
import sys
CLIENT_ID = "s478841"
SERVERS_NO = 2
SERVERS_NO = 5
TARGET_PORT = 8080
key_name = f"ssh-{CLIENT_ID}"
net_name = f"webservice-net-{CLIENT_ID}"
server_name = f"webservice-server-{CLIENT_ID}"
@ -49,8 +51,10 @@ def load_key(pub_key_path):
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)
key = client.ssh_keys.get_by_name(key_name) or None
if not key:
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
@ -66,20 +70,24 @@ def remove_key(client, key_name):
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(f"The NETWORK {net_name} has been...", end="")
net = client.networks.get_by_name(net_name) or None
if not net:
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="")
print(f"The NETWORK {net_name} has been...", end="")
try:
action = client.networks.delete(client.networks.get_by_name(net_name))
action.wait_until_finished()
@ -90,23 +98,27 @@ def remove_network(client, net_name):
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
webserver = client.servers.get_by_name(server_name) or None
if webserver is not None:
print(f"The WEBSERVICE {server_name} already exists")
else:
print(f"The WEBSERVICE {server_name}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 server_name
def remove_server(client, server_name):
print("The WEBSERVICE has been...", end="")
print(f"The WEBSERVICE {server_name} has been...", end="")
try:
action = client.servers.delete(client.servers.get_by_name(server_name))
action.wait_until_finished()
@ -116,7 +128,15 @@ def remove_server(client, server_name):
def create_load_balancer(client, name, location, vnet, servers):
print("The LOAD BALANCER has been CREATED:", end=" ")
targets = [
LoadBalancerTarget(
type="server",
server=client.servers.get_by_name(server),
use_private_ip=True,
)
for server in servers
]
print(f"The LOAD BALANCER {name} has been CREATED:", end=" ")
lb = client.load_balancers.create(
name=name,
load_balancer_type=LoadBalancerType("lb11"),
@ -124,32 +144,32 @@ def create_load_balancer(client, name, location, vnet, servers):
services=[
LoadBalancerService(
protocol="http",
listen_port=8080,
destination_port=8080,
listen_port=TARGET_PORT,
destination_port=TARGET_PORT,
proxyprotocol=False,
health_check=LoadBalancerHealthCheck(
protocol="http",
port=8080,
interval=20,
port=TARGET_PORT,
interval=15,
timeout=10,
retries=3,
http=LoadBalancerHealtCheckHttp(
path="/factors/6", status_codes=["2xx", "3xx"], tls=False
path="/factors/6", status_codes=["2??", "3??"], tls=False
),
),
)
],
targets=servers,
targets=targets,
public_interface=True,
network=vnet,
)
lb.action.wait_until_finished()
print(lb.action.complete)
return lb
return client.load_balancers.get_by_name(name)
def remove_load_balancer(client, name):
print("The LOAD BALANCER has been...", end="")
print(f"The LOAD BALANCER {name} has been...", end="")
try:
action = client.load_balancers.delete(client.load_balancers.get_by_name(name))
action.wait_until_finished()
@ -176,14 +196,11 @@ if __name__ == "__main__":
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!"
f"\nYour service should be available at:\n\thttp://{load_balancer.data_model.public_net.ipv4.ip}:{TARGET_PORT}\n\n\t\tHave fun!"
)
elif action == "--clean":
remove_load_balancer(client, load_balancer_name)