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))
}
}