func TestParseOptions(t *testing.T) { var opts map[string]string opts = stdcli.ParseOpts([]string{"--foo", "bar", "--key", "value"}) assert.Equal(t, "bar", opts["foo"]) assert.Equal(t, "value", opts["key"]) opts = stdcli.ParseOpts([]string{"--foo=bar", "--key", "value"}) assert.Equal(t, "bar", opts["foo"]) assert.Equal(t, "value", opts["key"]) opts = stdcli.ParseOpts([]string{"--foo=this", "is", "a bad idea"}) assert.Equal(t, "this is a bad idea", opts["foo"]) opts = stdcli.ParseOpts([]string{"--this", "--is=even", "worse"}) assert.Equal(t, "even worse", opts["is"]) _, ok := opts["this"] assert.Equal(t, true, ok) }
func cmdServiceCreate(c *cli.Context) { // ensure type included if !(len(c.Args()) > 0) { stdcli.Usage(c, "create") return } // ensure everything after type is a flag if len(c.Args()) > 1 && !strings.HasPrefix(c.Args()[1], "--") { stdcli.Usage(c, "create") return } t := c.Args()[0] if t == "help" { stdcli.Usage(c, "create") return } options := stdcli.ParseOpts(c.Args()[1:]) for key, value := range options { if value == "" { options[key] = "true" } } var optionsList []string for key, val := range options { optionsList = append(optionsList, fmt.Sprintf("%s=%q", key, val)) } if options["name"] == "" { options["name"] = fmt.Sprintf("%s-%d", t, (rand.Intn(8999) + 1000)) } fmt.Printf("Creating %s (%s", options["name"], t) if len(optionsList) > 0 { fmt.Printf(": %s", strings.Join(optionsList, " ")) } fmt.Printf(")... ") _, err := rackClient(c).CreateService(t, options) if err != nil { stdcli.Error(err) return } fmt.Println("CREATING") }
func cmdServiceUpdate(c *cli.Context) { // ensure name included if !(len(c.Args()) > 0) { stdcli.Usage(c, "update") return } name := c.Args()[0] // ensure everything after type is a flag if len(c.Args()) > 1 && !strings.HasPrefix(c.Args()[1], "--") { stdcli.Usage(c, "update") return } options := stdcli.ParseOpts(c.Args()[1:]) for key, value := range options { if value == "" { options[key] = "true" } } var optionsList []string for key, val := range options { optionsList = append(optionsList, fmt.Sprintf("%s=%q", key, val)) } if len(optionsList) == 0 { stdcli.Usage(c, "update") return } fmt.Printf("Updating %s (%s)...", name, strings.Join(optionsList, " ")) _, err := rackClient(c).UpdateService(name, options) if err != nil { stdcli.Error(err) return } fmt.Println("UPDATING") }
func cmdServiceCreate(c *cli.Context) error { // ensure type included if !(len(c.Args()) > 0) { stdcli.Usage(c, "create") return nil } // ensure everything after type is a flag if len(c.Args()) > 1 && !strings.HasPrefix(c.Args()[1], "--") { stdcli.Usage(c, "create") return nil } t := c.Args()[0] if t == "help" || t == "--help" || t == "-h" { stdcli.Usage(c, "create") return nil } options := stdcli.ParseOpts(c.Args()[1:]) for key, value := range options { if value == "" { options[key] = "true" } } var optionsList []string for key, val := range options { optionsList = append(optionsList, fmt.Sprintf("%s=%q", key, val)) } if options["name"] == "" { options["name"] = fmt.Sprintf("%s-%d", t, (rand.Intn(8999) + 1000)) } // special cases switch { case t == "postgres" && options["version"] != "": parts := strings.Split(options["version"], ".") if len(parts) < 3 { return stdcli.Error(fmt.Errorf("invalid version: %s", options["version"])) } options["family"] = fmt.Sprintf("postgres%s.%s", parts[0], parts[1]) } fmt.Printf("Creating %s (%s", options["name"], t) if len(optionsList) > 0 { sort.Strings(optionsList) fmt.Printf(": %s", strings.Join(optionsList, " ")) } fmt.Printf(")... ") _, err := rackClient(c).CreateService(t, options) if err != nil { return stdcli.Error(err) } fmt.Println("CREATING") return nil }