mirror of
https://github.com/project-zot/zot.git
synced 2024-12-16 21:56:37 -05:00
feat(config): handle config files with no explicit extension (#2147)
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>
This commit is contained in:
parent
d685adb029
commit
0bed25dddd
2 changed files with 78 additions and 4 deletions
|
@ -7,6 +7,7 @@ import (
|
|||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -23,6 +24,7 @@ import (
|
|||
"zotregistry.io/zot/pkg/api"
|
||||
"zotregistry.io/zot/pkg/api/config"
|
||||
"zotregistry.io/zot/pkg/api/constants"
|
||||
"zotregistry.io/zot/pkg/common"
|
||||
extconf "zotregistry.io/zot/pkg/extensions/config"
|
||||
"zotregistry.io/zot/pkg/extensions/monitoring"
|
||||
zlog "zotregistry.io/zot/pkg/log"
|
||||
|
@ -738,12 +740,44 @@ func LoadConfiguration(config *config.Config, configPath string) error {
|
|||
// we need another key delimiter.
|
||||
viperInstance := viper.NewWithOptions(viper.KeyDelimiter("::"))
|
||||
|
||||
viperInstance.SetConfigFile(configPath)
|
||||
ext := filepath.Ext(configPath)
|
||||
ext = strings.Replace(ext, ".", "", 1)
|
||||
|
||||
if err := viperInstance.ReadInConfig(); err != nil {
|
||||
log.Error().Err(err).Msg("failed to read configuration")
|
||||
/* if file extension is not supported, try everything
|
||||
it's also possible that the filename is starting with a dot eg: ".config". */
|
||||
if !common.Contains(viper.SupportedExts, ext) {
|
||||
ext = ""
|
||||
}
|
||||
|
||||
return err
|
||||
switch ext {
|
||||
case "":
|
||||
log.Info().Str("path", configPath).Msg("config file with no extension, trying all supported config types")
|
||||
|
||||
var err error
|
||||
|
||||
for _, configType := range viper.SupportedExts {
|
||||
viperInstance.SetConfigType(configType)
|
||||
viperInstance.SetConfigFile(configPath)
|
||||
|
||||
err = viperInstance.ReadInConfig()
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("path", configPath).Msg("failed to read configuration, tried all supported config types")
|
||||
|
||||
return err
|
||||
}
|
||||
default:
|
||||
viperInstance.SetConfigFile(configPath)
|
||||
|
||||
if err := viperInstance.ReadInConfig(); err != nil {
|
||||
log.Error().Err(err).Str("path", configPath).Msg("failed to read configuration")
|
||||
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
metaData := &mapstructure.Metadata{}
|
||||
|
|
|
@ -121,6 +121,46 @@ func TestVerify(t *testing.T) {
|
|||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
Convey("Test verify config with no extension", t, func(c C) {
|
||||
tmpfile, err := os.CreateTemp("", "zot-test*")
|
||||
So(err, ShouldBeNil)
|
||||
defer os.Remove(tmpfile.Name()) // clean up
|
||||
content := []byte(`{"distSpecVersion":"1.1.0-dev","storage":{"rootDirectory":"/tmp/zot"},
|
||||
"http":{"address":"127.0.0.1","port":"8080","realm":"zot"},
|
||||
"log":{"level":"debug"}}`)
|
||||
_, err = tmpfile.Write(content)
|
||||
So(err, ShouldBeNil)
|
||||
err = tmpfile.Close()
|
||||
So(err, ShouldBeNil)
|
||||
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
|
||||
err = cli.NewServerRootCmd().Execute()
|
||||
So(err, ShouldBeNil)
|
||||
})
|
||||
|
||||
Convey("Test verify config with dotted config name", t, func(c C) {
|
||||
tmpfile, err := os.CreateTemp("", ".zot-test*")
|
||||
So(err, ShouldBeNil)
|
||||
defer os.Remove(tmpfile.Name()) // clean up
|
||||
content := []byte(`
|
||||
distspecversion: 1.1.0-dev
|
||||
http:
|
||||
address: 127.0.0.1
|
||||
port: 8080
|
||||
realm: zot
|
||||
log:
|
||||
level: debug
|
||||
storage:
|
||||
rootdirectory: /tmp/zot
|
||||
`)
|
||||
_, err = tmpfile.Write(content)
|
||||
So(err, ShouldBeNil)
|
||||
err = tmpfile.Close()
|
||||
So(err, ShouldBeNil)
|
||||
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
|
||||
err = cli.NewServerRootCmd().Execute()
|
||||
So(err, ShouldBeNil)
|
||||
})
|
||||
|
||||
Convey("Test verify CVE warn for remote storage", t, func(c C) {
|
||||
tmpfile, err := os.CreateTemp("", "zot-test*.json")
|
||||
So(err, ShouldBeNil)
|
||||
|
|
Loading…
Reference in a new issue