(mapDelim rune, fileName string)
| 173 | } |
| 174 | |
| 175 | func getFile(mapDelim rune, fileName string) (*File, error) { |
| 176 | k := koanf.New(string(mapDelim)) |
| 177 | if err := k.Load(structs.Provider(createDefaultFile(), "yaml"), nil); err != nil { |
| 178 | return nil, errors.WithMessage(err, "load default") |
| 179 | } |
| 180 | if err := k.Load(kfile.Provider(fileName), kyaml.Parser()); os.IsNotExist(err) { |
| 181 | log.Info().Str("name", fileName).Msg("creating config file") |
| 182 | } else if err != nil { |
| 183 | return nil, errors.WithMessage(err, "load existing") |
| 184 | } |
| 185 | // TODO: Fix entries with same path overwriting each other, e.g. PROFILE_CERT_NAME="bar" and PROFILE_CERT="foo" |
| 186 | if err := k.Load(env.Provider(k, "", "_", func(s string) string { |
| 187 | return strings.ToLower(s) |
| 188 | }), nil); err != nil { |
| 189 | return nil, errors.WithMessage(err, "load envvars") |
| 190 | } |
| 191 | fileConfig := File{} |
| 192 | if err := k.UnmarshalWithConf("", &fileConfig, koanf.UnmarshalConf{Tag: "yaml"}); err != nil { |
| 193 | return nil, errors.WithMessage(err, "unmarshal") |
| 194 | } |
| 195 | file, err := os.Create(fileName) |
| 196 | if err != nil { |
| 197 | return nil, errors.WithMessage(err, "create") |
| 198 | } |
| 199 | defer file.Close() |
| 200 | if err := yaml.NewEncoder(file).Encode(&fileConfig); err != nil { |
| 201 | return nil, errors.WithMessage(err, "write") |
| 202 | } |
| 203 | return &fileConfig, nil |
| 204 | } |
no test coverage detected