[#1332] cli/playground: Add help
All checks were successful
Pre-commit hooks / Pre-commit (push) Successful in 1m24s
Vulncheck / Vulncheck (push) Successful in 1m15s
Build / Build Components (push) Successful in 2m18s
Tests and linters / Run gofumpt (push) Successful in 4m8s
Tests and linters / gopls check (push) Successful in 4m15s
Tests and linters / Lint (push) Successful in 4m39s
Tests and linters / Staticcheck (push) Successful in 4m39s
OCI image / Build container images (push) Successful in 5m7s
Tests and linters / Tests (push) Successful in 4m54s
Tests and linters / Tests with -race (push) Successful in 6m7s
All checks were successful
Pre-commit hooks / Pre-commit (push) Successful in 1m24s
Vulncheck / Vulncheck (push) Successful in 1m15s
Build / Build Components (push) Successful in 2m18s
Tests and linters / Run gofumpt (push) Successful in 4m8s
Tests and linters / gopls check (push) Successful in 4m15s
Tests and linters / Lint (push) Successful in 4m39s
Tests and linters / Staticcheck (push) Successful in 4m39s
OCI image / Build container images (push) Successful in 5m7s
Tests and linters / Tests (push) Successful in 4m54s
Tests and linters / Tests with -race (push) Successful in 6m7s
Change-Id: I6160cfddf427b161619e4b96ceec8396b75c4d08 Signed-off-by: Alexander Chuprov <a.chuprov@yadro.com>
This commit is contained in:
parent
17cba3387e
commit
46fd5e17b2
1 changed files with 109 additions and 10 deletions
|
@ -5,7 +5,9 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"maps"
|
||||
"os"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
|
@ -154,6 +156,23 @@ func (repl *policyPlaygroundREPL) handleEval(args []string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (repl *policyPlaygroundREPL) handleHelp(args []string) error {
|
||||
if len(args) != 0 {
|
||||
if _, ok := commands[args[0]]; !ok {
|
||||
return fmt.Errorf("unknown command: %q", args[0])
|
||||
}
|
||||
fmt.Fprintln(repl.console, commands[args[0]].usage)
|
||||
return nil
|
||||
}
|
||||
|
||||
commandList := slices.Collect(maps.Keys(commands))
|
||||
slices.Sort(commandList)
|
||||
for _, command := range commandList {
|
||||
fmt.Fprintf(repl.console, "%s: %s\n", command, commands[command].descriprion)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repl *policyPlaygroundREPL) netMap() netmap.NetMap {
|
||||
var nm netmap.NetMap
|
||||
var nodes []netmap.NodeInfo
|
||||
|
@ -164,15 +183,82 @@ func (repl *policyPlaygroundREPL) netMap() netmap.NetMap {
|
|||
return nm
|
||||
}
|
||||
|
||||
var policyPlaygroundCompleter = readline.NewPrefixCompleter(
|
||||
readline.PcItem("list"),
|
||||
readline.PcItem("ls"),
|
||||
readline.PcItem("add"),
|
||||
readline.PcItem("load"),
|
||||
readline.PcItem("remove"),
|
||||
readline.PcItem("rm"),
|
||||
readline.PcItem("eval"),
|
||||
)
|
||||
type commandDescription struct {
|
||||
descriprion string
|
||||
usage string
|
||||
}
|
||||
|
||||
var commands = map[string]commandDescription{
|
||||
"list": {
|
||||
descriprion: "Display all nodes in the netmap",
|
||||
usage: `Display all nodes in the netmap
|
||||
Example of usage:
|
||||
list
|
||||
1: id=03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae attrs={Continent:"Europe" Country:"Poland"}
|
||||
2: id=02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3 attrs={Continent:"Antarctica" Country:"Heard Island"}
|
||||
`,
|
||||
},
|
||||
|
||||
"ls": {
|
||||
descriprion: "Display all nodes in the netmap",
|
||||
usage: `Display all nodes in the netmap
|
||||
Example of usage:
|
||||
ls
|
||||
1: id=03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae attrs={Continent:"Europe" Country:"Poland"}
|
||||
2: id=02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3 attrs={Continent:"Antarctica" Country:"Heard Island"}
|
||||
`,
|
||||
},
|
||||
|
||||
"add": {
|
||||
descriprion: "Add a new node: add <node-hash> attr=value",
|
||||
usage: `Add a new node
|
||||
Example of usage:
|
||||
add 03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae continent:Europe country:Poland`,
|
||||
},
|
||||
|
||||
"load": {
|
||||
descriprion: "Load netmap from file: load <path>",
|
||||
usage: `Load netmap from file
|
||||
Example of usage:
|
||||
load "netmap.json"
|
||||
File format (netmap.json):
|
||||
{
|
||||
"03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae": {
|
||||
"continent": "Europe",
|
||||
"country": "Poland"
|
||||
},
|
||||
"02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3": {
|
||||
"continent": "Antarctica",
|
||||
"country": "Heard Island"
|
||||
}
|
||||
}`,
|
||||
},
|
||||
|
||||
"remove": {
|
||||
descriprion: "Remove a node: remove <node-hash>",
|
||||
usage: `Remove a node
|
||||
Example of usage:
|
||||
remove 03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae`,
|
||||
},
|
||||
|
||||
"rm": {
|
||||
descriprion: "Remove a node: rm <node-hash>",
|
||||
usage: `Remove a node
|
||||
Example of usage:
|
||||
rm 03ff65b6ae79134a4dce9d0d39d3851e9bab4ee97abf86e81e1c5bbc50cd2826ae`,
|
||||
},
|
||||
|
||||
"eval": {
|
||||
descriprion: "Evaluate a policy: eval <policy>",
|
||||
usage: `Evaluate a policy
|
||||
Example of usage:
|
||||
eval REP 2`,
|
||||
},
|
||||
|
||||
"help": {
|
||||
descriprion: "Show available commands",
|
||||
},
|
||||
}
|
||||
|
||||
func (repl *policyPlaygroundREPL) run() error {
|
||||
if len(viper.GetString(commonflags.RPC)) > 0 {
|
||||
|
@ -199,12 +285,25 @@ func (repl *policyPlaygroundREPL) run() error {
|
|||
"remove": repl.handleRemove,
|
||||
"rm": repl.handleRemove,
|
||||
"eval": repl.handleEval,
|
||||
"help": repl.handleHelp,
|
||||
}
|
||||
|
||||
var cfgCompleter []readline.PrefixCompleterInterface
|
||||
var helpSubItems []readline.PrefixCompleterInterface
|
||||
|
||||
for name := range commands {
|
||||
if name != "help" {
|
||||
cfgCompleter = append(cfgCompleter, readline.PcItem(name))
|
||||
helpSubItems = append(helpSubItems, readline.PcItem(name))
|
||||
}
|
||||
}
|
||||
|
||||
cfgCompleter = append(cfgCompleter, readline.PcItem("help", helpSubItems...))
|
||||
completer := readline.NewPrefixCompleter(cfgCompleter...)
|
||||
rl, err := readline.NewEx(&readline.Config{
|
||||
Prompt: "> ",
|
||||
InterruptPrompt: "^C",
|
||||
AutoComplete: policyPlaygroundCompleter,
|
||||
AutoComplete: completer,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing readline: %w", err)
|
||||
|
|
Loading…
Add table
Reference in a new issue