diff --git a/cmd/frostfs-adm/internal/modules/storagecfg/root.go b/cmd/frostfs-adm/internal/modules/storagecfg/root.go index d08eb6cc..90edf7d7 100644 --- a/cmd/frostfs-adm/internal/modules/storagecfg/root.go +++ b/cmd/frostfs-adm/internal/modules/storagecfg/root.go @@ -79,17 +79,8 @@ type config struct { MetabasePath string } -// nolint: funlen func storageConfig(cmd *cobra.Command, args []string) { - var outPath string - if len(args) != 0 { - outPath = args[0] - } else { - outPath = getPath("File to write config at [./config.yml]: ") - if outPath == "" { - outPath = "./config.yml" - } - } + outPath := getOutputPath(args) historyPath := filepath.Join(os.TempDir(), "frostfs-adm.history") readline.SetHistoryPath(historyPath) @@ -104,14 +95,7 @@ func storageConfig(cmd *cobra.Command, args []string) { w, err := wallet.NewWalletFromFile(c.Wallet.Path) fatalOnErr(err) - c.Wallet.Account, _ = cmd.Flags().GetString(accountFlag) - if c.Wallet.Account == "" { - addr := address.Uint160ToString(w.GetChangeAddress()) - c.Wallet.Account = getWalletAccount(w, fmt.Sprintf("Wallet account [%s]: ", addr)) - if c.Wallet.Account == "" { - c.Wallet.Account = addr - } - } + fillWalletAccount(cmd, &c, w) accH, err := flags.ParseAddress(c.Wallet.Account) fatalOnErr(err) @@ -129,25 +113,44 @@ func storageConfig(cmd *cobra.Command, args []string) { c.AuthorizedKeys = append(c.AuthorizedKeys, hex.EncodeToString(acc.PrivateKey().PublicKey().Bytes())) - var network string - for { - network = getString("Choose network [mainnet]/testnet: ") - switch network { - case "": - network = "mainnet" - case "testnet", "mainnet": - default: - cmd.Println(`Network must be either "mainnet" or "testnet"`) - continue - } - break - } + network := readNetwork(cmd) c.MorphRPC = n3config[network].MorphRPC depositGas(cmd, acc, network) c.Attribute.Locode = getString("UN-LOCODE attribute in [XX YYY] format: ") + + endpoint := getDefaultEndpoint(cmd, &c) + c.Endpoint = getString(fmt.Sprintf("Listening address [%s]: ", endpoint)) + if c.Endpoint == "" { + c.Endpoint = endpoint + } + + c.ControlEndpoint = getString(fmt.Sprintf("Listening address (control endpoint) [%s]: ", defaultControlEndpoint)) + if c.ControlEndpoint == "" { + c.ControlEndpoint = defaultControlEndpoint + } + + c.TLSCert = getPath("TLS Certificate (optional): ") + if c.TLSCert != "" { + c.TLSKey = getPath("TLS Key: ") + } + + c.Relay = getConfirmation(false, "Use node as a relay? yes/[no]: ") + if !c.Relay { + p := getPath("Path to the storage directory (all available storage will be used): ") + c.BlobstorPath = filepath.Join(p, "blob") + c.MetabasePath = filepath.Join(p, "meta") + } + + out := applyTemplate(c) + fatalOnErr(os.WriteFile(outPath, out, 0644)) + + cmd.Println("Node is ready for work! Run `frostfs-node -config " + outPath + "`") +} + +func getDefaultEndpoint(cmd *cobra.Command, c *config) string { var addr, port string for { c.AnnouncedAddress = getString("Publicly announced address: ") @@ -183,34 +186,46 @@ func storageConfig(cmd *cobra.Command, args []string) { break } + return net.JoinHostPort(defaultDataEndpoint, port) +} - defaultAddr := net.JoinHostPort(defaultDataEndpoint, port) - c.Endpoint = getString(fmt.Sprintf("Listening address [%s]: ", defaultAddr)) - if c.Endpoint == "" { - c.Endpoint = defaultAddr +func fillWalletAccount(cmd *cobra.Command, c *config, w *wallet.Wallet) { + c.Wallet.Account, _ = cmd.Flags().GetString(accountFlag) + if c.Wallet.Account == "" { + addr := address.Uint160ToString(w.GetChangeAddress()) + c.Wallet.Account = getWalletAccount(w, fmt.Sprintf("Wallet account [%s]: ", addr)) + if c.Wallet.Account == "" { + c.Wallet.Account = addr + } } +} - c.ControlEndpoint = getString(fmt.Sprintf("Listening address (control endpoint) [%s]: ", defaultControlEndpoint)) - if c.ControlEndpoint == "" { - c.ControlEndpoint = defaultControlEndpoint +func readNetwork(cmd *cobra.Command) string { + var network string + for { + network = getString("Choose network [mainnet]/testnet: ") + switch network { + case "": + network = "mainnet" + case "testnet", "mainnet": + default: + cmd.Println(`Network must be either "mainnet" or "testnet"`) + continue + } + break } + return network +} - c.TLSCert = getPath("TLS Certificate (optional): ") - if c.TLSCert != "" { - c.TLSKey = getPath("TLS Key: ") +func getOutputPath(args []string) string { + if len(args) != 0 { + return args[0] } - - c.Relay = getConfirmation(false, "Use node as a relay? yes/[no]: ") - if !c.Relay { - p := getPath("Path to the storage directory (all available storage will be used): ") - c.BlobstorPath = filepath.Join(p, "blob") - c.MetabasePath = filepath.Join(p, "meta") + outPath := getPath("File to write config at [./config.yml]: ") + if outPath == "" { + outPath = "./config.yml" } - - out := applyTemplate(c) - fatalOnErr(os.WriteFile(outPath, out, 0644)) - - cmd.Println("Node is ready for work! Run `frostfs-node -config " + outPath + "`") + return outPath } func getWalletAccount(w *wallet.Wallet, prompt string) string {