Skip to content

Commit

Permalink
CLI: support domain data operation for xdc (#930)
Browse files Browse the repository at this point in the history
* CLI: implement domain data for domain operations

* fix err msg

* reset version
  • Loading branch information
longquanzheng authored Jul 6, 2018
1 parent 5ab74ef commit c52d560
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 5 deletions.
37 changes: 33 additions & 4 deletions tools/cli/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ const (
FlagActiveClusterNameWithAlias = FlagActiveClusterName + ", ac"
FlagClusters = "clusters"
FlagClustersWithAlias = FlagClusters + ", cl"
FlagDomainData = "domain_data"
FlagDomainDataWithAlias = FlagDomainData + ", dmd"
)

const (
Expand Down Expand Up @@ -191,6 +193,22 @@ func RegisterDomain(c *cli.Context) {
return
}
}

domainData := map[string]string{}
if len(requiredDomainDataKeys) > 0 {
domainDataStr := getRequiredOption(c, FlagDomainData)
domainData, err = parseDomainDataKVs(domainDataStr)
if err != nil {
fmt.Printf("Register Domain failed: %v.\n", err.Error())
return
}
err = checkRequiredDomainDataKVs(domainData)
if err != nil {
fmt.Printf("Register Domain failed: %v.\n", err.Error())
return
}
}

var activeClusterName string
if c.IsSet(FlagActiveClusterName) {
activeClusterName = c.String(FlagActiveClusterName)
Expand All @@ -209,9 +227,10 @@ func RegisterDomain(c *cli.Context) {
}

request := &s.RegisterDomainRequest{
Name: common.StringPtr(domain),
Description: common.StringPtr(description),
OwnerEmail: common.StringPtr(ownerEmail),
Name: common.StringPtr(domain),
Description: common.StringPtr(description),
OwnerEmail: common.StringPtr(ownerEmail),
Data: domainData,
WorkflowExecutionRetentionPeriodInDays: common.Int32Ptr(int32(retentionDays)),
EmitMetric: common.BoolPtr(emitMetric),
Clusters: clusters,
Expand Down Expand Up @@ -274,6 +293,14 @@ func UpdateDomain(c *cli.Context) {
if c.IsSet(FlagOwnerEmail) {
ownerEmail = c.String(FlagOwnerEmail)
}
domainData := map[string]string{}
if c.IsSet(FlagDomainData) {
domainDataStr := c.String(FlagDomainData)
domainData, err = parseDomainDataKVs(domainDataStr)
if err != nil {
ErrorAndExit("Update Domain failed", err)
}
}
if c.IsSet(FlagRetentionDays) {
retentionDays = int32(c.Int(FlagRetentionDays))
}
Expand All @@ -298,6 +325,7 @@ func UpdateDomain(c *cli.Context) {
updateInfo := &s.UpdateDomainInfo{
Description: common.StringPtr(description),
OwnerEmail: common.StringPtr(ownerEmail),
Data: domainData,
}
updateConfig := &s.DomainConfiguration{
WorkflowExecutionRetentionPeriodInDays: common.Int32Ptr(int32(retentionDays)),
Expand Down Expand Up @@ -341,11 +369,12 @@ func DescribeDomain(c *cli.Context) {
fmt.Printf("Domain %s does not exist.\n", domain)
}
} else {
fmt.Printf("Name: %v\nDescription: %v\nOwnerEmail: %v\nStatus: %v\nRetentionInDays: %v\n"+
fmt.Printf("Name: %v\nDescription: %v\nOwnerEmail: %v\nDomainData: %v\nStatus: %v\nRetentionInDays: %v\n"+
"EmitMetrics: %v\nActiveClusterName: %v\nClusters: %v\n",
resp.DomainInfo.GetName(),
resp.DomainInfo.GetDescription(),
resp.DomainInfo.GetOwnerEmail(),
resp.DomainInfo.Data,
resp.DomainInfo.GetStatus(),
resp.Configuration.GetWorkflowExecutionRetentionPeriodInDays(),
resp.Configuration.GetEmitMetric(),
Expand Down
50 changes: 49 additions & 1 deletion tools/cli/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,47 @@

package cli

import "github.com/urfave/cli"
import (
"fmt"
"strings"

"github.com/urfave/cli"
)

// by default we don't require any domain data. But this can be overridden by calling SetRequiredDomainDataKeys()
var requiredDomainDataKeys = []string{}

// SetRequiredDomainDataKeys will set requiredDomainDataKeys
func SetRequiredDomainDataKeys(keys []string) {
requiredDomainDataKeys = keys
}

func checkRequiredDomainDataKVs(domainData map[string]string) error {
//check requiredDomainDataKeys
for _, k := range requiredDomainDataKeys {
_, ok := domainData[k]
if !ok {
return fmt.Errorf("domain data error, missing required key %v . All required keys: %v", k, requiredDomainDataKeys)
}
}
return nil
}

func parseDomainDataKVs(domainDataStr string) (map[string]string, error) {
kvstrs := strings.Split(domainDataStr, ",")
kvMap := map[string]string{}
for _, kvstr := range kvstrs {
kv := strings.Split(kvstr, ":")
if len(kv) != 2 {
return kvMap, fmt.Errorf("domain data format error. It must be k1:v2,k2:v2,...,kn:vn")
}
k := strings.TrimSpace(kv[0])
v := strings.TrimSpace(kv[1])
kvMap[k] = v
}

return kvMap, nil
}

func newDomainCommands() []cli.Command {
return []cli.Command{
Expand Down Expand Up @@ -53,6 +93,10 @@ func newDomainCommands() []cli.Command {
Name: FlagClustersWithAlias,
Usage: "Clusters",
},
cli.StringFlag{
Name: FlagDomainDataWithAlias,
Usage: "Domain data of key value pairs, in format of k1:v1,k2:v2,k3:v3 ",
},
},
Action: func(c *cli.Context) {
RegisterDomain(c)
Expand Down Expand Up @@ -87,6 +131,10 @@ func newDomainCommands() []cli.Command {
Name: FlagClustersWithAlias,
Usage: "Clusters",
},
cli.StringFlag{
Name: FlagDomainDataWithAlias,
Usage: "Domain data of key value pairs, in format of k1:v1,k2:v2,k3:v3 ",
},
},
Action: func(c *cli.Context) {
UpdateDomain(c)
Expand Down

0 comments on commit c52d560

Please sign in to comment.