diff --git a/go.mod b/go.mod index 1b288ea..b926439 100644 --- a/go.mod +++ b/go.mod @@ -39,4 +39,5 @@ require ( golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 43c7001..f2cbb40 100644 --- a/go.sum +++ b/go.sum @@ -139,3 +139,5 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/preset.go b/preset.go index 9a59484..75b3307 100644 --- a/preset.go +++ b/preset.go @@ -1,11 +1,14 @@ package main import ( + "io" "log" "net/http" "os" + "strings" "github.com/gin-gonic/gin" + "sigs.k8s.io/yaml" ) const ( @@ -19,6 +22,31 @@ var ( usePresetEmbedFS = true ) +func convertYAMLPreset(f *os.File) (string, error) { + tmpFile, err := os.Create(f.Name() + ".json") + if err != nil { + return "", err + } + defer tmpFile.Close() + + yamlContent, err := io.ReadAll(f) + if err != nil { + return "", err + } + + jsonContent, err := yaml.YAMLToJSON(yamlContent) + if err != nil { + return "", err + } + + _, err = tmpFile.Write(jsonContent) + if err != nil { + return "", err + } + + return tmpFile.Name(), nil +} + func checkPreset() { if len(*flags.Preset) > 0 { if _, err := presets.Open(*flags.Preset); err == nil { @@ -27,11 +55,22 @@ func checkPreset() { log.Println("Use built-in preset", usePresetPath) return } - if _, err := os.Open(*flags.Preset); err == nil { + if f, err := os.Open(*flags.Preset); err == nil { + defer f.Close() usePresetPath = *flags.Preset usePresetEmbedFS = false log.Println("Use custom preset", *flags.Preset) - return + if strings.HasSuffix(*flags.Preset, ".yml") || + strings.HasSuffix(*flags.Preset, ".yaml") { + newPath, err := convertYAMLPreset(f) + if err == nil { + usePresetPath = newPath + return + } + log.Printf("Error: failed to convert %s to json: %v", *flags.Preset, err) + } else { + return + } } log.Println("Error: load config preset", *flags.Preset, "failed, try default preset") }