Skip to content

Commit 0f107bc

Browse files
authored
Merge pull request #255 from buildkite/retry-agent-affinity
Add retry_agent_affinity option to create and update cluster queues
2 parents 6f29620 + b6a7688 commit 0f107bc

File tree

4 files changed

+60
-33
lines changed

4 files changed

+60
-33
lines changed

cluster_queues.go

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,39 @@ type ClusterQueuesService struct {
1313
client *Client
1414
}
1515

16+
type RetryAgentAffinity string
17+
18+
const (
19+
RetryAgentAffinityPreferWarmest RetryAgentAffinity = "prefer-warmest"
20+
RetryAgentAffinityPreferDifferent RetryAgentAffinity = "prefer-different"
21+
)
22+
1623
type ClusterQueue struct {
17-
ID string `json:"id,omitempty"`
18-
GraphQLID string `json:"graphql_id,omitempty"`
19-
Key string `json:"key,omitempty"`
20-
Description string `json:"description,omitempty"`
21-
URL string `json:"url,omitempty"`
22-
WebURL string `json:"web_url,omitempty"`
23-
ClusterURL string `json:"cluster_url,omitempty"`
24-
DispatchPaused bool `json:"dispatch_paused"`
25-
DispatchPausedBy *ClusterCreator `json:"dispatch_paused_by,omitempty"`
26-
DispatchPausedAt *Timestamp `json:"dispatch_paused_at,omitempty"`
27-
DispatchPausedNote string `json:"dispatch_paused_note,omitempty"`
28-
CreatedAt *Timestamp `json:"created_at,omitempty"`
29-
CreatedBy ClusterCreator `json:"created_by,omitempty"`
24+
ID string `json:"id,omitempty"`
25+
GraphQLID string `json:"graphql_id,omitempty"`
26+
Key string `json:"key,omitempty"`
27+
Description string `json:"description,omitempty"`
28+
URL string `json:"url,omitempty"`
29+
WebURL string `json:"web_url,omitempty"`
30+
ClusterURL string `json:"cluster_url,omitempty"`
31+
RetryAgentAffinity RetryAgentAffinity `json:"retry_agent_affinity,omitempty"`
32+
DispatchPaused bool `json:"dispatch_paused"`
33+
DispatchPausedBy *ClusterCreator `json:"dispatch_paused_by,omitempty"`
34+
DispatchPausedAt *Timestamp `json:"dispatch_paused_at,omitempty"`
35+
DispatchPausedNote string `json:"dispatch_paused_note,omitempty"`
36+
CreatedAt *Timestamp `json:"created_at,omitempty"`
37+
CreatedBy ClusterCreator `json:"created_by,omitempty"`
3038
}
3139

3240
type ClusterQueueCreate struct {
33-
Key string `json:"key,omitempty"`
34-
Description string `json:"description,omitempty"`
41+
Key string `json:"key,omitempty"`
42+
Description string `json:"description,omitempty"`
43+
RetryAgentAffinity RetryAgentAffinity `json:"retry_agent_affinity,omitempty"`
3544
}
3645

3746
type ClusterQueueUpdate struct {
38-
Description string `json:"description,omitempty"`
47+
Description string `json:"description,omitempty"`
48+
RetryAgentAffinity RetryAgentAffinity `json:"retry_agent_affinity,omitempty"`
3949
}
4050

4151
type ClusterQueuePause struct {

cluster_queues_test.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ func TestClusterQueuesService_Get(t *testing.T) {
154154
"avatar_url": "https://www.gravatar.com/avatar/593nf93m405mf744n3kg9456jjph9grt4",
155155
"created_at": "2023-02-20T03:00:05.824Z"
156156
},
157+
"retry_agent_affinity": "prefer-warmest",
157158
"dispatch_paused_at": "2023-08-25T08:53:05.824Z",
158159
"dispatch_paused_note": "Weekend queue pause",
159160
"created_at": "2023-06-07T11:30:17.941Z",
@@ -195,6 +196,7 @@ func TestClusterQueuesService_Get(t *testing.T) {
195196
WebURL: "https://buildkite.com/organizations/my-great-org/clusters/b7c9bc4f-526f-4c18-a3be-dc854ab75d57/queues/46718bb6-3b2a-48da-9dcb-922c6b7ba140",
196197
ClusterURL: "https://api.buildkite.com/v2/organizations/my-great-org/clusters/b7c9bc4f-526f-4c18-a3be-dc854ab75d57",
197198
DispatchPaused: true,
199+
RetryAgentAffinity: RetryAgentAffinityPreferWarmest,
198200
DispatchPausedBy: &clusterCreator,
199201
DispatchPausedAt: NewTimestamp(devQueuePausedAt),
200202
DispatchPausedNote: "Weekend queue pause",
@@ -214,8 +216,9 @@ func TestClusterQueuesService_Create(t *testing.T) {
214216
t.Cleanup(teardown)
215217

216218
input := ClusterQueueCreate{
217-
Key: "development1",
218-
Description: "Development 1 queue",
219+
Key: "development1",
220+
Description: "Development 1 queue",
221+
RetryAgentAffinity: RetryAgentAffinityPreferDifferent,
219222
}
220223

221224
server.HandleFunc("/v2/organizations/my-great-org/clusters/b7c9bc4f-526f-4c18-a3be-dc854ab75d57/queues", func(w http.ResponseWriter, r *http.Request) {
@@ -235,7 +238,8 @@ func TestClusterQueuesService_Create(t *testing.T) {
235238
`
236239
{
237240
"key" : "development1",
238-
"description": "Development 1 queue"
241+
"description": "Development 1 queue",
242+
"retry_agent_affinity": "prefer-different"
239243
}`)
240244
})
241245

@@ -245,8 +249,9 @@ func TestClusterQueuesService_Create(t *testing.T) {
245249
}
246250

247251
want := ClusterQueue{
248-
Key: "development1",
249-
Description: "Development 1 queue",
252+
Key: "development1",
253+
Description: "Development 1 queue",
254+
RetryAgentAffinity: RetryAgentAffinityPreferDifferent,
250255
}
251256

252257
if diff := cmp.Diff(queue, want); diff != "" {
@@ -274,7 +279,8 @@ func TestClusterQueuesService_Update(t *testing.T) {
274279
{
275280
"id" : "1374ffd0-c5ed-49a5-aebe-67ce906e68ca",
276281
"key" : "development1",
277-
"description": "Development 1 Team queue"
282+
"description": "Development 1 Team queue",
283+
"retry_agent_affinity": "prefer-different"
278284
}`)
279285
})
280286

@@ -286,9 +292,10 @@ func TestClusterQueuesService_Update(t *testing.T) {
286292
}
287293

288294
want := ClusterQueue{
289-
ID: "1374ffd0-c5ed-49a5-aebe-67ce906e68ca",
290-
Key: "development1",
291-
Description: "Development 1 Team queue",
295+
ID: "1374ffd0-c5ed-49a5-aebe-67ce906e68ca",
296+
Key: "development1",
297+
Description: "Development 1 Team queue",
298+
RetryAgentAffinity: RetryAgentAffinityPreferDifferent,
292299
}
293300

294301
if diff := cmp.Diff(got, want); diff != "" {

examples/cluster_queues/create/main.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ var (
1616
apiToken = kingpin.Flag("token", "API token").Required().String()
1717
org = kingpin.Flag("org", "Orginization slug").Required().String()
1818
clusterID = kingpin.Flag("clusterID", "Cluster UUID").Required().String()
19+
20+
key = kingpin.Flag("key", "Cluster queue key").Required().String()
21+
description = kingpin.Flag("description", "Cluster queue description").Required().String()
22+
retryAgentAffinity = kingpin.Flag("retry-agent-affinity", "Retry agent affinity").String()
1923
)
2024

2125
func main() {
@@ -27,8 +31,9 @@ func main() {
2731
}
2832

2933
clusterQueueCreate := buildkite.ClusterQueueCreate{
30-
Key: "dev1",
31-
Description: "Development 1 Cluster queue",
34+
Key: *key,
35+
Description: *description,
36+
RetryAgentAffinity: buildkite.RetryAgentAffinity(*retryAgentAffinity),
3237
}
3338

3439
queue, _, err := client.ClusterQueues.Create(context.Background(), *org, *clusterID, clusterQueueCreate)

examples/cluster_queues/update/main.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import (
1010
)
1111

1212
var (
13-
apiToken = kingpin.Flag("token", "API token").Required().String()
14-
org = kingpin.Flag("org", "Orginization slug").Required().String()
15-
clusterID = kingpin.Flag("clusterID", "Cluster UUID").Required().String()
16-
queueID = kingpin.Flag("queueID", "Cluster queue UUID").Required().String()
17-
newDescription = kingpin.Flag("description", "New description for the cluster queue").Required().String()
13+
apiToken = kingpin.Flag("token", "API token").Required().String()
14+
org = kingpin.Flag("org", "Orginization slug").Required().String()
15+
clusterID = kingpin.Flag("clusterID", "Cluster UUID").Required().String()
16+
queueID = kingpin.Flag("queueID", "Cluster queue UUID").Required().String()
17+
18+
newDescription = kingpin.Flag("description", "New description for the cluster queue").Required().String()
19+
newRetryAgentAffinity = kingpin.Flag("retry-agent-affinity", "New retry agent affinity").Required().String()
1820
)
1921

2022
func main() {
@@ -25,7 +27,10 @@ func main() {
2527
log.Fatalf("creating buildkite API client failed: %v", err)
2628
}
2729

28-
clusterQueueUpdate := buildkite.ClusterQueueUpdate{Description: *newDescription}
30+
clusterQueueUpdate := buildkite.ClusterQueueUpdate{
31+
Description: *newDescription,
32+
RetryAgentAffinity: buildkite.RetryAgentAffinity(*newRetryAgentAffinity),
33+
}
2934

3035
cq, _, err := client.ClusterQueues.Update(context.Background(), *org, *clusterID, *queueID, clusterQueueUpdate)
3136
if err != nil {

0 commit comments

Comments
 (0)