Issue #532 -f init
should clean up state
Prompt on init and skip the prompt in init -f (and not have a -y flag) This would be in line with other state subcommands which ask by default and -f skips the prompt. License: MIT Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
This commit is contained in:
parent
d599ef891b
commit
dbc5f97d5e
|
@ -1,7 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
|
@ -67,12 +66,7 @@ func makeConfigs() (*config.Manager, *cfgs) {
|
|||
}
|
||||
}
|
||||
|
||||
func saveConfig(cfg *config.Manager, force bool) {
|
||||
if _, err := os.Stat(configPath); err == nil && !force {
|
||||
err := fmt.Errorf("%s exists. Try running: %s -f init", configPath, programName)
|
||||
checkErr("", err)
|
||||
}
|
||||
|
||||
func saveConfig(cfg *config.Manager) {
|
||||
err := os.MkdirAll(filepath.Dir(configPath), 0700)
|
||||
err = cfg.SaveJSON(configPath)
|
||||
checkErr("saving new configuration", err)
|
||||
|
|
|
@ -206,6 +206,10 @@ configuration.
|
|||
Name: "custom-secret, s",
|
||||
Usage: "prompt for the cluster secret",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "force, f",
|
||||
Usage: "forcefully proceed (without prompting) with overwriting configuration and cleaning up state",
|
||||
},
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
userSecret, userSecretDefined := userProvidedSecret(c.Bool("custom-secret"))
|
||||
|
@ -213,6 +217,31 @@ configuration.
|
|||
cfgMgr, cfgs := makeConfigs()
|
||||
defer cfgMgr.Shutdown() // wait for saves
|
||||
|
||||
var alreadyInitialized bool
|
||||
if _, err := os.Stat(configPath); !os.IsNotExist(err) {
|
||||
alreadyInitialized = true
|
||||
}
|
||||
|
||||
if alreadyInitialized {
|
||||
// acquire lock for config folder
|
||||
err := locker.lock()
|
||||
checkErr("acquiring execution lock", err)
|
||||
defer locker.tryUnlock()
|
||||
|
||||
if !c.Bool("force") {
|
||||
if !yesNoPrompt("The peer's state will be removed from the load path. Existing pins may be lost. Continue? [y/n]:") {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
err = cfgMgr.LoadJSONFromFile(configPath)
|
||||
checkErr("reading configuration", err)
|
||||
|
||||
err = cleanupState(cfgs.consensusCfg)
|
||||
checkErr("Cleaning up consensus data", err)
|
||||
logger.Warningf("the %s folder has been rotated. Starting with an empty state", cfgs.consensusCfg.GetDataFolder())
|
||||
}
|
||||
|
||||
// Generate defaults for all registered components
|
||||
err := cfgMgr.Default()
|
||||
checkErr("generating default configuration", err)
|
||||
|
@ -223,14 +252,7 @@ configuration.
|
|||
}
|
||||
|
||||
// Save
|
||||
saveConfig(cfgMgr, c.GlobalBool("force"))
|
||||
|
||||
// Clean up state
|
||||
if c.GlobalBool("force") && yesNoPrompt("The peer's state will be removed from the load path. Existing pins may be lost. Continue? [y/n]:") {
|
||||
err = cleanupState(cfgs.consensusCfg)
|
||||
checkErr("Cleaning up consensus data", err)
|
||||
logger.Warningf("the %s folder has been rotated. Starting with an empty state", cfgs.consensusCfg.GetDataFolder())
|
||||
}
|
||||
saveConfig(cfgMgr)
|
||||
return nil
|
||||
},
|
||||
},
|
||||
|
|
|
@ -71,7 +71,7 @@ test_cluster_init() {
|
|||
echo "cluster init FAIL: ipfs-cluster-ctl not found"
|
||||
exit 1
|
||||
fi
|
||||
printf "y" | ipfs-cluster-service -f --config "test-config" init >"$IPFS_OUTPUT" 2>&1
|
||||
ipfs-cluster-service -f --config "test-config" init >"$IPFS_OUTPUT" 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "cluster init FAIL: error on ipfs cluster init"
|
||||
exit 1
|
||||
|
|
Loading…
Reference in New Issue
Block a user