func CreateRunnerGroupServer()

in runner/runnergroup_run.go [35:91]


func CreateRunnerGroupServer(ctx context.Context,
	kubeconfigPath string,
	runnerImage string,
	rgSpec *types.RunnerGroupSpec,
	runnerVerbosity int,
	opts ...RunCmdOpt,
) error {
	specInStr, err := tweakAndMarshalSpec(rgSpec)
	if err != nil {
		return err
	}

	cfg := defaultRunCmdCfg
	for _, opt := range opts {
		opt(&cfg)
	}

	appiler, err := cfg.toServerHelmValuesAppiler()
	if err != nil {
		return err
	}

	getCli, err := helmcli.NewGetCli(kubeconfigPath, runnerGroupReleaseNamespace)
	if err != nil {
		return fmt.Errorf("failed to create helm get client: %w", err)
	}

	_, err = getCli.Get(runnerGroupServerReleaseName)
	if err == nil {
		return fmt.Errorf("runner group server already exists")
	}

	ch, err := manifests.LoadChart(runnerGroupServerChartName)
	if err != nil {
		return fmt.Errorf("failed to load runner group server chart: %w", err)
	}

	releaseCli, err := helmcli.NewReleaseCli(
		kubeconfigPath,
		runnerGroupReleaseNamespace,
		runnerGroupServerReleaseName,
		ch,
		runnerGroupReleaseLabels,
		helmcli.StringPathValuesApplier(
			"name="+runnerGroupServerReleaseName,
			"image="+runnerImage,
			"runnerGroupSpec="+specInStr,
			// runnerVerbosity needs to be surrounded by quotes, so that YAML parse it as a string.
			fmt.Sprintf("runnerVerbosity=\"%d\"", runnerVerbosity),
		),
		appiler,
	)
	if err != nil {
		return fmt.Errorf("failed to create helm release client: %w", err)
	}
	return releaseCli.Deploy(ctx, 120*time.Second)
}