Skip to content

Commit b2bb6a5

Browse files
committed
propogate of arbitrary labels from runnersets to all created resources
1 parent 3e4201a commit b2bb6a5

2 files changed

Lines changed: 76 additions & 48 deletions

File tree

controllers/actions.github.com/resourcebuilder.go

Lines changed: 73 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,19 @@ func (b *resourceBuilder) newAutoScalingListener(autoscalingRunnerSet *v1alpha1.
8585
effectiveMinRunners = *autoscalingRunnerSet.Spec.MinRunners
8686
}
8787

88-
labels := map[string]string{
89-
LabelKeyGitHubScaleSetNamespace: autoscalingRunnerSet.Namespace,
90-
LabelKeyGitHubScaleSetName: autoscalingRunnerSet.Name,
91-
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
92-
LabelKeyKubernetesComponent: "runner-scale-set-listener",
93-
LabelKeyKubernetesVersion: autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion],
94-
labelKeyRunnerSpecHash: autoscalingRunnerSet.ListenerSpecHash(),
88+
labels := map[string]string{}
89+
90+
for k, v := range autoscalingRunnerSet.Labels {
91+
labels[k] = v
9592
}
9693

94+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingRunnerSet.Namespace
95+
labels[LabelKeyGitHubScaleSetName] = autoscalingRunnerSet.Name
96+
labels[LabelKeyKubernetesPartOf] = labelValueKubernetesPartOf
97+
labels[LabelKeyKubernetesComponent] = "runner-scale-set-listener"
98+
labels[LabelKeyKubernetesVersion] = autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion]
99+
labels[labelKeyRunnerSpecHash] = autoscalingRunnerSet.ListenerSpecHash()
100+
97101
if err := applyGitHubURLLabels(autoscalingRunnerSet.Spec.GitHubConfigUrl, labels); err != nil {
98102
return nil, fmt.Errorf("failed to apply GitHub URL labels: %v", err)
99103
}
@@ -400,32 +404,43 @@ func mergeListenerContainer(base, from *corev1.Container) {
400404
}
401405

402406
func (b *resourceBuilder) newScaleSetListenerServiceAccount(autoscalingListener *v1alpha1.AutoscalingListener) *corev1.ServiceAccount {
407+
labels := map[string]string{}
408+
for k, v := range autoscalingListener.Labels {
409+
labels[k] = v
410+
}
411+
412+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingListener.Spec.AutoscalingRunnerSetNamespace
413+
labels[LabelKeyGitHubScaleSetName] = autoscalingListener.Spec.AutoscalingRunnerSetName
414+
403415
return &corev1.ServiceAccount{
404416
ObjectMeta: metav1.ObjectMeta{
405417
Name: scaleSetListenerServiceAccountName(autoscalingListener),
406418
Namespace: autoscalingListener.Namespace,
407-
Labels: map[string]string{
408-
LabelKeyGitHubScaleSetNamespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
409-
LabelKeyGitHubScaleSetName: autoscalingListener.Spec.AutoscalingRunnerSetName,
410-
},
419+
Labels: labels,
411420
},
412421
}
413422
}
414423

415424
func (b *resourceBuilder) newScaleSetListenerRole(autoscalingListener *v1alpha1.AutoscalingListener) *rbacv1.Role {
425+
labels := map[string]string{}
426+
for k, v := range autoscalingListener.Labels {
427+
labels[k] = v
428+
}
429+
416430
rules := rulesForListenerRole([]string{autoscalingListener.Spec.EphemeralRunnerSetName})
417431
rulesHash := hash.ComputeTemplateHash(&rules)
432+
433+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingListener.Spec.AutoscalingRunnerSetNamespace
434+
labels[LabelKeyGitHubScaleSetName] = autoscalingListener.Spec.AutoscalingRunnerSetName
435+
labels[labelKeyListenerNamespace] = autoscalingListener.Namespace
436+
labels[labelKeyListenerName] = autoscalingListener.Name
437+
labels["role-policy-rules-hash"] = rulesHash
438+
418439
newRole := &rbacv1.Role{
419440
ObjectMeta: metav1.ObjectMeta{
420441
Name: scaleSetListenerRoleName(autoscalingListener),
421442
Namespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
422-
Labels: map[string]string{
423-
LabelKeyGitHubScaleSetNamespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
424-
LabelKeyGitHubScaleSetName: autoscalingListener.Spec.AutoscalingRunnerSetName,
425-
labelKeyListenerNamespace: autoscalingListener.Namespace,
426-
labelKeyListenerName: autoscalingListener.Name,
427-
"role-policy-rules-hash": rulesHash,
428-
},
443+
Labels: labels,
429444
},
430445
Rules: rules,
431446
}
@@ -434,6 +449,11 @@ func (b *resourceBuilder) newScaleSetListenerRole(autoscalingListener *v1alpha1.
434449
}
435450

436451
func (b *resourceBuilder) newScaleSetListenerRoleBinding(autoscalingListener *v1alpha1.AutoscalingListener, listenerRole *rbacv1.Role, serviceAccount *corev1.ServiceAccount) *rbacv1.RoleBinding {
452+
labels := map[string]string{}
453+
for k, v := range autoscalingListener.Labels {
454+
labels[k] = v
455+
}
456+
437457
roleRef := rbacv1.RoleRef{
438458
Kind: "Role",
439459
Name: listenerRole.Name,
@@ -449,18 +469,19 @@ func (b *resourceBuilder) newScaleSetListenerRoleBinding(autoscalingListener *v1
449469
}
450470
subjectHash := hash.ComputeTemplateHash(&subjects)
451471

472+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingListener.Spec.AutoscalingRunnerSetNamespace
473+
labels[LabelKeyGitHubScaleSetName] = autoscalingListener.Spec.AutoscalingRunnerSetName
474+
labels[labelKeyListenerNamespace] = autoscalingListener.Namespace
475+
labels[labelKeyListenerName] = autoscalingListener.Name
476+
477+
labels["role-binding-role-ref-hash"] = roleRefHash
478+
labels["role-binding-subject-hash"] = subjectHash
479+
452480
newRoleBinding := &rbacv1.RoleBinding{
453481
ObjectMeta: metav1.ObjectMeta{
454482
Name: scaleSetListenerRoleName(autoscalingListener),
455483
Namespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
456-
Labels: map[string]string{
457-
LabelKeyGitHubScaleSetNamespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
458-
LabelKeyGitHubScaleSetName: autoscalingListener.Spec.AutoscalingRunnerSetName,
459-
labelKeyListenerNamespace: autoscalingListener.Namespace,
460-
labelKeyListenerName: autoscalingListener.Name,
461-
"role-binding-role-ref-hash": roleRefHash,
462-
"role-binding-subject-hash": subjectHash,
463-
},
484+
Labels: labels,
464485
},
465486
RoleRef: roleRef,
466487
Subjects: subjects,
@@ -470,17 +491,22 @@ func (b *resourceBuilder) newScaleSetListenerRoleBinding(autoscalingListener *v1
470491
}
471492

472493
func (b *resourceBuilder) newScaleSetListenerSecretMirror(autoscalingListener *v1alpha1.AutoscalingListener, secret *corev1.Secret) *corev1.Secret {
494+
labels := map[string]string{}
495+
for k, v := range autoscalingListener.Labels {
496+
labels[k] = v
497+
}
498+
473499
dataHash := hash.ComputeTemplateHash(&secret.Data)
474500

501+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingListener.Spec.AutoscalingRunnerSetNamespace
502+
labels[LabelKeyGitHubScaleSetName] = autoscalingListener.Spec.AutoscalingRunnerSetName
503+
labels["secret-data-hash"] = dataHash
504+
475505
newListenerSecret := &corev1.Secret{
476506
ObjectMeta: metav1.ObjectMeta{
477507
Name: scaleSetListenerSecretMirrorName(autoscalingListener),
478508
Namespace: autoscalingListener.Namespace,
479-
Labels: map[string]string{
480-
LabelKeyGitHubScaleSetNamespace: autoscalingListener.Spec.AutoscalingRunnerSetNamespace,
481-
LabelKeyGitHubScaleSetName: autoscalingListener.Spec.AutoscalingRunnerSetName,
482-
"secret-data-hash": dataHash,
483-
},
509+
Labels: labels,
484510
},
485511
Data: secret.DeepCopy().Data,
486512
}
@@ -495,15 +521,18 @@ func (b *resourceBuilder) newEphemeralRunnerSet(autoscalingRunnerSet *v1alpha1.A
495521
}
496522
runnerSpecHash := autoscalingRunnerSet.RunnerSetSpecHash()
497523

498-
labels := map[string]string{
499-
labelKeyRunnerSpecHash: runnerSpecHash,
500-
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
501-
LabelKeyKubernetesComponent: "runner-set",
502-
LabelKeyKubernetesVersion: autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion],
503-
LabelKeyGitHubScaleSetName: autoscalingRunnerSet.Name,
504-
LabelKeyGitHubScaleSetNamespace: autoscalingRunnerSet.Namespace,
524+
labels := map[string]string{}
525+
for k, v := range autoscalingRunnerSet.Labels {
526+
labels[k] = v
505527
}
506528

529+
labels[labelKeyRunnerSpecHash] = runnerSpecHash
530+
labels[LabelKeyKubernetesPartOf] = labelValueKubernetesPartOf
531+
labels[LabelKeyKubernetesComponent] = "runner-set"
532+
labels[LabelKeyKubernetesVersion] = autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion]
533+
labels[LabelKeyGitHubScaleSetName] = autoscalingRunnerSet.Name
534+
labels[LabelKeyGitHubScaleSetNamespace] = autoscalingRunnerSet.Namespace
535+
507536
if err := applyGitHubURLLabels(autoscalingRunnerSet.Spec.GitHubConfigUrl, labels); err != nil {
508537
return nil, fmt.Errorf("failed to apply GitHub URL labels: %v", err)
509538
}
@@ -538,18 +567,14 @@ func (b *resourceBuilder) newEphemeralRunnerSet(autoscalingRunnerSet *v1alpha1.A
538567

539568
func (b *resourceBuilder) newEphemeralRunner(ephemeralRunnerSet *v1alpha1.EphemeralRunnerSet) *v1alpha1.EphemeralRunner {
540569
labels := make(map[string]string)
541-
for _, key := range commonLabelKeys {
542-
switch key {
543-
case LabelKeyKubernetesComponent:
544-
labels[key] = "runner"
545-
default:
546-
v, ok := ephemeralRunnerSet.Labels[key]
547-
if !ok {
548-
continue
549-
}
550-
labels[key] = v
570+
for k, v := range ephemeralRunnerSet.Labels {
571+
if k == LabelKeyKubernetesComponent {
572+
labels[k] = "runner"
573+
} else {
574+
labels[k] = v
551575
}
552576
}
577+
553578
annotations := make(map[string]string)
554579
for key, val := range ephemeralRunnerSet.Annotations {
555580
annotations[key] = val

controllers/actions.github.com/resourcebuilder_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ func TestLabelPropagation(t *testing.T) {
2121
Labels: map[string]string{
2222
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
2323
LabelKeyKubernetesVersion: "0.2.0",
24+
"arbitrary-label": "random-value",
2425
},
2526
Annotations: map[string]string{
2627
runnerScaleSetIdAnnotationKey: "1",
@@ -45,6 +46,7 @@ func TestLabelPropagation(t *testing.T) {
4546
assert.Equal(t, "org", ephemeralRunnerSet.Labels[LabelKeyGitHubOrganization])
4647
assert.Equal(t, "repo", ephemeralRunnerSet.Labels[LabelKeyGitHubRepository])
4748
assert.Equal(t, autoscalingRunnerSet.Annotations[AnnotationKeyGitHubRunnerGroupName], ephemeralRunnerSet.Annotations[AnnotationKeyGitHubRunnerGroupName])
49+
assert.Equal(t, autoscalingRunnerSet.Labels["arbitrary-label"], ephemeralRunnerSet.Labels["arbitrary-label"])
4850

4951
listener, err := b.newAutoScalingListener(&autoscalingRunnerSet, ephemeralRunnerSet, autoscalingRunnerSet.Namespace, "test:latest", nil)
5052
require.NoError(t, err)
@@ -57,6 +59,7 @@ func TestLabelPropagation(t *testing.T) {
5759
assert.Equal(t, "", listener.Labels[LabelKeyGitHubEnterprise])
5860
assert.Equal(t, "org", listener.Labels[LabelKeyGitHubOrganization])
5961
assert.Equal(t, "repo", listener.Labels[LabelKeyGitHubRepository])
62+
assert.Equal(t, autoscalingRunnerSet.Labels["arbitrary-label"], listener.Labels["arbitrary-label"])
6063

6164
listenerServiceAccount := &corev1.ServiceAccount{
6265
ObjectMeta: metav1.ObjectMeta{

0 commit comments

Comments
 (0)