package models import "gopkg.in/yaml.v3" type ServiceResource struct { Action string `yaml:"action,omitempty"` SuccessCondition string `yaml:"successCondition,omitempty"` FailureCondition string `yaml:"failureCondition,omitempty"` SetOwnerReference bool `yaml:"setOwnerReference,omitempty"` Manifest string `yaml:"manifest,omitempty"` } type Service struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata Metadata `yaml:"metadata"` Spec ServiceSpec `yaml:"spec"` } func (s *Service) BindToArgo(workflow *Workflow) error { service_manifest, err := yaml.Marshal(s) if err != nil { return err } service_template := Template{Name: "workflow-service-pod", Resource: ServiceResource{ Action: "create", SuccessCondition: "status.succeeded > 0", FailureCondition: "status.failed > 3", SetOwnerReference: true, Manifest: string(service_manifest), }, } workflow.Spec.Templates = append(workflow.Spec.Templates, service_template) return nil } type Metadata struct { Name string `yaml:"name"` } // ServiceSpec is the specification of the Kubernetes Service type ServiceSpec struct { Selector map[string]string `yaml:"selector,omitempty"` Ports []ServicePort `yaml:"ports"` ClusterIP string `yaml:"clusterIP,omitempty"` Type string `yaml:"type,omitempty"` } // ServicePort defines a port for a Kubernetes Service type ServicePort struct { Name string `yaml:"name"` // Even if empty need to be in the yaml Protocol string `yaml:"protocol,omitempty"` Port int `yaml:"port"` TargetPort int `yaml:"targetPort,omitempty"` }