Skip to content

Commit 2cf2a74

Browse files
Updating logic that checks if a sidecar needs routing and service.
- Check if tty is set to true on the sidecar. - Updated formatting.
1 parent d2b2651 commit 2cf2a74

1 file changed

Lines changed: 145 additions & 144 deletions

File tree

pkg/workflow_execution.go

Lines changed: 145 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -423,163 +423,164 @@ func (c *Client) createWorkflow(namespace string, workflowTemplateID uint64, wor
423423

424424
var newTemplateOrder []wfv1.Template
425425
for tIdx, t := range wf.Spec.Templates {
426-
if t.Metadata.Labels != nil {
427-
if sidecar, ok := t.Metadata.Labels["sidecar"]; ok {
428-
if sidecar == "sys-visualization-sidecar" {
429-
//Inject services, virtual routes
430-
for _, s := range t.Sidecars {
431-
if len(s.Ports) == 0 {
432-
msg := fmt.Sprintf("sidecar %s must have at least one port.", s.Name)
433-
return nil, util.NewUserError(codes.InvalidArgument, msg)
434-
}
426+
//Inject services, virtual routes
427+
for _, s := range t.Sidecars {
428+
//If TTY is true, sidecar needs to be accessible by HTTP
429+
//Otherwise, we skip the sidecar
430+
if s.TTY != true {
431+
continue
432+
}
433+
if len(s.Ports) == 0 {
434+
msg := fmt.Sprintf("sidecar %s must have at least one port.", s.Name)
435+
return nil, util.NewUserError(codes.InvalidArgument, msg)
436+
}
435437

436-
serviceNameUid := "s" + uuid.New().String() + "-" + namespace
437-
serviceNameUidDNSCompliant, err := uid2.GenerateUID(serviceNameUid, 63)
438-
if err != nil {
439-
return nil, util.NewUserError(codes.InvalidArgument, err.Error())
440-
}
441-
serviceName := serviceNameUidDNSCompliant + ".alex001.onepanel.io" //todo grab domain
442-
443-
serviceTemplateName := "k8s-service-template-" + uuid.New().String()
444-
serviceTaskName := "add-service-" + uuid.New().String()
445-
virtualServiceTemplateName := "k8s-virtual-service-template-" + uuid.New().String()
446-
virtualServiceTaskName := "add-virtual-service-" + uuid.New().String()
447-
var servicePorts []corev1.ServicePort
448-
var routes []*networking.HTTPRoute
449-
for _, port := range s.Ports {
450-
servicePort := corev1.ServicePort{
451-
Name: port.Name,
452-
Protocol: port.Protocol,
453-
Port: port.ContainerPort,
454-
TargetPort: intstr.FromInt(int(port.ContainerPort)),
455-
}
456-
servicePorts = append(servicePorts, servicePort)
457-
route := networking.HTTPRoute{
458-
Match: []*networking.HTTPMatchRequest{
459-
{
460-
Uri: &networking.StringMatch{
461-
MatchType: &networking.StringMatch_Prefix{
462-
Prefix: "/"},
463-
},
464-
},
465-
},
466-
Route: []*networking.HTTPRouteDestination{
467-
{
468-
Destination: &networking.Destination{
469-
Host: serviceNameUidDNSCompliant,
470-
Port: &networking.PortSelector{
471-
Number: uint32(port.ContainerPort),
472-
},
473-
},
474-
},
475-
},
476-
}
477-
routes = append(routes, &route)
478-
}
479-
service := corev1.Service{
480-
TypeMeta: metav1.TypeMeta{
481-
APIVersion: "v1",
482-
Kind: "Service",
483-
},
484-
ObjectMeta: metav1.ObjectMeta{
485-
Name: serviceNameUidDNSCompliant,
486-
},
487-
Spec: corev1.ServiceSpec{
488-
Ports: servicePorts,
489-
Selector: map[string]string{
490-
"app": serviceNameUidDNSCompliant,
491-
},
438+
serviceNameUid := "s" + uuid.New().String() + "-" + namespace
439+
serviceNameUidDNSCompliant, err := uid2.GenerateUID(serviceNameUid, 63)
440+
if err != nil {
441+
return nil, util.NewUserError(codes.InvalidArgument, err.Error())
442+
}
443+
444+
serviceName := serviceNameUidDNSCompliant + "." + *c.systemConfig.Domain()
445+
446+
serviceTemplateName := "k8s-service-template-" + uuid.New().String()
447+
serviceTaskName := "add-service-" + uuid.New().String()
448+
virtualServiceTemplateName := "k8s-virtual-service-template-" + uuid.New().String()
449+
virtualServiceTaskName := "add-virtual-service-" + uuid.New().String()
450+
var servicePorts []corev1.ServicePort
451+
var routes []*networking.HTTPRoute
452+
for _, port := range s.Ports {
453+
servicePort := corev1.ServicePort{
454+
Name: port.Name,
455+
Protocol: port.Protocol,
456+
Port: port.ContainerPort,
457+
TargetPort: intstr.FromInt(int(port.ContainerPort)),
458+
}
459+
servicePorts = append(servicePorts, servicePort)
460+
route := networking.HTTPRoute{
461+
Match: []*networking.HTTPMatchRequest{
462+
{
463+
Uri: &networking.StringMatch{
464+
MatchType: &networking.StringMatch_Prefix{
465+
Prefix: "/"},
492466
},
493-
}
494-
serviceManifestBytes, err := yaml2.Marshal(service)
495-
if err != nil {
496-
return nil, err
497-
}
498-
serviceManifest := string(serviceManifestBytes)
499-
templateServiceResource := wfv1.Template{
500-
Name: serviceTemplateName,
501-
Metadata: wfv1.Metadata{
502-
Annotations: map[string]string{
503-
"sidecar.istio.io/inject": "false",
467+
},
468+
},
469+
Route: []*networking.HTTPRouteDestination{
470+
{
471+
Destination: &networking.Destination{
472+
Host: serviceNameUidDNSCompliant,
473+
Port: &networking.PortSelector{
474+
Number: uint32(port.ContainerPort),
504475
},
505476
},
506-
Resource: &wfv1.ResourceTemplate{
507-
Action: "create",
508-
Manifest: serviceManifest,
509-
},
510-
}
511-
newTemplateOrder = append(newTemplateOrder, templateServiceResource)
512-
//routes
513-
virtualServiceNameUUID := "{{workflow.uid}}-" + uuid.New().String()
514-
hosts := []string{serviceName}
515-
virtualService := map[string]interface{}{
516-
"apiVersion": "networking.istio.io/v1alpha3",
517-
"kind": "VirtualService",
518-
"metadata": metav1.ObjectMeta{
519-
Name: virtualServiceNameUUID,
520-
},
521-
"spec": networking.VirtualService{
522-
Http: routes,
523-
Gateways: []string{"istio-system/ingressgateway"},
524-
Hosts: hosts,
525-
},
526-
}
477+
},
478+
},
479+
}
480+
routes = append(routes, &route)
481+
}
482+
service := corev1.Service{
483+
TypeMeta: metav1.TypeMeta{
484+
APIVersion: "v1",
485+
Kind: "Service",
486+
},
487+
ObjectMeta: metav1.ObjectMeta{
488+
Name: serviceNameUidDNSCompliant,
489+
},
490+
Spec: corev1.ServiceSpec{
491+
Ports: servicePorts,
492+
Selector: map[string]string{
493+
"app": serviceNameUidDNSCompliant,
494+
},
495+
},
496+
}
497+
//Istio needs to know which pod to setup the route to
498+
if wf.Spec.Templates[tIdx].Metadata.Labels == nil {
499+
wf.Spec.Templates[tIdx].Metadata.Labels = make(map[string]string)
500+
}
501+
wf.Spec.Templates[tIdx].Metadata.Labels["app"] = serviceNameUidDNSCompliant
502+
serviceManifestBytes, err := yaml2.Marshal(service)
503+
if err != nil {
504+
return nil, err
505+
}
506+
serviceManifest := string(serviceManifestBytes)
507+
templateServiceResource := wfv1.Template{
508+
Name: serviceTemplateName,
509+
Metadata: wfv1.Metadata{
510+
Annotations: map[string]string{
511+
"sidecar.istio.io/inject": "false",
512+
},
513+
},
514+
Resource: &wfv1.ResourceTemplate{
515+
Action: "create",
516+
Manifest: serviceManifest,
517+
},
518+
}
519+
newTemplateOrder = append(newTemplateOrder, templateServiceResource)
520+
//routes
521+
virtualServiceNameUUID := "{{workflow.uid}}-" + uuid.New().String()
522+
hosts := []string{serviceName}
523+
virtualService := map[string]interface{}{
524+
"apiVersion": "networking.istio.io/v1alpha3",
525+
"kind": "VirtualService",
526+
"metadata": metav1.ObjectMeta{
527+
Name: virtualServiceNameUUID,
528+
},
529+
"spec": networking.VirtualService{
530+
Http: routes,
531+
Gateways: []string{"istio-system/ingressgateway"},
532+
Hosts: hosts,
533+
},
534+
}
527535

528-
virtualServiceManifestBytes, err := yaml2.Marshal(virtualService)
529-
if err != nil {
530-
return nil, err
531-
}
532-
virtualServiceManifest := string(virtualServiceManifestBytes)
536+
virtualServiceManifestBytes, err := yaml2.Marshal(virtualService)
537+
if err != nil {
538+
return nil, err
539+
}
540+
virtualServiceManifest := string(virtualServiceManifestBytes)
533541

534-
templateRouteResource := wfv1.Template{
535-
Name: virtualServiceTemplateName,
536-
Metadata: wfv1.Metadata{
537-
Annotations: map[string]string{
538-
"sidecar.istio.io/inject": "false",
539-
},
540-
},
541-
Resource: &wfv1.ResourceTemplate{
542-
Action: "create",
543-
Manifest: virtualServiceManifest,
544-
},
545-
}
546-
newTemplateOrder = append(newTemplateOrder, templateRouteResource)
547-
548-
for i2, t2 := range wf.Spec.Templates {
549-
if t2.Name == wf.Spec.Entrypoint {
550-
if t2.DAG != nil {
551-
tasks := wf.Spec.Templates[i2].DAG.Tasks
552-
for it, t := range tasks {
553-
for _, d := range t.Dependencies {
554-
if d == "sys-send-status" {
555-
wf.Spec.Templates[i2].DAG.Tasks[it].Dependencies =
556-
[]string{d, serviceTaskName, virtualServiceTaskName}
557-
}
558-
}
559-
}
560-
wf.Spec.Templates[i2].DAG.Tasks = append(tasks, []wfv1.DAGTask{
561-
{
562-
Name: serviceTaskName,
563-
Template: serviceTemplateName,
564-
},
565-
{
566-
Name: virtualServiceTaskName,
567-
Template: virtualServiceTemplateName,
568-
},
569-
}...)
542+
templateRouteResource := wfv1.Template{
543+
Name: virtualServiceTemplateName,
544+
Metadata: wfv1.Metadata{
545+
Annotations: map[string]string{
546+
"sidecar.istio.io/inject": "false",
547+
},
548+
},
549+
Resource: &wfv1.ResourceTemplate{
550+
Action: "create",
551+
Manifest: virtualServiceManifest,
552+
},
553+
}
554+
newTemplateOrder = append(newTemplateOrder, templateRouteResource)
555+
556+
for i2, t2 := range wf.Spec.Templates {
557+
if t2.Name == wf.Spec.Entrypoint {
558+
if t2.DAG != nil {
559+
tasks := wf.Spec.Templates[i2].DAG.Tasks
560+
for it, t := range tasks {
561+
for _, d := range t.Dependencies {
562+
if d == "sys-send-status" {
563+
wf.Spec.Templates[i2].DAG.Tasks[it].Dependencies =
564+
[]string{d, serviceTaskName, virtualServiceTaskName}
570565
}
571566
}
572567
}
568+
wf.Spec.Templates[i2].DAG.Tasks = append(tasks, []wfv1.DAGTask{
569+
{
570+
Name: serviceTaskName,
571+
Template: serviceTemplateName,
572+
},
573+
{
574+
Name: virtualServiceTaskName,
575+
Template: virtualServiceTemplateName,
576+
},
577+
}...)
573578
}
574-
newTemplateOrder = append(newTemplateOrder, wf.Spec.Templates[tIdx])
575-
//Inject clean-up
576579
}
577-
} else {
578-
newTemplateOrder = append(newTemplateOrder, wf.Spec.Templates[tIdx])
579580
}
580-
} else {
581-
newTemplateOrder = append(newTemplateOrder, wf.Spec.Templates[tIdx])
582581
}
582+
newTemplateOrder = append(newTemplateOrder, wf.Spec.Templates[tIdx])
583+
//Inject clean-up
583584
}
584585
wf.Spec.Templates = newTemplateOrder
585586
createdArgoWorkflow, err := c.ArgoprojV1alpha1().Workflows(namespace).Create(wf)

0 commit comments

Comments
 (0)