//Create an Application. func Create(cmd *cli.Cmd) { locationUuid := cmd.String(cli.StringArg{ Name: "LOCATION_UUID", Desc: "UUID of location to create application in", HideValue: true, }) image := cmd.String(cli.StringArg{ Name: "IMG_URL", Desc: "Image URL", HideValue: true, }) name := cmd.String(cli.StringArg{ Name: "APP_NAME", Desc: "Application Name", HideValue: true, }) certificate := cmd.String(cli.StringOpt{ Name: "certificate_file", Desc: "File(PEM encoded) containing the SSL certificate associated with the application", HideValue: true, }) certificateChain := cmd.String(cli.StringOpt{ Name: "certificate_chain_file", Desc: "File(PEM encoded) contianing the certificate chain associated with the public certificate (optional)", HideValue: true, }) envFile := cmd.String(cli.StringOpt{ Name: "env_file", Desc: "Environment variables file", HideValue: true, }) privateKey := cmd.String(cli.StringOpt{ Name: "private_key_file", Desc: "File(PEM encoded) 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 associated 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 (non-ssl)", HideValue: true, }) labels := cmd.Strings(cli.StringsOpt{ Name: "l label", Desc: "Label associated with the application", 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{ Certificates: readCertificates(certificate, privateKey, certificateChain), Environment: transformEnvironment(envFile, enVars), ImageURL: *image, Location: map[string]string{ "uuid": *locationUuid, }, Metadata: metaData(*meta, *labels), Name: *name, Ports: *ports, Rules: transformRules(rules), SSLPorts: *sslPorts, } application, resp, errs := app.Create() if len(errs) > 0 { log.Fatalf("Could not create application: %s", errs[0]) } if resp.StatusCode != 201 { log.Fatalf("Could not create application: %s", resp.Status) } printAppDetail(application) } }