improve handling of same port translation

This commit is contained in:
pb
2024-09-04 17:12:54 +02:00
parent 03ad8c084d
commit ed48fc0a55
4 changed files with 60 additions and 48 deletions

View File

@@ -5,9 +5,11 @@
package workflow_builder
import (
"oc-monitord/models"
. "oc-monitord/models"
"os"
"slices"
"strconv"
"strings"
"time"
@@ -25,7 +27,7 @@ var logger zerolog.Logger
type ArgoBuilder struct {
OriginWorkflow w.Workflow
Workflow Workflow
Services *Service
Services []Service
Timeout int
}
@@ -49,10 +51,7 @@ type Spec struct {
func (b *ArgoBuilder) CreateDAG() (string, error) {
// handle services by checking if there is only one processing with hostname and port
b.createNginxVolumes()
b.createTemplates()
b.createDAGstep()
b.createVolumes()
@@ -91,6 +90,7 @@ func (b *ArgoBuilder) createTemplates() {
var command string
var args string
var env string
var serv models.Service
comp_res := comp.Processing
@@ -114,24 +114,22 @@ func (b *ArgoBuilder) createTemplates() {
new_temp := Template{Name: argo_name, Container: temp_container}
new_temp.Inputs.Parameters = inputs_container
new_temp.Container.VolumeMounts = append(new_temp.Container.VolumeMounts, VolumeMount{Name: "workdir", MountPath: "/mnt/vol"}) // TODO : replace this with a search of the storage / data source name
new_temp.Container.VolumeMounts = append(new_temp.Container.VolumeMounts, VolumeMount{Name: "nginx-demo", MountPath: "/usr/share/nginx"}) // Used for processing services' demo with nginx
if (b.isService(comp.ID)){
serv := b.CreateService(comp)
b.createService(serv, argo_name, comp.ID)
serv = b.CreateService(comp)
b.addServiceToWorkflow(serv, argo_name, comp.ID)
new_temp.Metadata.Labels = make(map[string]string)
new_temp.Metadata.Labels["app"] = "oc-service" // Construct the template for the k8s service and add a link in graph between k8s service and processing
new_temp.Metadata.Labels["app"] = serv.Spec.Selector["app"] // Construct the template for the k8s service and add a link in graph between k8s service and processing
b.addServiceToArgo(serv)
// if err != nil {
// // TODO
// }
}
b.Workflow.Spec.Templates = append(b.Workflow.Spec.Templates, new_temp)
}
if b.Services != nil {
b.addServiceToArgo()
}
}
@@ -153,8 +151,9 @@ func (b *ArgoBuilder) createDAGstep() {
new_dag.Tasks = append(new_dag.Tasks, step)
}
if b.Services != nil {
new_dag.Tasks = append(new_dag.Tasks, Task{Name:"workflow-service-pod", Template: "workflow-service-pod"})
for i, _ := range b.Services {
name := "workflow-service-pod-"+strconv.Itoa(i + 1)
new_dag.Tasks = append(new_dag.Tasks, Task{Name: name , Template: name})
}
b.Workflow.Spec.Templates = append(b.Workflow.Spec.Templates, Template{Name: "dag", Dag: new_dag})
@@ -170,15 +169,6 @@ func (b *ArgoBuilder) createVolumes() {
b.Workflow.Spec.Volumes = append(b.Workflow.Spec.Volumes, new_volume)
}
// For demo purposes, until we implement the use of storage ressources
func (b *ArgoBuilder) createNginxVolumes() {
new_volume := VolumeClaimTemplate{}
new_volume.Metadata.Name = "nginx-demo"
new_volume.Spec.AccessModes = []string{"ReadWriteOnce"}
new_volume.Spec.Resources.Requests.Storage = "1Gi"
b.Workflow.Spec.Volumes = append(b.Workflow.Spec.Volumes, new_volume)
}
func (b *ArgoBuilder) getDependency(current_computing_id string) (dependencies []string) {
@@ -320,13 +310,4 @@ func (b *ArgoBuilder) isService(id string) bool{
}
func (b *ArgoBuilder) addLabel(name string, id string) {
argo_name := getArgoName(name,id)
for _, template := range b.Workflow.Spec.Templates{
if template.Name == argo_name{
template.Metadata.Labels["app"] = "service-workflow"
return
}
}
}