//Patch an Application. func Patch(cmd *cli.Cmd) { uuid := cmd.String(cli.StringArg{ Name: "UUID", Desc: "Application UUID", HideValue: true, }) image := cmd.String(cli.StringOpt{ Name: "IMG_URL", Desc: "Image URL", HideValue: true, }) name := cmd.String(cli.StringOpt{ Name: "APP_NAME", Desc: "Application Name", HideValue: true, }) certificate := cmd.String(cli.StringOpt{ Name: "certificate_file", Desc: "File (PEM) containing the SSL certificate associated with the application", HideValue: true, }) envFile := cmd.String(cli.StringOpt{ Name: "env_file", Desc: "Environment variables file", HideValue: true, }) certificateChain := cmd.String(cli.StringOpt{ Name: "certificate_chain_file", Desc: "File (PEM) contianing the certificate chain associated with the public certificate (optional)", HideValue: true, }) privateKey := cmd.String(cli.StringOpt{ Name: "private_key_file", Desc: "File (PEM) containing the SSL key associated with the public certificate (required if providing a certificate)", HideValue: true, }) sslPorts := cmd.Strings(cli.StringsOpt{ Name: "ssl_port", Desc: "Port to be assocaited with the certificate", HideValue: true, }) enVars := cmd.Strings(cli.StringsOpt{ Name: "e env", Desc: "Environment variable (i.e. MYSQL_PASSWORD=complexpassword", HideValue: true, }) rules := cmd.Strings(cli.StringsOpt{ Name: "r rule", Desc: "Application Deployment rules", HideValue: true, }) ports := cmd.Strings(cli.StringsOpt{ Name: "p port", Desc: "Port", HideValue: true, }) labels := cmd.Strings(cli.StringsOpt{ Name: "l label", Desc: "Label associated with the aplication", HideValue: true, }) meta := cmd.String(cli.StringOpt{ Name: "m metadata", Desc: "Metadata associated with the application being created. Must be JSON formatted.", HideValue: true, }) cmd.Action = func() { app := application.Application{ UUID: *uuid, } var eVars []string if *envFile != "" { eVars = readEnvFile(*envFile) } else { eVars = *enVars } var m string if *meta != "" { mData := metaData(*meta, *labels) mdata, err := json.Marshal(mData) if err != nil { log.Fatal(err) } log.Debug(mdata) m = fmt.Sprintf("%s", mdata) } certificates := readCertificates(certificate, privateKey, certificateChain) c, err := json.Marshal(certificates) if err != nil { log.Fatal(err) } if string(c) == "{}" { c = []byte("") } resp, body, errs := app.Patch(string(c), *name, *image, m, eVars, *rules, *ports, *sslPorts) if errs != nil { log.Fatalf("Could not patch application: %s", errs) } if resp.StatusCode != 200 { log.Fatalf("Could not patch application: %s", resp.Status) } err = json.Unmarshal([]byte(body), &app) if err != nil { log.Fatal(err) } printAppDetail(&app) } }