57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
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"`
|
|
}
|