node: Read config files from dir even if config file not set via --config
#245
7 changed files with 37 additions and 19 deletions
|
@ -7,6 +7,7 @@ Changelog for FrostFS Node
|
|||
### Changed
|
||||
### Fixed
|
||||
- Take network settings into account during netmap contract update (#100)
|
||||
- Read config files from dir even if config file not provided via `--config` for node (#238)
|
||||
|
||||
### Removed
|
||||
### Updated
|
||||
|
|
24
cmd/frostfs-node/config/configdir_test.go
Normal file
24
cmd/frostfs-node/config/configdir_test.go
Normal file
|
@ -0,0 +1,24 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
|
||||
"github.com/spf13/cast"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestConfigDir(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
|
||||
cfgFileName0 := path.Join(dir, "cfg_00.json")
|
||||
cfgFileName1 := path.Join(dir, "cfg_01.yml")
|
||||
|
||||
require.NoError(t, os.WriteFile(cfgFileName0, []byte(`{"storage":{"shard_pool_size":15}}`), 0777))
|
||||
require.NoError(t, os.WriteFile(cfgFileName1, []byte("logger:\n level: debug"), 0777))
|
||||
|
||||
c := New(Prm{}, WithConfigDir(dir))
|
||||
require.Equal(t, "debug", cast.ToString(c.Sub("logger").Value("level")))
|
||||
require.EqualValues(t, 15, cast.ToUint32(c.Sub("storage").Value("shard_pool_size")))
|
||||
}
|
|
@ -219,4 +219,3 @@ tracing:
|
|||
enabled: true
|
||||
exporter: "otlp_grpc"
|
||||
endpoint: "localhost"
|
||||
|
|
@ -490,7 +490,7 @@ const (
|
|||
NetmapCantInvokeNetmapUpdatePeer = "can't invoke netmap.UpdatePeer" // Error in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapNonAlphabetModeIgnoreRemoveNodeFromSubnetNotification = "non alphabet mode, ignore remove node from subnet notification" // Info in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapCouldNotGetNetworkMapCandidates = "could not get network map candidates" // Warn in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapCouldNotUnmarshalSubnetId = "could not unmarshal subnet id" // Warn in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapCouldNotUnmarshalSubnetID = "could not unmarshal subnet id" // Warn in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapGotZeroSubnetInRemoveNodeNotification = "got zero subnet in remove node notification" // Warn in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapCouldNotIterateOverSubnetworksOfTheNode = "could not iterate over subnetworks of the node" // Warn in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
NetmapCouldNotInvokeNetmapUpdateState = "could not invoke netmap.UpdateState" // Error in ../node/pkg/innerring/processors/netmap/process_peers.go
|
||||
|
|
|
@ -159,7 +159,7 @@ func (np *Processor) processRemoveSubnetNode(ev subnetEvent.RemoveNode) {
|
|||
|
||||
err = subnetToRemoveFrom.Unmarshal(rawSubnet)
|
||||
if err != nil {
|
||||
np.log.Warn(logs.NetmapCouldNotUnmarshalSubnetId,
|
||||
np.log.Warn(logs.NetmapCouldNotUnmarshalSubnetID,
|
||||
zap.Error(err),
|
||||
)
|
||||
return
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
|
@ -20,7 +21,7 @@ func ReadConfigDir(v *viper.Viper, configDir string) error {
|
|||
continue
|
||||
}
|
||||
ext := path.Ext(entry.Name())
|
||||
if ext != ".yaml" && ext != ".yml" {
|
||||
|
||||
if ext != ".yaml" && ext != ".yml" && ext != ".json" {
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -33,22 +34,15 @@ func ReadConfigDir(v *viper.Viper, configDir string) error {
|
|||
}
|
||||
|
||||
// mergeConfig reads config file and merge its content with current viper.
|
||||
func mergeConfig(v *viper.Viper, fileName string) (err error) {
|
||||
var cfgFile *os.File
|
||||
cfgFile, err = os.Open(fileName)
|
||||
func mergeConfig(v *viper.Viper, fileName string) error {
|
||||
cv := viper.New()
|
||||
cv.SetConfigFile(fileName)
|
||||
err := cv.ReadInConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("failed to read config: %w", err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
errClose := cfgFile.Close()
|
||||
if err == nil {
|
||||
err = errClose
|
||||
}
|
||||
}()
|
||||
|
||||
if err = v.MergeConfig(cfgFile); err != nil {
|
||||
return err
|
||||
if err = v.MergeConfigMap(cv.AllSettings()); err != nil {
|
||||
return fmt.Errorf("failed to merge config: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Reference in a new issue
Reverted, added support for json.