Exemplo n.º 1
0
//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)
	}
}