mirror of
https://github.com/cirruslabs/orchard.git
synced 2026-09-29 19:41:15 +02:00
Worker: introduce automatic "org.cirruslabs.orchard.worker-name" label (#481)
* Worker: introduce automatic "org.cirruslabs.orchard.worker-name" label * TestLabelsCopy: use constants to fix linter error
This commit is contained in:
@@ -142,6 +142,12 @@ func New(client *client.Client, opts ...Option) (*Worker, error) {
|
||||
|
||||
worker.resources = defaultResources.Merged(worker.resources)
|
||||
|
||||
defaultLabels := v1.Labels{
|
||||
v1.LabelWorkerName: worker.name,
|
||||
}
|
||||
|
||||
worker.labels = defaultLabels.Merged(worker.labels)
|
||||
|
||||
// Worker, VMs and images-related metrics
|
||||
worker.vmPullTimeHistogram, err = opentelemetry.DefaultMeter.Float64Histogram(
|
||||
"org.cirruslabs.orchard.worker.vm.pull_time",
|
||||
|
||||
@@ -237,6 +237,45 @@ func newWorkerWithFakeTart(
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkerNameLabel(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
configuredLabels v1.Labels
|
||||
expectedWorkerName string
|
||||
}{
|
||||
{
|
||||
name: "automatic worker name",
|
||||
configuredLabels: v1.Labels{"custom-label": "custom-value"},
|
||||
expectedWorkerName: recoveryTestWorkerName,
|
||||
},
|
||||
{
|
||||
name: "explicit override",
|
||||
configuredLabels: v1.Labels{
|
||||
"custom-label": "custom-value",
|
||||
v1.LabelWorkerName: "custom-worker-name",
|
||||
},
|
||||
expectedWorkerName: "custom-worker-name",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
worker, err := New(
|
||||
nil,
|
||||
WithName(recoveryTestWorkerName),
|
||||
WithLabels(test.configuredLabels),
|
||||
WithSynthetic(),
|
||||
WithLogger(zap.NewNop()),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(worker.pollTicker.Stop)
|
||||
|
||||
require.Equal(t, "custom-value", worker.labels["custom-label"])
|
||||
require.Equal(t, test.expectedWorkerName, worker.labels[v1.LabelWorkerName])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkerRecoversControllerSessionWithoutDeletingRunningVM(t *testing.T) {
|
||||
firstHeartbeat := make(chan struct{})
|
||||
reregistered := make(chan struct{})
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package v1
|
||||
|
||||
import "maps"
|
||||
|
||||
const (
|
||||
LabelWorkerName = "org.cirruslabs.orchard.worker-name"
|
||||
)
|
||||
|
||||
type Labels map[string]string
|
||||
|
||||
func (labels Labels) Contains(other Labels) bool {
|
||||
@@ -11,3 +17,19 @@ func (labels Labels) Contains(other Labels) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (labels Labels) Copy() Labels {
|
||||
if labels == nil {
|
||||
return make(Labels)
|
||||
}
|
||||
|
||||
return maps.Clone(labels)
|
||||
}
|
||||
|
||||
func (labels Labels) Merged(other Labels) Labels {
|
||||
result := labels.Copy()
|
||||
|
||||
maps.Copy(result, other)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package v1_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
v1 "github.com/cirruslabs/orchard/pkg/resource/v1"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLabelsMatch(t *testing.T) {
|
||||
@@ -43,3 +44,38 @@ func TestLabelsMatch(t *testing.T) {
|
||||
require.False(t, a.Contains(b))
|
||||
require.True(t, b.Contains(a))
|
||||
}
|
||||
|
||||
func TestLabelsCopy(t *testing.T) {
|
||||
original := v1.Labels{"foo": "bar"}
|
||||
copied := original.Copy()
|
||||
copied["foo"] = "changed"
|
||||
|
||||
require.Equal(t, v1.Labels{"foo": "bar"}, original)
|
||||
require.Equal(t, v1.Labels{"foo": "changed"}, copied)
|
||||
require.NotNil(t, v1.Labels(nil).Copy())
|
||||
}
|
||||
|
||||
func TestLabelsMerged(t *testing.T) {
|
||||
const (
|
||||
originalValue = "original"
|
||||
overriddenKey = "overridden"
|
||||
overrideValue = "override"
|
||||
)
|
||||
|
||||
original := v1.Labels{
|
||||
"preserved": originalValue,
|
||||
overriddenKey: originalValue,
|
||||
}
|
||||
overrides := v1.Labels{
|
||||
"added": overrideValue,
|
||||
overriddenKey: overrideValue,
|
||||
}
|
||||
|
||||
require.Equal(t, v1.Labels{
|
||||
"added": overrideValue,
|
||||
overriddenKey: overrideValue,
|
||||
"preserved": originalValue,
|
||||
}, original.Merged(overrides))
|
||||
require.Equal(t, originalValue, original[overriddenKey])
|
||||
require.Equal(t, overrideValue, overrides[overriddenKey])
|
||||
}
|
||||
|
||||
@@ -35,13 +35,11 @@ func NewResourcesFromStringToString(
|
||||
}
|
||||
|
||||
func (resources Resources) Copy() Resources {
|
||||
result := make(Resources)
|
||||
|
||||
for key, value := range resources {
|
||||
result[key] = value
|
||||
if resources == nil {
|
||||
return make(Resources)
|
||||
}
|
||||
|
||||
return result
|
||||
return maps.Clone(resources)
|
||||
}
|
||||
|
||||
func (resources Resources) Add(other Resources) {
|
||||
@@ -87,9 +85,7 @@ func (resources Resources) Merge(other Resources) {
|
||||
func (resources Resources) Merged(other Resources) Resources {
|
||||
result := resources.Copy()
|
||||
|
||||
for otherKey, otherValue := range other {
|
||||
result[otherKey] = otherValue
|
||||
}
|
||||
maps.Copy(result, other)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user