forked from TrueCloudLab/frostfs-node
[#144] Support well-known application attributes for container in CLI
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
62bd22a379
commit
83926647d7
2 changed files with 48 additions and 6 deletions
|
@ -39,11 +39,13 @@ const (
|
||||||
var (
|
var (
|
||||||
containerOwner string
|
containerOwner string
|
||||||
|
|
||||||
containerACL string
|
containerACL string
|
||||||
containerNonce string
|
containerNonce string
|
||||||
containerPolicy string
|
containerPolicy string
|
||||||
containerAttributes []string
|
containerAttributes []string
|
||||||
containerAwait bool
|
containerAwait bool
|
||||||
|
containerName string
|
||||||
|
containerNoTimestamp bool
|
||||||
|
|
||||||
containerID string
|
containerID string
|
||||||
|
|
||||||
|
@ -477,6 +479,8 @@ func init() {
|
||||||
"comma separated pairs of container attributes in form of Key1=Value1,Key2=Value2")
|
"comma separated pairs of container attributes in form of Key1=Value1,Key2=Value2")
|
||||||
createContainerCmd.Flags().StringVarP(&containerNonce, "nonce", "n", "", "UUIDv4 nonce value for container")
|
createContainerCmd.Flags().StringVarP(&containerNonce, "nonce", "n", "", "UUIDv4 nonce value for container")
|
||||||
createContainerCmd.Flags().BoolVar(&containerAwait, "await", false, "block execution until container is persisted")
|
createContainerCmd.Flags().BoolVar(&containerAwait, "await", false, "block execution until container is persisted")
|
||||||
|
createContainerCmd.Flags().StringVar(&containerName, "name", "", "container name attribute")
|
||||||
|
createContainerCmd.Flags().BoolVar(&containerNoTimestamp, "disable-timestamp", false, "disable timestamp container attribute")
|
||||||
|
|
||||||
// container delete
|
// container delete
|
||||||
deleteContainerCmd.Flags().StringVar(&containerID, "cid", "", "container ID")
|
deleteContainerCmd.Flags().StringVar(&containerID, "cid", "", "container ID")
|
||||||
|
@ -537,7 +541,7 @@ func parseContainerPolicy(policyString string) (*netmap.PlacementPolicy, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseAttributes(attributes []string) ([]*v2container.Attribute, error) {
|
func parseAttributes(attributes []string) ([]*v2container.Attribute, error) {
|
||||||
result := make([]*v2container.Attribute, 0, len(attributes))
|
result := make([]*v2container.Attribute, 0, len(attributes)+2) // name + timestamp attributes
|
||||||
|
|
||||||
for i := range attributes {
|
for i := range attributes {
|
||||||
kvPair := strings.Split(attributes[i], attributeDelimiter)
|
kvPair := strings.Split(attributes[i], attributeDelimiter)
|
||||||
|
@ -552,6 +556,22 @@ func parseAttributes(attributes []string) ([]*v2container.Attribute, error) {
|
||||||
result = append(result, parsedAttribute)
|
result = append(result, parsedAttribute)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !containerNoTimestamp {
|
||||||
|
timestamp := new(v2container.Attribute)
|
||||||
|
timestamp.SetKey(container.AttributeTimestamp)
|
||||||
|
timestamp.SetValue(strconv.FormatInt(time.Now().Unix(), 10))
|
||||||
|
|
||||||
|
result = append(result, timestamp)
|
||||||
|
}
|
||||||
|
|
||||||
|
if containerName != "" {
|
||||||
|
cnrName := new(v2container.Attribute)
|
||||||
|
cnrName.SetKey(container.AttributeName)
|
||||||
|
cnrName.SetValue(containerName)
|
||||||
|
|
||||||
|
result = append(result, cnrName)
|
||||||
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,6 +666,15 @@ func prettyPrintContainer(cnr *container.Container, jsonEncoding bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, attribute := range cnr.GetAttributes() {
|
for _, attribute := range cnr.GetAttributes() {
|
||||||
|
if attribute.GetKey() == container.AttributeTimestamp {
|
||||||
|
fmt.Printf("attribute: %s=%s (%s)\n",
|
||||||
|
attribute.GetKey(),
|
||||||
|
attribute.GetValue(),
|
||||||
|
prettyPrintUnixTime(attribute.GetValue()))
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Printf("attribute: %s=%s\n", attribute.GetKey(), attribute.GetValue())
|
fmt.Printf("attribute: %s=%s\n", attribute.GetKey(), attribute.GetValue())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg"
|
"github.com/nspcc-dev/neofs-api-go/pkg"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/token"
|
"github.com/nspcc-dev/neofs-api-go/pkg/token"
|
||||||
|
@ -178,3 +180,14 @@ func prettyPrintJSON(cmd *cobra.Command, data []byte) {
|
||||||
|
|
||||||
cmd.Println(buf)
|
cmd.Println(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func prettyPrintUnixTime(s string) string {
|
||||||
|
unixTime, err := strconv.ParseInt(s, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return "malformed"
|
||||||
|
}
|
||||||
|
|
||||||
|
timestamp := time.Unix(unixTime, 0)
|
||||||
|
|
||||||
|
return timestamp.String()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue