cli: allow to provide network-specific node config file
Close #2978. Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
parent
abf3ef5af7
commit
4be9e4347a
5 changed files with 45 additions and 18 deletions
|
@ -35,9 +35,9 @@ const RPCEndpointFlag = "rpc-endpoint"
|
||||||
// Network is a set of flags for choosing the network to operate on
|
// Network is a set of flags for choosing the network to operate on
|
||||||
// (privnet/mainnet/testnet).
|
// (privnet/mainnet/testnet).
|
||||||
var Network = []cli.Flag{
|
var Network = []cli.Flag{
|
||||||
cli.BoolFlag{Name: "privnet, p", Usage: "use private network configuration"},
|
cli.BoolFlag{Name: "privnet, p", Usage: "use private network configuration (if --config-file option is not specified)"},
|
||||||
cli.BoolFlag{Name: "mainnet, m", Usage: "use mainnet network configuration"},
|
cli.BoolFlag{Name: "mainnet, m", Usage: "use mainnet network configuration (if --config-file option is not specified)"},
|
||||||
cli.BoolFlag{Name: "testnet, t", Usage: "use testnet network configuration"},
|
cli.BoolFlag{Name: "testnet, t", Usage: "use testnet network configuration (if --config-file option is not specified)"},
|
||||||
cli.BoolFlag{Name: "unittest", Hidden: true},
|
cli.BoolFlag{Name: "unittest", Hidden: true},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,14 @@ var Historic = cli.StringFlag{
|
||||||
// Config is a flag for commands that use node configuration.
|
// Config is a flag for commands that use node configuration.
|
||||||
var Config = cli.StringFlag{
|
var Config = cli.StringFlag{
|
||||||
Name: "config-path",
|
Name: "config-path",
|
||||||
Usage: "path to directory with configuration files",
|
Usage: "path to directory with per-network configuration files (may be overridden by --config-file option for the configuration file)",
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConfigFile is a flag for commands that use node configuration and provide
|
||||||
|
// path to the specific config file instead of config path.
|
||||||
|
var ConfigFile = cli.StringFlag{
|
||||||
|
Name: "config-file",
|
||||||
|
Usage: "path to the node configuration file (overrides --config-path option)",
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug is a flag for commands that allow node in debug mode usage.
|
// Debug is a flag for commands that allow node in debug mode usage.
|
||||||
|
@ -152,7 +159,11 @@ func GetRPCWithInvoker(gctx context.Context, ctx *cli.Context, signers []transac
|
||||||
// GetConfigFromContext looks at the path and the mode flags in the given config and
|
// GetConfigFromContext looks at the path and the mode flags in the given config and
|
||||||
// returns an appropriate config.
|
// returns an appropriate config.
|
||||||
func GetConfigFromContext(ctx *cli.Context) (config.Config, error) {
|
func GetConfigFromContext(ctx *cli.Context) (config.Config, error) {
|
||||||
configPath := "./config"
|
var configFile = ctx.String("config-file")
|
||||||
|
if len(configFile) != 0 {
|
||||||
|
return config.LoadFile(configFile)
|
||||||
|
}
|
||||||
|
var configPath = "./config"
|
||||||
if argCp := ctx.String("config-path"); argCp != "" {
|
if argCp := ctx.String("config-path"); argCp != "" {
|
||||||
configPath = argCp
|
configPath = argCp
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ import (
|
||||||
|
|
||||||
// NewCommands returns 'node' command.
|
// NewCommands returns 'node' command.
|
||||||
func NewCommands() []cli.Command {
|
func NewCommands() []cli.Command {
|
||||||
cfgFlags := []cli.Flag{options.Config}
|
cfgFlags := []cli.Flag{options.Config, options.ConfigFile}
|
||||||
cfgFlags = append(cfgFlags, options.Network...)
|
cfgFlags = append(cfgFlags, options.Network...)
|
||||||
var cfgWithCountFlags = make([]cli.Flag, len(cfgFlags))
|
var cfgWithCountFlags = make([]cli.Flag, len(cfgFlags))
|
||||||
copy(cfgWithCountFlags, cfgFlags)
|
copy(cfgWithCountFlags, cfgFlags)
|
||||||
|
@ -85,7 +85,7 @@ func NewCommands() []cli.Command {
|
||||||
{
|
{
|
||||||
Name: "node",
|
Name: "node",
|
||||||
Usage: "start a NeoGo node",
|
Usage: "start a NeoGo node",
|
||||||
UsageText: "neo-go node [--config-path path] [-d] [-p/-m/-t]",
|
UsageText: "neo-go node [--config-path path] [-d] [-p/-m/-t] [--config-file file]",
|
||||||
Action: startServer,
|
Action: startServer,
|
||||||
Flags: cfgFlags,
|
Flags: cfgFlags,
|
||||||
},
|
},
|
||||||
|
@ -96,21 +96,21 @@ func NewCommands() []cli.Command {
|
||||||
{
|
{
|
||||||
Name: "dump",
|
Name: "dump",
|
||||||
Usage: "dump blocks (starting with block #1) to the file",
|
Usage: "dump blocks (starting with block #1) to the file",
|
||||||
UsageText: "neo-go db dump -o file [-s start] [-c count] [--config-path path] [-p/-m/-t]",
|
UsageText: "neo-go db dump -o file [-s start] [-c count] [--config-path path] [-p/-m/-t] [--config-file file]",
|
||||||
Action: dumpDB,
|
Action: dumpDB,
|
||||||
Flags: cfgCountOutFlags,
|
Flags: cfgCountOutFlags,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "restore",
|
Name: "restore",
|
||||||
Usage: "restore blocks from the file",
|
Usage: "restore blocks from the file",
|
||||||
UsageText: "neo-go db restore -i file [--dump] [-n] [-c count] [--config-path path] [-p/-m/-t]",
|
UsageText: "neo-go db restore -i file [--dump] [-n] [-c count] [--config-path path] [-p/-m/-t] [--config-file file]",
|
||||||
Action: restoreDB,
|
Action: restoreDB,
|
||||||
Flags: cfgCountInFlags,
|
Flags: cfgCountInFlags,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "reset",
|
Name: "reset",
|
||||||
Usage: "reset database to the previous state",
|
Usage: "reset database to the previous state",
|
||||||
UsageText: "neo-go db reset --height height [--config-path path] [-p/-m/-t]",
|
UsageText: "neo-go db reset --height height [--config-path path] [-p/-m/-t] [--config-file file]",
|
||||||
Action: resetDB,
|
Action: resetDB,
|
||||||
Flags: cfgHeightFlags,
|
Flags: cfgHeightFlags,
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,13 +30,25 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetConfigFromContext(t *testing.T) {
|
func TestGetConfigFromContext(t *testing.T) {
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
t.Run("config-path", func(t *testing.T) {
|
||||||
set.String("config-path", "../../config", "")
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.Bool("testnet", true, "")
|
set.String("config-path", "../../config", "")
|
||||||
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
set.Bool("testnet", true, "")
|
||||||
cfg, err := options.GetConfigFromContext(ctx)
|
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
||||||
require.NoError(t, err)
|
cfg, err := options.GetConfigFromContext(ctx)
|
||||||
require.Equal(t, netmode.TestNet, cfg.ProtocolConfiguration.Magic)
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, netmode.TestNet, cfg.ProtocolConfiguration.Magic)
|
||||||
|
})
|
||||||
|
t.Run("config-file", func(t *testing.T) {
|
||||||
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
|
set.String("config-path", "../../config", "")
|
||||||
|
set.Bool("testnet", true, "")
|
||||||
|
set.String("config-file", "../../config/protocol.testnet.yml", "")
|
||||||
|
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
||||||
|
cfg, err := options.GetConfigFromContext(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, netmode.TestNet, cfg.ProtocolConfiguration.Magic)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleLoggingParams(t *testing.T) {
|
func TestHandleLoggingParams(t *testing.T) {
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
// NewCommands returns 'vm' command.
|
// NewCommands returns 'vm' command.
|
||||||
func NewCommands() []cli.Command {
|
func NewCommands() []cli.Command {
|
||||||
cfgFlags := []cli.Flag{options.Config}
|
cfgFlags := []cli.Flag{options.Config, options.ConfigFile}
|
||||||
cfgFlags = append(cfgFlags, options.Network...)
|
cfgFlags = append(cfgFlags, options.Network...)
|
||||||
return []cli.Command{{
|
return []cli.Command{{
|
||||||
Name: "vm",
|
Name: "vm",
|
||||||
|
|
|
@ -35,6 +35,10 @@ If you want to use some non-default configuration directory path, specify
|
||||||
|
|
||||||
The file loaded is chosen automatically depending on network mode flag.
|
The file loaded is chosen automatically depending on network mode flag.
|
||||||
|
|
||||||
|
Or just provide path to the configuration file using `--config-file` flag:
|
||||||
|
|
||||||
|
`./bin/neo-go node --config-file /user/yourConfigPath/yourConfigFile.yml`
|
||||||
|
|
||||||
Refer to the [node configuration documentation](./node-configuration.md) for
|
Refer to the [node configuration documentation](./node-configuration.md) for
|
||||||
detailed configuration file description.
|
detailed configuration file description.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue