Skip to content

Commit d1689d8

Browse files
committed
extend k6 project resource/data source with PLZs
1 parent bb95ce3 commit d1689d8

File tree

4 files changed

+222
-40
lines changed

4 files changed

+222
-40
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/grafana/grafana/apps/dashboard v0.0.0-20250424064802-2fbb2d6f5d27
1818
github.com/grafana/grafana/apps/playlist v0.0.0-20250424064802-2fbb2d6f5d27
1919
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250424064802-2fbb2d6f5d27
20-
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250416134020-d958828152cd
20+
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250715154343-32edc34ec1db
2121
github.com/grafana/machine-learning-go-client v0.8.2
2222
github.com/grafana/river v0.3.0
2323
github.com/grafana/slo-openapi-client/go/slo v0.0.0-20250218172929-ab9cae090da6

go.sum

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,6 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1
168168
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
169169
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
170170
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
171-
github.com/grafana/amixr-api-go-client v0.0.23 h1:9It5KYc79J8znWBriOezF723+1cyB/PWiS/4/RpaoVI=
172-
github.com/grafana/amixr-api-go-client v0.0.23/go.mod h1:ihgLhTVimmjASuZ06y/mQxPcYH3toAIuUVGK6flHsMU=
173171
github.com/grafana/amixr-api-go-client v0.0.24 h1:Yvj8Ir02e3GTcetd+qHmajrLC690YJxK8lppEUkrsyA=
174172
github.com/grafana/amixr-api-go-client v0.0.24/go.mod h1:ihgLhTVimmjASuZ06y/mQxPcYH3toAIuUVGK6flHsMU=
175173
github.com/grafana/authlib/claims v0.0.0-20250120084028-e3328c576437 h1:OlwbIVFcYgMjnQhpbZwRPVNrvZKTodvPMqwb8yEqVW0=
@@ -180,12 +178,8 @@ github.com/grafana/grafana-app-sdk v0.35.2-0.20250408075831-c2a87bde0849 h1:fzoG
180178
github.com/grafana/grafana-app-sdk v0.35.2-0.20250408075831-c2a87bde0849/go.mod h1:hQFtfn65wd/zTcQ/ftwOpRTr/B37MfIzPZD8jGoAx5E=
181179
github.com/grafana/grafana-app-sdk/logging v0.35.1 h1:taVpl+RoixTYl0JBJGhH+fPVmwA9wvdwdzJTZsv9buM=
182180
github.com/grafana/grafana-app-sdk/logging v0.35.1/go.mod h1:Y/bvbDhBiV/tkIle9RW49pgfSPIPSON8Q4qjx3pyqDk=
183-
github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250214150112-a52892176c26 h1:7NMB6/x0CcfH/zKQ5D+3Ffb2DbYMJBx0QdJ1GGdw8z4=
184-
github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250214150112-a52892176c26/go.mod h1:sYWkB3NhyirQJfy3wtNQ29UYjoHbRlJlYhqN1jNsC5g=
185181
github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250225152211-076f0759931d h1:CS04cUrE9ke/S5sbaH01gW4JcEy3joLKMJO5Vu3T2/4=
186182
github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250225152211-076f0759931d/go.mod h1:sYWkB3NhyirQJfy3wtNQ29UYjoHbRlJlYhqN1jNsC5g=
187-
github.com/grafana/grafana-openapi-client-go v0.0.0-20250424142317-beadd3136e10 h1:RznghhbjMUEvGJD0p9AOCjnVOTq0MiINDt98BscNcdw=
188-
github.com/grafana/grafana-openapi-client-go v0.0.0-20250424142317-beadd3136e10/go.mod h1:hiZnMmXc9KXNUlvkV2BKFsiWuIFF/fF4wGgYWEjBitI=
189183
github.com/grafana/grafana-openapi-client-go v0.0.0-20250516123951-83fcd32d7bbe h1:OdLLQKwEBVVhe9wHAncGp+Ff1N5aDl7erDIBdO9xBmA=
190184
github.com/grafana/grafana-openapi-client-go v0.0.0-20250516123951-83fcd32d7bbe/go.mod h1:hiZnMmXc9KXNUlvkV2BKFsiWuIFF/fF4wGgYWEjBitI=
191185
github.com/grafana/grafana-plugin-sdk-go v0.275.0 h1:icGmZG91lVqIo79w/pSki6N44d3IjOjTfsfQPfu4THU=
@@ -196,8 +190,8 @@ github.com/grafana/grafana/apps/playlist v0.0.0-20250424064802-2fbb2d6f5d27 h1:a
196190
github.com/grafana/grafana/apps/playlist v0.0.0-20250424064802-2fbb2d6f5d27/go.mod h1:9U44mptAJW8bkvgPgCxsnki58/nz3wKPgDayeyeFWJs=
197191
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250424064802-2fbb2d6f5d27 h1:2Q158xAoyGgPVw7BIWF5cPYTkjjdsn9c8TpNA38gKzM=
198192
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250424064802-2fbb2d6f5d27/go.mod h1:kzjpaBODMbCSS2kvAnV43Pwxoq4lOxrgw/TGKqq8oTA=
199-
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250416134020-d958828152cd h1:UOHbve+keUInhIBSqA4m7GtF2wEiKyW8f/kUt9S0+zM=
200-
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250416134020-d958828152cd/go.mod h1:nBtSyJ0NTfJvEPSrRSKc1u7Vn0mB/kttEZdClHwTqi0=
193+
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250715154343-32edc34ec1db h1:GZGkcFrQF09j8rZfxcIRql7liBf1U7pdmqSAseGintg=
194+
github.com/grafana/k6-cloud-openapi-client-go v0.0.0-20250715154343-32edc34ec1db/go.mod h1:RBPBP7qIR/K6qzQEQYESVhp/XJspiBTOyBEBCbPXrvI=
201195
github.com/grafana/machine-learning-go-client v0.8.2 h1:TvU4e+Kgg4GhwBNYTMjBUNq4tbhcxe0L8w1eo/UfV2M=
202196
github.com/grafana/machine-learning-go-client v0.8.2/go.mod h1:GQKDn10CZqG11l1Qtc6BZ5V6e54fSv5Vi8wskWn3BWs=
203197
github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8=

