func (c *moveContainerCmd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() url, err := cmd.GetURL(fmt.Sprintf("/docker/container/%s/move", context.Args[0])) if err != nil { return err } params := map[string]string{ "to": context.Args[1], } b, err := json.Marshal(params) if err != nil { return err } buffer := bytes.NewBuffer(b) request, err := http.NewRequest("POST", url, buffer) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *rebalanceContainersCmd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() if !c.dry && !c.Confirm(context, "Are you sure you want to rebalance containers?") { return nil } url, err := cmd.GetURL("/docker/containers/rebalance") if err != nil { return err } params := map[string]interface{}{ "dry": fmt.Sprintf("%t", c.dry), } if len(c.metadataFilter) > 0 { params["metadataFilter"] = c.metadataFilter } if len(c.appFilter) > 0 { params["appFilter"] = c.appFilter } b, err := json.Marshal(params) if err != nil { return err } buffer := bytes.NewBuffer(b) request, err := http.NewRequest("POST", url, buffer) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func removeServiceInstanceWithUnbind(ctx *cmd.Context, client *cmd.Client) error { serviceName := ctx.Args[0] instanceName := ctx.Args[1] url := fmt.Sprintf("/services/%s/instances/%s?unbindall=%s", serviceName, instanceName, "true") url, err := cmd.GetURL(url) if err != nil { return err } request, err := http.NewRequest("DELETE", url, nil) if err != nil { return err } resp, err := client.Do(request) defer resp.Body.Close() if err != nil { return err } err = cmd.StreamJSONResponse(ctx.Stdout, resp) if err != nil { return err } fmt.Fprintf(ctx.Stdout, `Service "%s" successfully removed!`+"\n", instanceName) return nil }
func (a *addNodeToSchedulerCmd) Run(ctx *cmd.Context, client *cmd.Client) error { jsonParams := map[string]string{} for _, param := range ctx.Args { if strings.Contains(param, "=") { keyValue := strings.SplitN(param, "=", 2) jsonParams[keyValue[0]] = keyValue[1] } } b, err := json.Marshal(jsonParams) if err != nil { return err } url, err := cmd.GetURL(fmt.Sprintf("/docker/node?register=%t", a.register)) if err != nil { return err } req, err := http.NewRequest("POST", url, bytes.NewBuffer(b)) if err != nil { return err } resp, err := client.Do(req) if err != nil { return err } err = cmd.StreamJSONResponse(ctx.Stdout, resp) if err != nil { return err } ctx.Stdout.Write([]byte("Node successfully registered.\n")) return nil }
func (p *platformUpdate) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() name := context.Args[0] if p.disable && p.enable { return errors.New("Conflicting options: --enable and --disable\n") } if !p.disable && !p.enable && p.dockerfile == "" { return errors.New("Flag is required") } disable := "" if p.enable { disable = "false" } if p.disable { disable = "true" } body := fmt.Sprintf("a=1&dockerfile=%s", p.dockerfile) url, err := cmd.GetURL(fmt.Sprintf("/platforms/%s?disabled=%s", name, disable)) request, err := http.NewRequest("PUT", url, strings.NewReader(body)) if err != nil { return err } request.Header.Add("Content-Type", "application/x-www-form-urlencoded") response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *rebalanceContainersCmd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() if !c.dry && !c.Confirm(context, "Are you sure you want to rebalance containers?") { return nil } u, err := cmd.GetURL("/docker/containers/rebalance") if err != nil { return err } opts := rebalanceOptions{ Dry: c.dry, } if len(c.metadataFilter) > 0 { opts.MetadataFilter = c.metadataFilter } if len(c.appFilter) > 0 { opts.AppFilter = c.appFilter } v, err := form.EncodeToValues(&opts) if err != nil { return err } request, err := http.NewRequest("POST", u, bytes.NewBufferString(v.Encode())) if err != nil { return err } request.Header.Set("Content-Type", "application/x-www-form-urlencoded") response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *appPlanChange) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName, err := c.Guess() if err != nil { return err } plan := tsuruapp.Plan{Name: context.Args[0]} question := fmt.Sprintf("Are you sure you want to change the plan of the application %q to %q?", appName, plan.Name) if !c.Confirm(context, question) { return nil } url, err := cmd.GetURL(fmt.Sprintf("/apps/%s/plan", appName)) if err != nil { return err } b, err := json.Marshal(plan) if err != nil { return err } request, err := http.NewRequest("POST", url, bytes.NewReader(b)) if err != nil { return err } response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *unitAdd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName, err := c.Guess() if err != nil { return err } u, err := cmd.GetURL(fmt.Sprintf("/apps/%s/units", appName)) if err != nil { return err } val := url.Values{} val.Add("units", context.Args[0]) val.Add("process", c.process) request, err := http.NewRequest("PUT", u, bytes.NewBufferString(val.Encode())) if err != nil { return err } request.Header.Add("Content-Type", "application/x-www-form-urlencoded") response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *dockerLogUpdate) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() if c.restart { extra := "" if c.pool != "" { extra = fmt.Sprintf(" running on pool %s", c.pool) } msg := fmt.Sprintf("Are you sure you want to restart all apps%s?", extra) if !c.Confirm(context, msg) { return nil } } url, err := cmd.GetURL("/docker/logs") if err != nil { return err } envList := []provision.Entry{ {Name: "log-driver", Value: c.logDriver}, } for name, value := range c.logOpts { envList = append(envList, provision.Entry{Name: name, Value: value}) } conf := provision.ScopedConfig{} if c.pool == "" { conf.Envs = envList } else { conf.Pools = []provision.PoolEntry{{ Name: c.pool, Envs: envList, }} } b, err := json.Marshal(logsSetData{ Restart: c.restart, Config: conf, }) if err != nil { return err } buffer := bytes.NewBuffer(b) request, err := http.NewRequest("POST", url, buffer) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *UpgradeCmd) Run(context *cmd.Context, client *cmd.Client) error { url, err := cmd.GetURL("/docker/bs/upgrade") if err != nil { return err } request, err := http.NewRequest("POST", url, nil) if err != nil { return err } response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *appUpdate) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName := context.Args[0] var param app if c.plan != "" { plan := tsuruapp.Plan{Name: c.plan} question := fmt.Sprintf("Are you sure you want to change the plan of the application %q to %q?", appName, plan.Name) if !c.Confirm(context, question) { return nil } param.Plan = plan } param.Description = c.description param.Pool = c.pool param.TeamOwner = c.teamOwner b, err := json.Marshal(param) if err != nil { return err } url, err := cmd.GetURL(fmt.Sprintf("/apps/%s", appName)) if err != nil { return err } request, err := http.NewRequest("POST", url, bytes.NewBuffer(b)) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { e := err.(*tsuruerr.HTTP) if e.Code == http.StatusBadRequest { return errors.New("You must set a flag. Use the 'app-update --help' command for more information.") } return err } err = cmd.StreamJSONResponse(context.Stdout, response) if err != nil { return err } fmt.Fprintf(context.Stdout, "App %q has been updated!\n", appName) fmt.Fprintln(context.Stdout, "Use app-info to check the status of the app and its units.") return nil }
func (c *EnvSetCmd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() url, err := cmd.GetURL("/docker/bs/env") if err != nil { return err } var envList []provision.Entry for _, arg := range context.Args { parts := strings.SplitN(arg, "=", 2) if len(parts) < 2 { return fmt.Errorf("invalid variable values") } if parts[0] == "" { return fmt.Errorf("invalid variable values") } envList = append(envList, provision.Entry{Name: parts[0], Value: parts[1]}) } conf := provision.ScopedConfig{} if c.pool == "" { conf.Envs = envList } else { conf.Pools = []provision.PoolEntry{{ Name: c.pool, Envs: envList, }} } b, err := json.Marshal(conf) if err != nil { return err } buffer := bytes.NewBuffer(b) request, err := http.NewRequest("POST", url, buffer) if err != nil { return err } request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *moveContainerCmd) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() u, err := cmd.GetURL(fmt.Sprintf("/docker/container/%s/move", context.Args[0])) if err != nil { return err } v := url.Values{} v.Set("to", context.Args[1]) request, err := http.NewRequest("POST", u, bytes.NewBufferString(v.Encode())) if err != nil { return err } request.Header.Set("Content-Type", "application/x-www-form-urlencoded") response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *appRestart) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName, err := c.Guess() if err != nil { return err } url, err := cmd.GetURL(fmt.Sprintf("/apps/%s/restart?process=%s", appName, c.process)) if err != nil { return err } request, err := http.NewRequest("POST", url, nil) if err != nil { return err } response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *dockerLogUpdate) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() if c.restart { extra := "" if c.pool != "" { extra = fmt.Sprintf(" running on pool %s", c.pool) } msg := fmt.Sprintf("Are you sure you want to restart all apps%s?", extra) if !c.Confirm(context, msg) { return nil } } u, err := cmd.GetURL("/docker/logs") if err != nil { return err } conf := container.DockerLogConfig{ Driver: c.logDriver, LogOpts: map[string]string(c.logOpts), } values, err := form.EncodeToValues(conf) if err != nil { return err } values.Set("pool", c.pool) values.Set("restart", strconv.FormatBool(c.restart)) reader := strings.NewReader(values.Encode()) request, err := http.NewRequest("POST", u, reader) if err != nil { return err } request.Header.Set("Content-Type", "application/x-www-form-urlencoded") response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *NodeContainerDelete) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() msg := fmt.Sprintf("Are you sure you want to remove node container %q", context.Args[0]) if c.pool != "" { msg += fmt.Sprintf(" from pool %q", c.pool) } else { msg += " from ALL pools" } if c.kill { msg += " and KILL it" } msg += "?" if !c.Confirm(context, msg) { return nil } val := url.Values{} val.Set("pool", c.pool) val.Set("kill", strconv.FormatBool(c.kill)) u, err := cmd.GetURL(fmt.Sprintf("/docker/nodecontainers/%s?%s", context.Args[0], val.Encode())) if err != nil { return err } request, err := http.NewRequest("DELETE", u, nil) if err != nil { return err } rsp, err := client.Do(request) if err != nil { return err } defer rsp.Body.Close() err = cmd.StreamJSONResponse(context.Stdout, rsp) if err != nil { return err } fmt.Fprintln(context.Stdout, "Node container successfully deleted.") return nil }
func (c *unitRemove) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName, err := c.Guess() if err != nil { return err } val := url.Values{} val.Add("units", context.Args[0]) val.Add("process", c.process) url, err := cmd.GetURL(fmt.Sprintf("/apps/%s/units?%s", appName, val.Encode())) if err != nil { return err } request, err := http.NewRequest("DELETE", url, nil) if err != nil { return err } response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }
func (c *NodeContainerUpgrade) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() if !c.Confirm(context, "Are you sure you want to upgrade existing node containers?") { return nil } u, err := cmd.GetURL(fmt.Sprintf("/docker/nodecontainers/%s/upgrade", context.Args[0])) if err != nil { return err } val := url.Values{} val.Set("pool", c.pool) request, err := http.NewRequest("POST", u, strings.NewReader(val.Encode())) if err != nil { return err } request.Header.Set("Content-Type", "application/x-www-form-urlencoded") rsp, err := client.Do(request) if err != nil { return err } defer rsp.Body.Close() return cmd.StreamJSONResponse(context.Stdout, rsp) }
func (c *appRemove) Run(context *cmd.Context, client *cmd.Client) error { context.RawOutput() appName := c.Flags().Lookup("app").Value.String() if appName == "" { return errors.New("Please use the -a/--app flag to specify which app you want to remove.") } if !c.Confirm(context, fmt.Sprintf(`Are you sure you want to remove app "%s"?`, appName)) { return nil } url, err := cmd.GetURL(fmt.Sprintf("/apps/%s", appName)) if err != nil { return err } request, err := http.NewRequest("DELETE", url, nil) if err != nil { return err } response, err := client.Do(request) if err != nil { return err } return cmd.StreamJSONResponse(context.Stdout, response) }