blob: 3fc1cd6f6862cc18395b1e2308ffc6b059232e67 [file] [log] [blame]
package commands
import (
"errors"
"fmt"
"github.ibm.com/BlueMix-Fabric/go-whisk/whisk"
"github.com/fatih/color"
"github.com/spf13/cobra"
)
// ruleCmd represents the rule command
var ruleCmd = &cobra.Command{
Use: "rule",
Short: "work with rules",
}
var ruleEnableCmd = &cobra.Command{
Use: "enable <name string>",
Short: "enable rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 1 {
err = errors.New("Invalid argument")
fmt.Println(err)
return
}
ruleName := args[0]
_, _, err = client.Rules.SetState(ruleName, "enable")
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s enabled rule %s\n", color.GreenString("ok:"), boldString(ruleName))
},
}
var ruleDisableCmd = &cobra.Command{
Use: "disable <name string>",
Short: "disable rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 1 {
err = errors.New("Invalid argument")
fmt.Println(err)
return
}
ruleName := args[0]
_, _, err = client.Rules.SetState(ruleName, "disable")
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s disabled rule %s\n", color.GreenString("ok:"), boldString(ruleName))
},
}
var ruleStatusCmd = &cobra.Command{
Use: "status <name string>",
Short: "get rule status",
Run: func(cmd *cobra.Command, args []string) {
// TODO: how is this different than "rule get" ??
fmt.Println("rule status called")
},
}
var ruleCreateCmd = &cobra.Command{
Use: "create <name string> <trigger string> <action string>",
Short: "create new rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 3 {
err = errors.New("Invalid argument list")
fmt.Println(err)
return
}
ruleName := args[0]
triggerName := args[1]
actionName := args[2]
rule := &whisk.Rule{
Name: ruleName,
Trigger: triggerName,
Action: actionName,
Publish: flags.common.shared,
}
rule, _, err = client.Rules.Insert(rule, false)
if err != nil {
fmt.Println(err)
return
}
if flags.rule.enable {
rule, _, err = client.Rules.SetState(ruleName, "enabled")
if err != nil {
fmt.Println(err)
return
}
}
fmt.Printf("%s created rule %s\n", color.GreenString("ok:"), boldString(ruleName))
},
}
var ruleUpdateCmd = &cobra.Command{
Use: "update <name string> <trigger string> <action string>",
Short: "update existing rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 3 {
err = errors.New("Invalid argument list")
fmt.Println(err)
return
}
ruleName := args[0]
triggerName := args[1]
actionName := args[2]
rule := &whisk.Rule{
Name: ruleName,
Trigger: triggerName,
Action: actionName,
Publish: flags.common.shared,
}
rule, _, err = client.Rules.Insert(rule, true)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s updated rule %s\n", color.GreenString("ok:"), boldString(ruleName))
},
}
var ruleGetCmd = &cobra.Command{
Use: "get <name string>",
Short: "get rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 1 {
err = errors.New("Invalid argument")
fmt.Println(err)
return
}
ruleName := args[0]
rule, _, err := client.Rules.Get(ruleName)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s got rule %s\n", color.GreenString("ok:"), boldString(ruleName))
printJSON(rule)
},
}
var ruleDeleteCmd = &cobra.Command{
Use: "delete <name string>",
Short: "delete rule",
Run: func(cmd *cobra.Command, args []string) {
var err error
if len(args) != 1 {
err = errors.New("Invalid argument")
fmt.Println(err)
return
}
ruleName := args[0]
if flags.rule.disable {
_, _, err := client.Rules.SetState(ruleName, "disabled")
if err != nil {
fmt.Println(err)
return
}
}
_, err = client.Rules.Delete(ruleName)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s deleted rule %s\n", color.GreenString("ok:"), boldString(ruleName))
},
}
var ruleListCmd = &cobra.Command{
Use: "list <namespace string>",
Short: "list all rules",
Run: func(cmd *cobra.Command, args []string) {
var err error
qName := qualifiedName{}
if len(args) == 1 {
qName, err = parseQualifiedName(args[0])
if err != nil {
fmt.Printf("error: %s", err)
return
}
ns := qName.namespace
if len(ns) == 0 {
err = errors.New("No valid namespace detected. Make sure that namespace argument is preceded by a \"/\"")
fmt.Printf("error: %s\n", err)
return
}
client.Namespace = ns
if pkg := qName.packageName; len(pkg) > 0 {
// todo :: scope call to package
}
}
ruleListOptions := &whisk.RuleListOptions{
Skip: flags.common.skip,
Limit: flags.common.limit,
}
rules, _, err := client.Rules.List(ruleListOptions)
if err != nil {
fmt.Println(err)
return
}
printList(rules)
},
}
func init() {
ruleCreateCmd.Flags().BoolVar(&flags.common.shared, "shared", false, "shared action (default: private)")
ruleCreateCmd.Flags().BoolVar(&flags.rule.enable, "enable", false, "autmatically enable rule after creating it")
ruleUpdateCmd.Flags().BoolVar(&flags.common.shared, "shared", false, "shared action (default: private)")
ruleDeleteCmd.Flags().BoolVar(&flags.rule.disable, "disable", false, "autmatically disable rule before deleting it")
ruleListCmd.Flags().IntVarP(&flags.common.skip, "skip", "s", 0, "skip this many entities from the head of the collection")
ruleListCmd.Flags().IntVarP(&flags.common.limit, "limit", "l", 30, "only return this many entities from the collection")
ruleCmd.AddCommand(
ruleEnableCmd,
ruleDisableCmd,
ruleStatusCmd,
ruleCreateCmd,
ruleUpdateCmd,
ruleGetCmd,
ruleDeleteCmd,
ruleListCmd,
)
}