func CreateWorkerpool()

in cmd/hub/api/workerpool.go [110:178]


func CreateWorkerpool(selector, name, instanceType string, count, maxCount int,
	spotPrice float32, preemptibleVMs, autoscale bool, volumeSize int,
	waitAndTailDeployLogs, dryRun bool) {

	instance, err := stackInstanceBy(selector)
	if err != nil {
		log.Fatalf("Unable to query for Stack Instance(s): %v", err)
	}

	kind := "aws"
	if strings.HasPrefix(instance.Stack.Id, "gke") {
		kind = "gcp"
	}
	parameters := []Parameter{
		{Name: "component.worker-pool.instance.size", Value: instanceType},
		{Name: "component.worker-pool.count", Value: count},
	}
	if maxCount > 0 {
		parameters = append(parameters,
			Parameter{Name: "component.worker-pool.maxCount", Value: maxCount})
	}
	if volumeSize > 0 {
		parameters = append(parameters,
			Parameter{Name: "component.worker-pool.volume.size", Value: volumeSize})
	}
	if autoscale {
		parameters = append(parameters,
			Parameter{Name: "component.worker-pool.autoscaling.enabled", Value: autoscale})
	}
	switch kind {
	case "aws":
		price := ""
		if spotPrice > 0 {
			price = fmt.Sprintf("%.4f", spotPrice)
		}
		parameters = append(parameters,
			Parameter{Name: "component.worker-pool.aws.spotPrice", Value: price})

	case "gcp":
		parameters = append(parameters,
			Parameter{Name: "component.worker-pool.gcp.preemptible.enabled", Value: preemptibleVMs})
	}
	req := &WorkerpoolRequest{
		Name:       name,
		Parameters: parameters,
	}
	maybeDryRun := ""
	if dryRun {
		maybeDryRun = "?dryRun=true"
	}
	path := fmt.Sprintf("%s/%s/workerpools%s", stackInstancesResource, url.PathEscape(instance.Id), maybeDryRun)
	var jsResp WorkerpoolLifecycleResponse
	code, err := post(hubApi(), path, req, &jsResp)
	if err != nil {
		log.Fatalf("Error creating HubCTL `%s` Workerpool `%s`: %v",
			instance.Domain, name, err)
	}
	if code != 201 {
		log.Fatalf("Got %d HTTP creating HubCTL `%s` Workerpool `%s`, expected 201 HTTP",
			code, instance.Domain, name)
	}
	formatStackInstance(&jsResp.Instance)
	if waitAndTailDeployLogs && !dryRun {
		if config.Verbose {
			log.Print("Tailing automation task logs... ^C to interrupt")
		}
		os.Exit(Logs([]string{"stackInstance/" + jsResp.Instance.Id}, true))
	}
}