internal/resources/k6/data_source_k6_project.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"time"
77

8+
"github.com/hashicorp/terraform-plugin-framework/attr"
89
"github.com/hashicorp/terraform-plugin-framework/datasource"
910
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
1011
"github.com/hashicorp/terraform-plugin-framework/types"
@@ -39,6 +40,7 @@ type projectDataSourceModel struct {
3940
GrafanaFolderUID types.String `tfsdk:"grafana_folder_uid"`
4041
Created types.String `tfsdk:"created"`
4142
Updated types.String `tfsdk:"updated"`
43+
AllowedLoadZones types.List `tfsdk:"allowed_load_zones"`
4244
}
4345

4446
// projectDataSource is the data source implementation.
@@ -80,6 +82,11 @@ func (d *projectDataSource) Schema(_ context.Context, _ datasource.SchemaRequest
8082
Description: "The date when the project was last updated.",
8183
Computed: true,
8284
},
85+
"allowed_load_zones": schema.ListAttribute{
86+
Description: "List of allowed k6 load zone IDs for this project.",
87+
Computed: true,
88+
ElementType: types.StringType,
89+
},
8390
},
8491
}
8592
}
@@ -122,6 +129,27 @@ func (d *projectDataSource) Read(ctx context.Context, req datasource.ReadRequest
122129
state.Created = types.StringValue(p.GetCreated().Format(time.RFC3339Nano))
123130
state.Updated = types.StringValue(p.GetUpdated().Format(time.RFC3339Nano))
124131

132+
// Get allowed load zones
133+
allowedZones, err := d.getAllowedLoadZones(ctx, p.GetId())
134+
if err != nil {
135+
resp.Diagnostics.AddError(
136+
"Error reading allowed load zones",
137+
"Could not read allowed load zones for k6 project: "+err.Error(),
138+
)
139+
return
140+
}
141+
142+
// Convert to types.List
143+
var zoneValues []attr.Value
144+
for _, zone := range allowedZones {
145+
zoneValues = append(zoneValues, types.StringValue(zone))
146+
}
147+
state.AllowedLoadZones, diags = types.ListValue(types.StringType, zoneValues)
148+
resp.Diagnostics.Append(diags...)
149+
if resp.Diagnostics.HasError() {
150+
return
151+
}
152+
125153
diags = resp.State.Set(ctx, &state)
126154
resp.Diagnostics.Append(diags...)
127155
}
@@ -132,3 +160,23 @@ func handleGrafanaFolderUID(grafanaFolderUID k6.NullableString) types.String {
132160
}
133161
return types.StringValue(*grafanaFolderUID.Get())
134162
}
163+
164+
// getAllowedLoadZones retrieves the allowed load zones for a project
165+
// Returns k6_load_zone_ids directly from the API response
166+
func (d *projectDataSource) getAllowedLoadZones(ctx context.Context, projectID int32) ([]string, error) {
167+
ctx = context.WithValue(ctx, k6.ContextAccessToken, d.config.Token)
168+
169+
resp, _, err := d.client.LoadZonesAPI.ProjectsAllowedLoadZonesRetrieve(ctx, projectID).
170+
XStackId(d.config.StackID).
171+
Execute()
172+
if err != nil {
173+
return nil, err
174+
}
175+
176+
var k6LoadZoneIds []string
177+
for _, zone := range resp.GetValue() {
178+
k6LoadZoneIds = append(k6LoadZoneIds, zone.GetK6LoadZoneId())
179+
}
180+
181+
return k6LoadZoneIds, nil
182+
}

0 commit comments

Comments
 (0)