github.com/kubeshop/testkube@v1.17.23/internal/template/parser.go (about) 1 package parser 2 3 import ( 4 "encoding/base64" 5 "io" 6 "os" 7 "path/filepath" 8 9 "github.com/pkg/errors" 10 11 "github.com/kubeshop/testkube/internal/config" 12 "github.com/kubeshop/testkube/pkg/executor" 13 "github.com/kubeshop/testkube/pkg/log" 14 "github.com/kubeshop/testkube/pkg/utils" 15 ) 16 17 func ParseJobTemplates(cfg *config.Config) (t executor.Templates, err error) { 18 t.Job, err = LoadConfigFromStringOrFile( 19 cfg.TestkubeTemplateJob, 20 cfg.TestkubeConfigDir, 21 "job-template.yml", 22 "job template", 23 ) 24 if err != nil { 25 return t, err 26 } 27 28 t.Slave, err = LoadConfigFromStringOrFile( 29 cfg.TestkubeTemplateSlavePod, 30 cfg.TestkubeConfigDir, 31 "slave-pod-template.yml", 32 "slave pod template", 33 ) 34 if err != nil { 35 return t, err 36 } 37 38 t.PVC, err = LoadConfigFromStringOrFile( 39 cfg.TestkubeContainerTemplatePVC, 40 cfg.TestkubeConfigDir, 41 "pvc-template.yml", 42 "pvc template", 43 ) 44 if err != nil { 45 return t, err 46 } 47 48 return t, nil 49 } 50 51 func ParseContainerTemplates(cfg *config.Config) (t executor.Templates, err error) { 52 t.Job, err = LoadConfigFromStringOrFile( 53 cfg.TestkubeContainerTemplateJob, 54 cfg.TestkubeConfigDir, 55 "job-container-template.yml", 56 "job container template", 57 ) 58 if err != nil { 59 return t, err 60 } 61 62 t.Scraper, err = LoadConfigFromStringOrFile( 63 cfg.TestkubeContainerTemplateScraper, 64 cfg.TestkubeConfigDir, 65 "job-scraper-template.yml", 66 "job scraper template", 67 ) 68 if err != nil { 69 return t, err 70 } 71 72 t.PVC, err = LoadConfigFromStringOrFile( 73 cfg.TestkubeContainerTemplatePVC, 74 cfg.TestkubeConfigDir, 75 "pvc-template.yml", 76 "pvc template", 77 ) 78 if err != nil { 79 return t, err 80 } 81 82 return t, nil 83 } 84 85 func LoadConfigFromStringOrFile(inputString, configDir, filename, configType string) (raw string, err error) { 86 var data []byte 87 88 if inputString != "" { 89 if utils.IsBase64Encoded(inputString) { 90 data, err = base64.StdEncoding.DecodeString(inputString) 91 if err != nil { 92 return "", errors.Wrapf(err, "error decoding %s from base64", configType) 93 } 94 raw = string(data) 95 log.DefaultLogger.Infof("parsed %s from base64 env var", configType) 96 } else { 97 raw = inputString 98 log.DefaultLogger.Infof("parsed %s from plain env var", configType) 99 } 100 } else if f, err := os.Open(filepath.Join(configDir, filename)); err == nil { 101 data, err = io.ReadAll(f) 102 if err != nil { 103 return "", errors.Wrapf(err, "error reading file %s from config dir %s", filename, configDir) 104 } 105 raw = string(data) 106 log.DefaultLogger.Infof("loaded %s from file %s", configType, filepath.Join(configDir, filename)) 107 } else { 108 log.DefaultLogger.Infof("no %s config found", configType) 109 } 110 111 return raw, nil 112 }