Skip to content

Commit

Permalink
Add role name filter & uppercase strings in slices
Browse files Browse the repository at this point in the history
  • Loading branch information
oleewere committed May 9, 2019
1 parent b13ed38 commit 9032947
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 8 deletions.
10 changes: 8 additions & 2 deletions cm/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,16 @@ func (c CMServer) RunServiceOperation(cluster string, service string, command st
}

// RunRolesOperation run operation on a list of roles for a specific service
func (c CMServer) RunRolesOperation(cluster string, service string, roleNames []string, command string, verbose bool) []byte {
func (c CMServer) RunRolesOperation(cluster string, service string, roleNames []string, roleNameFilter string, command string, verbose bool) []byte {
var response []byte
var uri = fmt.Sprintf("clusters/%v/services/%s/roleCommands/%v", cluster, service, command)
postBody := fmt.Sprintf("{\"items\": [%v]}", strings.Join(AddQutes(roleNames), ","))
var joinedRoleNames string
if len(roleNameFilter) > 0 {
joinedRoleNames = roleNameFilter
} else {
joinedRoleNames = strings.Join(AddQuots(roleNames), ",")
}
postBody := fmt.Sprintf("{\"items\": [%v]}", joinedRoleNames)
if c.UseGateway {
curlCommand := c.CreateGatewayCurlPostCommand(uri, postBody)
response = []byte(c.RunGatewayCMCommand(curlCommand, verbose, true).StdOut)
Expand Down
13 changes: 12 additions & 1 deletion cm/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cm
import (
"fmt"
"os"
"strings"
)

// SliceContains check that a string slice contains an element or not
Expand Down Expand Up @@ -39,10 +40,20 @@ func Exists(name string) bool {
return true
}

func AddQutes(slice []string) []string {
// AddQuots add quotation for every strings in a list
func AddQuots(slice []string) []string {
newSlice := make([]string, 0)
for _, str := range slice {
newSlice = append(newSlice, "\""+str+"\"")
}
return newSlice
}

// UpperAllInSlice uppercase all string in a list
func UpperAllInSlice(slice []string) []string {
newSlice := make([]string, 0)
for _, str := range slice {
newSlice = append(newSlice, strings.ToUpper(str))
}
return newSlice
}
14 changes: 9 additions & 5 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,7 @@ func main() {
os.Exit(1)
}
filter := cm.CreateFilter(clustersFilter, serviceFilter, rolesFilter, "", false)
filter.Roles = cm.UpperAllInSlice(filter.Roles)
if len(filter.Services) > 1 {
fmt.Println("Only 1 service can be selected as a filter!")
os.Exit(1)
Expand All @@ -685,9 +686,10 @@ func main() {
}
}
}

if len(roleNames) > 0 {
cmServer.RunRolesOperation(clustersFilter, serviceFilter, roleNames, command, true)
roleNameFilter := c.String("name")
if len(roleNames) > 0 || len(roleNameFilter) > 0 {
roleNameFilter := c.String("name")
cmServer.RunRolesOperation(clustersFilter, serviceFilter, roleNames, roleNameFilter, command, true)
} else {
fmt.Println("No roles are selected! (out filtered ?)")
os.Exit(1)
Expand All @@ -699,7 +701,8 @@ func main() {
cli.StringFlag{Name: "command, c", Usage: "Command: start/stop/restart"},
cli.StringFlag{Name: "clusters", Usage: "Clusters filter (comma separated)"},
cli.StringFlag{Name: "service, s", Usage: "Services filter"},
cli.StringFlag{Name: "roles, r", Usage: "Roles filter (comma separated)"},
cli.StringFlag{Name: "roles, r", Usage: "Role type filter (comma separated)"},
cli.StringFlag{Name: "name, n", Usage: "Role name filter"},
},
},
},
Expand Down Expand Up @@ -860,6 +863,7 @@ func main() {
os.Exit(1)
}
filter := cm.CreateFilter(c.String("clusters"), c.String("services"), c.String("roles"), c.String("hosts"), c.Bool("server"))
filter.Roles = cm.UpperAllInSlice(filter.Roles)
hosts := cmServer.GetFilteredHosts(filter)
cmServer.RunRemoteHostCommand(command, hosts, filter.Server)
return nil
Expand All @@ -869,7 +873,7 @@ func main() {
cli.BoolFlag{Name: "server", Usage: "Filter on CM server"},
cli.StringFlag{Name: "clusters", Usage: "Filter on clusters (comma separated)"},
cli.StringFlag{Name: "services", Usage: "Filter on services (comma separated)"},
cli.StringFlag{Name: "roles", Usage: "Filter on roles (comma separated)"},
cli.StringFlag{Name: "roles", Usage: "Filter on role types (comma separated)"},
cli.StringFlag{Name: "hosts", Usage: "Filter on hosts (comma separated)"},
},
}
Expand Down

0 comments on commit 9032947

Please sign in to comment.