Scale set add multi-label support
This commit is contained in:
parent
2fc51aaf32
commit
85b62cf506
|
|
@ -66,6 +66,9 @@ type AutoscalingRunnerSetSpec struct {
|
|||
// +optional
|
||||
RunnerScaleSetName string `json:"runnerScaleSetName,omitempty"`
|
||||
|
||||
// +optional
|
||||
RunnerScaleSetLabels []string `json:"runnerScaleSetLabels,omitempty"`
|
||||
|
||||
// +optional
|
||||
Proxy *ProxyConfig `json:"proxy,omitempty"`
|
||||
|
||||
|
|
|
|||
|
|
@ -227,6 +227,11 @@ func (in *AutoscalingRunnerSetList) DeepCopyObject() runtime.Object {
|
|||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *AutoscalingRunnerSetSpec) DeepCopyInto(out *AutoscalingRunnerSetSpec) {
|
||||
*out = *in
|
||||
if in.RunnerScaleSetLabels != nil {
|
||||
in, out := &in.RunnerScaleSetLabels, &out.RunnerScaleSetLabels
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.Proxy != nil {
|
||||
in, out := &in.Proxy, &out.Proxy
|
||||
*out = new(ProxyConfig)
|
||||
|
|
|
|||
|
|
@ -8385,6 +8385,10 @@ spec:
|
|||
type: object
|
||||
runnerGroup:
|
||||
type: string
|
||||
runnerScaleSetLabels:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
runnerScaleSetName:
|
||||
type: string
|
||||
template:
|
||||
|
|
|
|||
|
|
@ -8385,6 +8385,10 @@ spec:
|
|||
type: object
|
||||
runnerGroup:
|
||||
type: string
|
||||
runnerScaleSetLabels:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
runnerScaleSetName:
|
||||
type: string
|
||||
template:
|
||||
|
|
|
|||
|
|
@ -83,6 +83,10 @@ spec:
|
|||
githubConfigSecret: {{ include "github-secret.name" . | quote }}
|
||||
runnerGroup: {{ .Values.scaleset.runnerGroup | quote }}
|
||||
runnerScaleSetName: {{ .Values.scaleset.name | quote }}
|
||||
{{- if and .Values.scaleset.labels (kindIs "slice" .Values.scaleset.labels) }}
|
||||
runnerScaleSetLabels:
|
||||
{{- toYaml .Values.scaleset.labels | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
{{- if .Values.githubServerTLS }}
|
||||
githubServerTLS:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
suite: "AutoscalingRunnerSet scale set labels"
|
||||
templates:
|
||||
- autoscalingrunnserset.yaml
|
||||
tests:
|
||||
- it: should apply scaleset labels slice as runnerScaleSetLabels
|
||||
set:
|
||||
scaleset.name: "test"
|
||||
scaleset.labels:
|
||||
- "linux"
|
||||
- "x64"
|
||||
auth.url: "https://github.com/org"
|
||||
auth.githubToken: "gh_token12345"
|
||||
controllerServiceAccount.name: "arc"
|
||||
controllerServiceAccount.namespace: "arc-system"
|
||||
release:
|
||||
name: "test-name"
|
||||
namespace: "test-namespace"
|
||||
asserts:
|
||||
- equal:
|
||||
path: spec.runnerScaleSetLabels[0]
|
||||
value: "linux"
|
||||
- equal:
|
||||
path: spec.runnerScaleSetLabels[1]
|
||||
value: "x64"
|
||||
|
|
@ -5,6 +5,10 @@ scaleset:
|
|||
# Name of the scaleset
|
||||
name: ""
|
||||
runnerGroup: "default"
|
||||
# Labels are optional list of strings that will be applied to the scaleset
|
||||
# allowing scaleset to be selected by the listener based on the labels specified in the workflow.
|
||||
# https://docs.github.com/en/actions/how-tos/manage-runners/self-hosted-runners/apply-labels
|
||||
labels: []
|
||||
## minRunners is the min number of idle runners. The target number of runners created will be
|
||||
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
|
||||
# minRunners: 0
|
||||
|
|
|
|||
|
|
@ -74,6 +74,10 @@ spec:
|
|||
{{- with .Values.runnerScaleSetName }}
|
||||
runnerScaleSetName: {{ . }}
|
||||
{{- end }}
|
||||
{{- if and .Values.scaleSetLabels (kindIs "slice" .Values.scaleSetLabels) }}
|
||||
runnerScaleSetLabels:
|
||||
{{- toYaml .Values.scaleSetLabels | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
{{- if .Values.githubServerTLS }}
|
||||
githubServerTLS:
|
||||
|
|
|
|||
|
|
@ -474,6 +474,37 @@ func TestTemplateRenderedAutoScalingRunnerSet_RunnerScaleSetName(t *testing.T) {
|
|||
assert.Equal(t, "ghcr.io/actions/actions-runner:latest", ars.Spec.Template.Spec.Containers[0].Image)
|
||||
}
|
||||
|
||||
func TestTemplateRenderedAutoScalingRunnerSet_ScaleSetLabels(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// Path to the helm chart we will test
|
||||
helmChartPath, err := filepath.Abs("../../gha-runner-scale-set")
|
||||
require.NoError(t, err)
|
||||
|
||||
releaseName := "test-runners"
|
||||
namespaceName := "test-" + strings.ToLower(random.UniqueId())
|
||||
|
||||
options := &helm.Options{
|
||||
Logger: logger.Discard,
|
||||
SetValues: map[string]string{
|
||||
"githubConfigUrl": "https://github.com/actions",
|
||||
"githubConfigSecret.github_token": "gh_token12345",
|
||||
"scaleSetLabels[0]": "linux",
|
||||
"scaleSetLabels[1]": "x64",
|
||||
"controllerServiceAccount.name": "arc",
|
||||
"controllerServiceAccount.namespace": "arc-system",
|
||||
},
|
||||
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
|
||||
}
|
||||
|
||||
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/autoscalingrunnerset.yaml"})
|
||||
|
||||
var ars v1alpha1.AutoscalingRunnerSet
|
||||
helm.UnmarshalK8SYaml(t, output, &ars)
|
||||
|
||||
assert.Equal(t, []string{"linux", "x64"}, ars.Spec.RunnerScaleSetLabels)
|
||||
}
|
||||
|
||||
func TestTemplateRenderedAutoScalingRunnerSet_ProvideMetadata(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
## ex: https://github.com/myorg/myrepo or https://github.com/myorg or https://github.com/enterprises/myenterprise
|
||||
githubConfigUrl: ""
|
||||
|
||||
scaleSetLabels: []
|
||||
|
||||
## githubConfigSecret is the k8s secret information to use when authenticating via the GitHub API.
|
||||
## You can choose to supply:
|
||||
## A) a PAT token,
|
||||
|
|
|
|||
|
|
@ -8385,6 +8385,10 @@ spec:
|
|||
type: object
|
||||
runnerGroup:
|
||||
type: string
|
||||
runnerScaleSetLabels:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
runnerScaleSetName:
|
||||
type: string
|
||||
template:
|
||||
|
|
|
|||
|
|
@ -424,17 +424,35 @@ func (r *AutoscalingRunnerSetReconciler) createRunnerScaleSet(ctx context.Contex
|
|||
}
|
||||
|
||||
if runnerScaleSet == nil {
|
||||
labels := []scaleset.Label{
|
||||
{
|
||||
Name: autoscalingRunnerSet.Spec.RunnerScaleSetName,
|
||||
Type: "System",
|
||||
},
|
||||
}
|
||||
|
||||
if labelCount := len(autoscalingRunnerSet.Spec.RunnerScaleSetLabels); labelCount > 0 {
|
||||
unique := make(map[string]bool, labelCount+1)
|
||||
unique[autoscalingRunnerSet.Spec.RunnerScaleSetName] = true
|
||||
|
||||
for _, label := range autoscalingRunnerSet.Spec.RunnerScaleSetLabels {
|
||||
if _, exists := unique[label]; exists {
|
||||
logger.Info("Duplicate label found. Skipping adding duplicate label to runner scale set", "label", label)
|
||||
continue
|
||||
}
|
||||
labels = append(labels, scaleset.Label{
|
||||
Name: label,
|
||||
Type: "System",
|
||||
})
|
||||
unique[label] = true
|
||||
}
|
||||
}
|
||||
runnerScaleSet, err = actionsClient.CreateRunnerScaleSet(
|
||||
ctx,
|
||||
&scaleset.RunnerScaleSet{
|
||||
Name: autoscalingRunnerSet.Spec.RunnerScaleSetName,
|
||||
RunnerGroupID: runnerGroupID,
|
||||
Labels: []scaleset.Label{
|
||||
{
|
||||
Name: autoscalingRunnerSet.Spec.RunnerScaleSetName,
|
||||
Type: "System",
|
||||
},
|
||||
},
|
||||
Labels: labels,
|
||||
RunnerSetting: scaleset.RunnerSetting{
|
||||
DisableUpdate: true,
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue