HLO Frontend Engine
The HLO Frontend Engine is the Component of the HLO responsible for exposing an HLO REST API to the management portal. It exposes Exposes endpoints for cross-domain service LCM. It receives a TOSCA modeled service deployment request and initiates a service orchestration across aerOS domains.
Upon a create request, TOSCA yaml is parsed and its nodes are converted to NGSI-LD entities. These entities are created and pushed to domain CB. The Service entity id is pushed to HLO data aggregator.
Upon an update request, TOSCA yaml is parsed and its nodes are converted to NGSI-LD entities. Old/new entities are created/updated and pushed to domain CB. The Service entity id is pushed to HLO data aggregator.
Upon a delete request, entities are updated for service deallocation. Service id is pushed to HLO data aggregator.
Prerequisities
This component requires make, helm and docker for building and installation.
Installation
Note that this component is part of HLO common deployment and used in aerOS domain installation. You can install as part of this standard installation.
- For development installation :
git clone https://gitlab.aeros-project.eu/wp3/t3.3/hlo-frontend.git
cd hlo-frontend
python3 -m venv venv
pip install -r requirments
source venv/bin/activate
uvicorn main:app --reload
- test APIs using the FastAPI swagger page, example Tosca included
or test APIs using POSTMAN collection included (HLO-FE-Engine.postman_collection.json)
for testing APIs either connect with MVP RedPanda broker or disable broker registration and message publishing
For isolated component installation in aerOS domain, you can use the Makefile in the repository :
Edit variables, if needed, and :
Build and tag docker image
make build
Push to aerOS repository
make push
Package and upload helm chart
make helm-upload
Deploy against cluster chosen as current k8s context
make deploy
All the above
make all
Removes docker image
make clean-build
Removes the helm deployment from the cluster
make clean-deploy
Removes all the above
make clean-all
Configuration options
The component can be configured from docker container environment variables :
CB_URL : Context Broker URL.
CB_PORT : Context Broker Port.
BOOTSTRAP_SERVERS : Redpanda bootstrap servers.
GROUP_ID : Redpanda group id.
AUTO_OFFSET_RESET : Auto Offset Reset option for Redpanda.
CONSUMER_TOPIC : The Redpanda topic used to publish to the data aggregator.
Developer guide
Communications and Interactions
As introduced before, The HLO FE EP exposes a REST API and send a trigger message to the Data Aggregator. In what follows, the concerned data definitions :
HLO FE EP openAPI |
Messages exchanged |
Primitives definition |
|---|---|---|
openapi: 3.1.0
info:
version: "1.0.0"
title: HLO Domain Frontend API
contact:
email: info@aeros-project.com
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
servers:
- description: HLO Domain Frontend endpoint
url: '{protocol}://{hostname}:{port}'
variables:
protocol:
enum:
- http
- https
default: https
hostname:
default: localhost
port:
default: '443'
tags:
- name: hlo_fe
paths:
/hlo_fe/services/{service_id}:
post:
tags:
- hlo_fe
description: Allocate a new service across domains
operationId: allocateService
parameters:
- $ref: '#/components/parameters/serviceIdParameter'
requestBody:
description: The service TOSCA definition
content:
"application/x-yaml":
schema:
type: string
description: "service TOSCA"
responses:
'200':
description: "service allocation initiated"
'400':
description: "invalid service parameters"
delete:
tags:
- hlo_fe
description: Deallocate an existing service across domains
operationId: deallocateService
parameters:
- $ref: '#/components/parameters/serviceIdParameter'
responses:
'200':
description: "service deallocation initated"
'404':
$ref: "#/components/responses/ServiceNotFound"
put:
tags:
- hlo_fe
operationId: changeServiceAllocationParamters
requestBody:
description: The service TOSCA definition
content:
"application/x-yaml":
schema:
type: string
description: "service TOSCA"
parameters:
- $ref: '#/components/parameters/serviceIdParameter'
responses:
'200':
description: "service allocation parameters change initiated"
'404':
$ref: "#/components/responses/ServiceNotFound"
components:
parameters:
serviceIdParameter:
name: 'service_id'
in: query
schema:
type: string
responses:
ServiceNotFound:
description: "service not found"
|
syntax = "proto3";
import "hlo.proto";
message HLODataAggregatorOutput {
Service service = 1;
}
|
syntax = "proto3";
message Domain {
string id = 1;
}
message Service {
string id = 1;
}
message LowLevelOrchestrator {
string id = 1;
string orchestration_type = 3;
Domain domain = 2;
}
message InfrastructureElement {
string id = 1;
float total_ram = 2;
float cpu_cores = 3;
float avg_power_consumption = 4;
bool real_time_capable = 5;
float current_ram = 6;
float current_cpu_usage = 7;
float current_power_consumption = 8;
Domain domain = 9;
LowLevelOrchestrator low_level_orchestrator = 10;
}
message Port {
int32 number = 1;
}
message ServiceComponent {
string id = 1;
string image = 2;
repeated Port ports = 3;
Service service = 4;
ServiceComponentConstraints service_component_constraints = 5;
optional InfrastructureElement infrastructure_element = 6;
}
message ServiceComponentConstraints {
map<string, float> constraints = 1;
}
|