Commit 2cbe806c authored by Yannik Dällenbach's avatar Yannik Dällenbach 🤼 Committed by Yannik Dällenbach
Browse files

Create new servers on demand

parent 2821a4b2
Loading
Loading
Loading
Loading
+41 −1
Original line number Diff line number Diff line
@@ -3,10 +3,13 @@ package main
import (
	"context"
	"crypto/ed25519"
	"crypto/rand"
	"encoding/pem"
	"errors"
	"fmt"
	"math"
	"net/http"
	"strings"

	"github.com/cloudscale-ch/cloudscale-go-sdk/v6"
	hclog "github.com/hashicorp/go-hclog"
@@ -66,7 +69,44 @@ func (g *instanceGroup) Init(ctx context.Context, logger hclog.Logger, settings

// Increase implements provider.InstanceGroup.
func (g *instanceGroup) Increase(ctx context.Context, delta int) (succeeded int, err error) {
	return 0, nil
	servers := make([]*cloudscale.Server, 0, delta)
	errs := make([]error, 0)

	tagMap := cloudscale.TagMap{"fleeting": "true"}

	for range delta {
		serverName := strings.ToLower(rand.Text()[:5])
		server, err := g.client.Servers.Create(ctx, &cloudscale.ServerRequest{
			Name:                  "fleeting-" + serverName,
			Flavor:                "flex-4-1",
			Image:                 "ubuntu-24.04",
			VolumeSizeGB:          10,
			SSHKeys:               []string{string(g.authorizedKey)},
			TaggedResourceRequest: cloudscale.TaggedResourceRequest{Tags: &tagMap},
			UserData: `#cloud-config
package_update: true
package_upgrade: true
apt:
  sources:
    gitlab_runner:
      source: "deb https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ $RELEASE main"
      keyserver: "https://packages.gitlab.com/runner/gitlab-runner/gpgkey"
      keyid: "F6403F6544A38863DAA0B6E03F01618A51312F3F"
packages:
  - git
  - gitlab-runner
`,
		})

		if err != nil {
			errs = append(errs, fmt.Errorf("failed to create server: %w", err))
			continue
		}

		servers = append(servers, server)
	}

	return len(servers), errors.Join(errs...)
}

// Decrease implements provider.InstanceGroup.