mirror of
https://github.com/Lore09/Tesi-Magistrale.git
synced 2025-12-19 04:14:35 +00:00
Add deploy
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
REGISTRY_URL=
|
||||
REGISTRY_USER=
|
||||
REGISTRY_PASSWORD=
|
||||
PARALLEL_BUILD=
|
||||
PARALLEL_BUILD=
|
||||
NATS_HOST=
|
||||
NATS_PORT=
|
||||
@@ -16,7 +16,7 @@ nast server check connection
|
||||
|
||||
Creare l'host wasmcloud con il comando
|
||||
```bash
|
||||
wash up -d
|
||||
wash up -d --multi-local
|
||||
```
|
||||
Controllare il corretto deployment dell'host
|
||||
```bash
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import argparse
|
||||
import src
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
def main():
|
||||
load_dotenv()
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate, build and deploy WASM components written in go"
|
||||
)
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
import src.code_generator.generator as code_generator
|
||||
import src.wasm_builder.build as wasm_builder
|
||||
import src.component_deploy.deploy as deployer
|
||||
|
||||
class Pelato:
|
||||
def __init__(self):
|
||||
@@ -10,12 +9,13 @@ class Pelato:
|
||||
self.setup_vars()
|
||||
|
||||
def setup_vars(self):
|
||||
load_dotenv()
|
||||
|
||||
self.registry_url = os.getenv('REGISTRY_URL')
|
||||
self.reg_user = os.getenv('REGISTRY_USER')
|
||||
self.reg_pass = os.getenv('REGISTRY_PASSWORD')
|
||||
self.detached = os.getenv('PARALLEL_BUILD')
|
||||
self.nats_host = os.getenv('NATS_HOST')
|
||||
self.nats_port = os.getenv('NATS_PORT')
|
||||
|
||||
def generate(self, project_dir):
|
||||
code_generator.generate(project_dir, self.registry_url)
|
||||
@@ -24,7 +24,14 @@ class Pelato:
|
||||
wasm_builder.build_project(project_dir, self.reg_user, self.reg_pass, self.detached)
|
||||
|
||||
def deploy(self, project_dir):
|
||||
print(f"Deploying WASM components for project {project_dir}")
|
||||
|
||||
deployer.deploy_components(project_dir, self.nats_host, self.nats_port, self.detached)
|
||||
|
||||
def all(self, project_dir):
|
||||
print(f"Doing everything for project {project_dir}")
|
||||
|
||||
print('-------------------------------------------')
|
||||
print(f"Starting PELATO for project {project_dir}")
|
||||
print('-------------------------------------------')
|
||||
|
||||
self.generate(project_dir)
|
||||
self.build(project_dir)
|
||||
self.deploy(project_dir)
|
||||
83
src/component_deploy/deploy.py
Normal file
83
src/component_deploy/deploy.py
Normal file
@@ -0,0 +1,83 @@
|
||||
import docker
|
||||
import os
|
||||
import logging
|
||||
import yaml
|
||||
|
||||
def deploy_components(project_dir, nats_host, nats_port, detached):
|
||||
|
||||
# Check if the project directory is valid
|
||||
if not os.path.exists(f"{project_dir}/gen"):
|
||||
logging.error(f"Project directory is not valid")
|
||||
return
|
||||
|
||||
print('Deploying WASM components')
|
||||
|
||||
# Docker client
|
||||
client = docker.from_env()
|
||||
|
||||
# Build the images for the project if they don't exist
|
||||
try:
|
||||
client.images.get("wash-deploy-image:latest")
|
||||
except docker.errors.ImageNotFound:
|
||||
|
||||
print(' - Building wash-deploy-image from Dockerfile...')
|
||||
client.images.build(
|
||||
path="src/component_deploy/docker",
|
||||
dockerfile="deploy.Dockerfile",
|
||||
tag="wash-deploy-image:latest"
|
||||
)
|
||||
|
||||
try:
|
||||
wait_list = []
|
||||
|
||||
for task in os.listdir(f"{project_dir}/gen"):
|
||||
__deploy_wadm(f"{project_dir}/gen/{task}", client, nats_host, nats_port, detached, wait_list)
|
||||
|
||||
if detached == 'True':
|
||||
|
||||
print('Waiting for deployment...')
|
||||
for container in wait_list:
|
||||
try:
|
||||
client.containers.get(container).wait()
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error deploying project: {e}")
|
||||
return
|
||||
|
||||
print("Project built successfully")
|
||||
|
||||
def __deploy_wadm(task_dir, client, nats_host, nats_port, detached, wait_list):
|
||||
|
||||
wadm = __parse_yaml(f"{task_dir}/wadm.yaml")
|
||||
|
||||
path = os.path.abspath(task_dir)
|
||||
|
||||
name = wadm['spec']['components'][0]['name'] + '-deploy'
|
||||
|
||||
# Build the wasm module
|
||||
print(f" - Deploying WASM module {name}")
|
||||
container = client.containers.run(
|
||||
"wash-deploy-image:latest",
|
||||
environment=[f'WASMCLOUD_CTL_HOST={nats_host}',
|
||||
f'WASMCLOUD_CTL_PORT={nats_port}'],
|
||||
volumes={path: {'bind': '/app', 'mode': 'rw'}},
|
||||
remove=True,
|
||||
detach=True,
|
||||
name=name
|
||||
)
|
||||
|
||||
if detached == 'False':
|
||||
container.wait()
|
||||
else:
|
||||
wait_list.append(name)
|
||||
|
||||
|
||||
def __parse_yaml(yaml_file):
|
||||
with open(yaml_file, 'r') as stream:
|
||||
try:
|
||||
return yaml.safe_load(stream)
|
||||
except yaml.YAMLError as exc:
|
||||
print(exc)
|
||||
return None
|
||||
Reference in New Issue
Block a user