Workin' Argo struct
This commit is contained in:
@@ -3,6 +3,7 @@ package models
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"cloud.o-forge.io/core/oc-lib/models/common/models"
|
||||
"cloud.o-forge.io/core/oc-lib/models/resources"
|
||||
)
|
||||
|
||||
@@ -59,11 +60,25 @@ type TemplateMetadata struct {
|
||||
Labels map[string]string `yaml:"labels,omitempty"`
|
||||
}
|
||||
|
||||
type Key struct {
|
||||
Key string `yaml:"key"`
|
||||
}
|
||||
|
||||
type Artifact struct {
|
||||
Name string `yaml:"name"`
|
||||
Path string `yaml:"path"`
|
||||
S3 *Key `yaml:"s3,omitempty"`
|
||||
}
|
||||
|
||||
type InOut struct {
|
||||
Parameters []Parameter `yaml:"parameters"`
|
||||
Artifacts []Artifact `yaml:"artifacts,omitempty"`
|
||||
}
|
||||
|
||||
type Template struct {
|
||||
Name string `yaml:"name"`
|
||||
Inputs struct {
|
||||
Parameters []Parameter `yaml:"parameters"`
|
||||
} `yaml:"inputs,omitempty"`
|
||||
Name string `yaml:"name"`
|
||||
Inputs InOut `yaml:"inputs,omitempty"`
|
||||
Outputs InOut `yaml:"outputs,omitempty"`
|
||||
Container Container `yaml:"container,omitempty"`
|
||||
Dag *Dag `yaml:"dag,omitempty"`
|
||||
Metadata TemplateMetadata `yaml:"metadata,omitempty"`
|
||||
@@ -71,39 +86,43 @@ type Template struct {
|
||||
}
|
||||
|
||||
func (template *Template) CreateContainer(processing *resources.ProcessingResource, dag *Dag) {
|
||||
container := Container{Image: processing.Container.Image}
|
||||
instance := processing.GetSelectedInstance()
|
||||
if instance == nil {
|
||||
return
|
||||
}
|
||||
inst := instance.(*resources.ProcessingInstance)
|
||||
container := Container{Image: inst.Access.Container.Image}
|
||||
if container.Image == "" {
|
||||
return
|
||||
}
|
||||
container.Command = []string{"sh", "-c"} // all is bash
|
||||
for name := range processing.Container.Env {
|
||||
template.Inputs.Parameters = append(template.Inputs.Parameters, Parameter{Name: name})
|
||||
for _, v := range inst.Env {
|
||||
template.Inputs.Parameters = append(template.Inputs.Parameters, Parameter{Name: v.Name})
|
||||
}
|
||||
for _, a := range strings.Split(processing.Container.Args, " ") {
|
||||
container.Args = append(container.Args, template.replacePerEnv(a, processing.Container.Env, dag))
|
||||
for _, v := range inst.Inputs {
|
||||
template.Inputs.Parameters = append(template.Inputs.Parameters, Parameter{Name: v.Name})
|
||||
}
|
||||
cmd := strings.ReplaceAll(processing.Container.Command, container.Image, "")
|
||||
container.Args = []string{cmd + " " + strings.Join(container.Args, " ")}
|
||||
for _, v := range inst.Inputs {
|
||||
template.Outputs.Parameters = append(template.Inputs.Parameters, Parameter{Name: v.Name})
|
||||
}
|
||||
cmd := strings.ReplaceAll(inst.Access.Container.Command, container.Image, "")
|
||||
for _, a := range strings.Split(cmd, " ") {
|
||||
container.Args = append(container.Args, template.ReplacePerEnv(a, inst.Env))
|
||||
}
|
||||
for _, a := range strings.Split(inst.Access.Container.Args, " ") {
|
||||
container.Args = append(container.Args, template.ReplacePerEnv(a, inst.Env))
|
||||
}
|
||||
container.Args = []string{strings.Join(container.Args, " ")}
|
||||
template.Container = container
|
||||
}
|
||||
|
||||
func (template *Template) replacePerEnv(arg string, envs map[string]string, dag *Dag) string {
|
||||
for k, v := range envs {
|
||||
if strings.Contains(arg, k) {
|
||||
value := v
|
||||
for _, task := range dag.Tasks {
|
||||
if task.Name == template.Name {
|
||||
for _, p := range task.Arguments.Parameters {
|
||||
if p.Name == k {
|
||||
value = p.Value
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
arg = strings.ReplaceAll(arg, "$"+k, value)
|
||||
arg = strings.ReplaceAll(arg, "${"+k+"}", value)
|
||||
arg = strings.ReplaceAll(arg, k, value)
|
||||
func (template *Template) ReplacePerEnv(arg string, envs []models.Param) string {
|
||||
for _, v := range envs {
|
||||
if strings.Contains(arg, v.Name) {
|
||||
value := "{{ inputs.parameters." + v.Name + " }}"
|
||||
arg = strings.ReplaceAll(arg, v.Name, value)
|
||||
arg = strings.ReplaceAll(arg, "$"+v.Name, value)
|
||||
arg = strings.ReplaceAll(arg, "$", "")
|
||||
}
|
||||
}
|
||||
return arg
|
||||
|
Reference in New Issue
Block a user