forked from TrueCloudLab/frostfs-node
[#1030] adm: Add command morph ape list-targets
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
parent
bd216b79cb
commit
7278201753
3 changed files with 55 additions and 11 deletions
|
@ -82,6 +82,15 @@ var (
|
||||||
},
|
},
|
||||||
Run: getAdmin,
|
Run: getAdmin,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
listTargetsCmd = &cobra.Command{
|
||||||
|
Use: "list-targets",
|
||||||
|
Short: "List targets",
|
||||||
|
PreRun: func(cmd *cobra.Command, _ []string) {
|
||||||
|
_ = viper.BindPFlag(commonflags.EndpointFlag, cmd.Flags().Lookup(commonflags.EndpointFlag))
|
||||||
|
},
|
||||||
|
Run: listTargets,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func initAddRuleChainCmd() {
|
func initAddRuleChainCmd() {
|
||||||
|
@ -146,6 +155,14 @@ func initGetAdminCmd() {
|
||||||
getAdminCmd.Flags().StringP(commonflags.EndpointFlag, commonflags.EndpointFlagShort, "", commonflags.EndpointFlagDesc)
|
getAdminCmd.Flags().StringP(commonflags.EndpointFlag, commonflags.EndpointFlagShort, "", commonflags.EndpointFlagDesc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initListTargetsCmd() {
|
||||||
|
Cmd.AddCommand(listTargetsCmd)
|
||||||
|
|
||||||
|
listTargetsCmd.Flags().StringP(commonflags.EndpointFlag, commonflags.EndpointFlagShort, "", commonflags.EndpointFlagDesc)
|
||||||
|
listTargetsCmd.Flags().StringP(targetTypeFlag, "t", "", targetTypeDesc)
|
||||||
|
_ = listTargetsCmd.MarkFlagRequired(targetTypeFlag)
|
||||||
|
}
|
||||||
|
|
||||||
func addRuleChain(cmd *cobra.Command, _ []string) {
|
func addRuleChain(cmd *cobra.Command, _ []string) {
|
||||||
chain := parseChain(cmd)
|
chain := parseChain(cmd)
|
||||||
target := parseTarget(cmd)
|
target := parseTarget(cmd)
|
||||||
|
@ -215,6 +232,29 @@ func getAdmin(cmd *cobra.Command, _ []string) {
|
||||||
cmd.Println(addr.StringLE())
|
cmd.Println(addr.StringLE())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func listTargets(cmd *cobra.Command, _ []string) {
|
||||||
|
typ, err := parseTargetType(cmd)
|
||||||
|
commonCmd.ExitOnErr(cmd, "parse target type error: %w", err)
|
||||||
|
pci, inv := newPolicyContractReaderInterface(cmd)
|
||||||
|
|
||||||
|
sid, it, err := pci.ListTargetsIterator(typ)
|
||||||
|
commonCmd.ExitOnErr(cmd, "list targets error: %w", err)
|
||||||
|
items, err := inv.TraverseIterator(sid, &it, 0)
|
||||||
|
for err == nil && len(items) != 0 {
|
||||||
|
for _, item := range items {
|
||||||
|
bts, err := item.TryBytes()
|
||||||
|
commonCmd.ExitOnErr(cmd, "list targets error: %w", err)
|
||||||
|
if len(bts) == 0 {
|
||||||
|
cmd.Println("(no name)")
|
||||||
|
} else {
|
||||||
|
cmd.Println(string(bts))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
items, err = inv.TraverseIterator(sid, &it, 0)
|
||||||
|
commonCmd.ExitOnErr(cmd, "unable to list targets: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func prettyJSONFormat(cmd *cobra.Command, chains []*apechain.Chain) {
|
func prettyJSONFormat(cmd *cobra.Command, chains []*apechain.Chain) {
|
||||||
wr := bytes.NewBufferString("")
|
wr := bytes.NewBufferString("")
|
||||||
data, err := json.Marshal(chains)
|
data, err := json.Marshal(chains)
|
||||||
|
|
|
@ -36,24 +36,27 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseTarget(cmd *cobra.Command) policyengine.Target {
|
func parseTarget(cmd *cobra.Command) policyengine.Target {
|
||||||
var targetType policyengine.TargetType
|
|
||||||
typ, _ := cmd.Flags().GetString(targetTypeFlag)
|
|
||||||
switch typ {
|
|
||||||
case namespaceTarget:
|
|
||||||
targetType = policyengine.Namespace
|
|
||||||
case containerTarget:
|
|
||||||
targetType = policyengine.Container
|
|
||||||
default:
|
|
||||||
commonCmd.ExitOnErr(cmd, "read target type error: %w", errUnknownTargetType)
|
|
||||||
}
|
|
||||||
name, _ := cmd.Flags().GetString(targetNameFlag)
|
name, _ := cmd.Flags().GetString(targetNameFlag)
|
||||||
|
typ, err := parseTargetType(cmd)
|
||||||
|
commonCmd.ExitOnErr(cmd, "read target type error: %w", err)
|
||||||
|
|
||||||
return policyengine.Target{
|
return policyengine.Target{
|
||||||
Name: name,
|
Name: name,
|
||||||
Type: targetType,
|
Type: typ,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseTargetType(cmd *cobra.Command) (policyengine.TargetType, error) {
|
||||||
|
typ, _ := cmd.Flags().GetString(targetTypeFlag)
|
||||||
|
switch typ {
|
||||||
|
case namespaceTarget:
|
||||||
|
return policyengine.Namespace, nil
|
||||||
|
case containerTarget:
|
||||||
|
return policyengine.Container, nil
|
||||||
|
}
|
||||||
|
return -1, errUnknownTargetType
|
||||||
|
}
|
||||||
|
|
||||||
func parseChainID(cmd *cobra.Command) apechain.ID {
|
func parseChainID(cmd *cobra.Command) apechain.ID {
|
||||||
chainID, _ := cmd.Flags().GetString(chainIDFlag)
|
chainID, _ := cmd.Flags().GetString(chainIDFlag)
|
||||||
if chainID == "" {
|
if chainID == "" {
|
||||||
|
|
|
@ -13,4 +13,5 @@ func init() {
|
||||||
initListRuleChainsCmd()
|
initListRuleChainsCmd()
|
||||||
initSetAdminCmd()
|
initSetAdminCmd()
|
||||||
initGetAdminCmd()
|
initGetAdminCmd()
|
||||||
|
initListTargetsCmd()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue