Skip to content

Commit f2fd705

Browse files
authored
Remove deleted k6 from the state (#2173)
1 parent 2b3b8be commit f2fd705

12 files changed

+133
-43
lines changed

docs/data-sources/k6_projects.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,12 @@ resource "grafana_k6_project" "project" {
1717
name = "Terraform Test Project"
1818
}
1919
20-
resource "grafana_k6_project" "project_2" {
21-
name = "Terraform Test Project"
22-
}
23-
2420
data "grafana_k6_projects" "from_name" {
2521
name = "Terraform Test Project"
2622
2723
depends_on = [
2824
grafana_k6_project.project,
29-
grafana_k6_project.project_2
3025
]
31-
3226
}
3327
```
3428

examples/data-sources/grafana_k6_projects/data-source.tf

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,12 @@ resource "grafana_k6_project" "project" {
22
name = "Terraform Test Project"
33
}
44

5-
resource "grafana_k6_project" "project_2" {
6-
name = "Terraform Test Project"
7-
}
8-
95
data "grafana_k6_projects" "from_name" {
106
name = "Terraform Test Project"
117

128
depends_on = [
139
grafana_k6_project.project,
14-
grafana_k6_project.project_2
1510
]
16-
1711
}
1812

1913

internal/resources/k6/data_source_k6_loadtest_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package k6_test
33
import (
44
"testing"
55

6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
78

89
"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
@@ -11,11 +12,15 @@ import (
1112
func TestAccDataSourceK6LoadTest_basic(t *testing.T) {
1213
testutils.CheckCloudInstanceTestsEnabled(t)
1314

15+
projectName := "Terraform Load Test Project " + acctest.RandString(8)
16+
1417
resource.ParallelTest(t, resource.TestCase{
1518
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
1619
Steps: []resource.TestStep{
1720
{
18-
Config: testutils.TestAccExample(t, "data-sources/grafana_k6_load_test/data-source.tf"),
21+
Config: testutils.TestAccExampleWithReplace(t, "data-sources/grafana_k6_load_test/data-source.tf", map[string]string{
22+
"Terraform Load Test Project": projectName,
23+
}),
1924
Check: resource.ComposeTestCheckFunc(
2025
resource.TestCheckResourceAttrSet("data.grafana_k6_load_test.from_id", "id"),
2126
resource.TestCheckResourceAttr("data.grafana_k6_load_test.from_id", "name", "Terraform Test Load Test"),

internal/resources/k6/data_source_k6_loadtests_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"testing"
77

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
910

1011
"github.com/grafana/k6-cloud-openapi-client-go/k6"
@@ -17,6 +18,8 @@ func TestAccDataSourceK6LoadTests_basic(t *testing.T) {
1718

1819
var project k6.ProjectApiModel
1920

21+
projectName := "Terraform Load Test Project " + acctest.RandString(8)
22+
2023
checkProjectIDMatch := func(value string) error {
2124
if value != strconv.Itoa(int(project.GetId())) {
2225
return fmt.Errorf("project_id does not match the expected value: %s", value)
@@ -28,7 +31,9 @@ func TestAccDataSourceK6LoadTests_basic(t *testing.T) {
2831
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
2932
Steps: []resource.TestStep{
3033
{
31-
Config: testutils.TestAccExample(t, "data-sources/grafana_k6_load_tests/data-source.tf"),
34+
Config: testutils.TestAccExampleWithReplace(t, "data-sources/grafana_k6_load_tests/data-source.tf", map[string]string{
35+
"Terraform Load Test Project": projectName,
36+
}),
3237
Check: resource.ComposeTestCheckFunc(
3338
projectCheckExists.exists("grafana_k6_project.load_test_project", &project),
3439
// from_project_id.0

internal/resources/k6/data_source_k6_project_limits_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package k6_test
33
import (
44
"testing"
55

6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
78

89
"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
@@ -11,11 +12,15 @@ import (
1112
func TestAccDataSourceK6ProjectLimits_basic(t *testing.T) {
1213
testutils.CheckCloudInstanceTestsEnabled(t)
1314

15+
projectName := "Terraform Project Test Limits " + acctest.RandString(8)
16+
1417
resource.ParallelTest(t, resource.TestCase{
1518
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
1619
Steps: []resource.TestStep{
1720
{
18-
Config: testutils.TestAccExample(t, "data-sources/grafana_k6_project_limits/data-source.tf"),
21+
Config: testutils.TestAccExampleWithReplace(t, "data-sources/grafana_k6_project_limits/data-source.tf", map[string]string{
22+
"Terraform Project Test Limits": projectName,
23+
}),
1924
Check: resource.ComposeTestCheckFunc(
2025
// project_id
2126
resource.TestCheckResourceAttr("data.grafana_k6_project_limits.from_project_id", "vuh_max_per_month", "10000"),

internal/resources/k6/data_source_k6_project_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package k6_test
33
import (
44
"testing"
55

6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
78

89
"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
@@ -11,14 +12,18 @@ import (
1112
func TestAccDataSourceK6Project_basic(t *testing.T) {
1213
testutils.CheckCloudInstanceTestsEnabled(t)
1314

15+
projectName := "Terraform Test Project " + acctest.RandString(8)
16+
1417
resource.ParallelTest(t, resource.TestCase{
1518
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
1619
Steps: []resource.TestStep{
1720
{
18-
Config: testutils.TestAccExample(t, "data-sources/grafana_k6_project/data-source.tf"),
21+
Config: testutils.TestAccExampleWithReplace(t, "data-sources/grafana_k6_project/data-source.tf", map[string]string{
22+
"Terraform Test Project": projectName,
23+
}),
1924
Check: resource.ComposeTestCheckFunc(
2025
resource.TestCheckResourceAttrSet("data.grafana_k6_project.from_id", "id"),
21-
resource.TestCheckResourceAttr("data.grafana_k6_project.from_id", "name", "Terraform Test Project"),
26+
resource.TestCheckResourceAttr("data.grafana_k6_project.from_id", "name", projectName),
2227
resource.TestCheckResourceAttrSet("data.grafana_k6_project.from_id", "is_default"),
2328
resource.TestCheckResourceAttrSet("data.grafana_k6_project.from_id", "grafana_folder_uid"),
2429
resource.TestCheckResourceAttrSet("data.grafana_k6_project.from_id", "created"),

internal/resources/k6/data_source_k6_projects_test.go

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package k6_test
33
import (
44
"testing"
55

6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
78

89
"github.com/grafana/k6-cloud-openapi-client-go/k6"
@@ -13,33 +14,25 @@ import (
1314
func TestAccDataSourceK6Projects_basic(t *testing.T) {
1415
testutils.CheckCloudInstanceTestsEnabled(t)
1516

16-
var (
17-
project k6.ProjectApiModel
18-
project2 k6.ProjectApiModel
19-
)
17+
var project k6.ProjectApiModel
18+
19+
projectName := "Terraform Test Project " + acctest.RandString(8)
2020

2121
resource.ParallelTest(t, resource.TestCase{
2222
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
2323
Steps: []resource.TestStep{
2424
{
25-
Config: testutils.TestAccExample(t, "data-sources/grafana_k6_projects/data-source.tf"),
25+
Config: testutils.TestAccExampleWithReplace(t, "data-sources/grafana_k6_projects/data-source.tf", map[string]string{
26+
"Terraform Test Project": projectName,
27+
}),
2628
Check: resource.ComposeTestCheckFunc(
2729
projectCheckExists.exists("grafana_k6_project.project", &project),
28-
projectCheckExists.exists("grafana_k6_project.project_2", &project2),
29-
// from_name.0
3030
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.0.id"),
31-
resource.TestCheckResourceAttr("data.grafana_k6_projects.from_name", "projects.0.name", "Terraform Test Project"),
31+
resource.TestCheckResourceAttr("data.grafana_k6_projects.from_name", "projects.0.name", projectName),
3232
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.0.is_default"),
3333
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.0.grafana_folder_uid"),
3434
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.0.created"),
3535
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.0.updated"),
36-
// from_name.1
37-
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.1.id"),
38-
resource.TestCheckResourceAttr("data.grafana_k6_projects.from_name", "projects.1.name", "Terraform Test Project"),
39-
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.1.is_default"),
40-
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.1.grafana_folder_uid"),
41-
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.1.created"),
42-
resource.TestCheckResourceAttrSet("data.grafana_k6_projects.from_name", "projects.1.updated"),
4336
),
4437
},
4538
},

internal/resources/k6/resource_loadtest.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package k6
33
import (
44
"context"
55
"io"
6+
"net/http"
67
"strconv"
78
"strings"
89
"time"
@@ -153,8 +154,12 @@ func (r *loadTestResource) Read(ctx context.Context, req resource.ReadRequest, r
153154
k6Req := r.client.LoadTestsAPI.LoadTestsRetrieve(ctx, state.ID.ValueInt32()).
154155
XStackId(r.config.StackID)
155156

156-
lt, _, err := k6Req.Execute()
157-
if err != nil {
157+
lt, httpResp, err := k6Req.Execute()
158+
159+
if httpResp != nil && httpResp.StatusCode == http.StatusNotFound {
160+
resp.State.RemoveResource(ctx)
161+
return
162+
} else if err != nil {
158163
resp.Diagnostics.AddError(
159164
"Error reading k6 load test",
160165
"Could not read k6 load test with id "+strconv.Itoa(int(state.ID.ValueInt32()))+": "+err.Error(),
@@ -166,8 +171,12 @@ func (r *loadTestResource) Read(ctx context.Context, req resource.ReadRequest, r
166171
scriptReq := r.client.LoadTestsAPI.LoadTestsScriptRetrieve(ctx, state.ID.ValueInt32()).
167172
XStackId(r.config.StackID)
168173

169-
script, _, err := scriptReq.Execute()
170-
if err != nil {
174+
script, httpResp, err := scriptReq.Execute()
175+
176+
if httpResp != nil && httpResp.StatusCode == http.StatusNotFound {
177+
// 404 response from the script endpoint for an existing test means that the script is undefined
178+
script = ""
179+
} else if err != nil {
171180
resp.Diagnostics.AddError(
172181
"Error reading k6 load test script",
173182
"Could not read k6 load test script with id "+strconv.Itoa(int(state.ID.ValueInt32()))+": "+err.Error(),

internal/resources/k6/resource_loadtest_test.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"testing"
88
"time"
99

10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1213

@@ -24,6 +25,8 @@ func TestAccLoadTest_basic(t *testing.T) {
2425
loadTest k6.LoadTestApiModel
2526
)
2627

28+
projectName := "Terraform Load Test Project " + acctest.RandString(8)
29+
2730
resource.ParallelTest(t, resource.TestCase{
2831
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
2932
CheckDestroy: resource.ComposeTestCheckFunc(
@@ -32,7 +35,9 @@ func TestAccLoadTest_basic(t *testing.T) {
3235
),
3336
Steps: []resource.TestStep{
3437
{
35-
Config: testutils.TestAccExample(t, "resources/grafana_k6_load_test/resource.tf"),
38+
Config: testutils.TestAccExampleWithReplace(t, "resources/grafana_k6_load_test/resource.tf", map[string]string{
39+
"Terraform Load Test Project": projectName,
40+
}),
3641
Check: resource.ComposeTestCheckFunc(
3742
projectCheckExists.exists("grafana_k6_project.load_test_project", &project),
3843
loadTestCheckExists.exists("grafana_k6_load_test.test_load_test", &loadTest),
@@ -47,9 +52,38 @@ func TestAccLoadTest_basic(t *testing.T) {
4752
ImportState: true,
4853
ImportStateVerify: true,
4954
},
55+
// Delete the load test and check that TF sees a difference
56+
{
57+
PreConfig: func() {
58+
commonClient := testutils.Provider.Meta().(*common.Client)
59+
client := commonClient.K6APIClient
60+
config := commonClient.K6APIConfig
61+
62+
ctx := context.WithValue(context.Background(), k6.ContextAccessToken, config.Token)
63+
deleteReq := client.LoadTestsAPI.LoadTestsDestroy(ctx, loadTest.Id).XStackId(config.StackID)
64+
65+
_, err := deleteReq.Execute()
66+
if err != nil {
67+
t.Fatalf("error deleting load test: %s", err)
68+
}
69+
},
70+
RefreshState: true,
71+
ExpectNonEmptyPlan: true,
72+
},
73+
// Recreate the test
74+
{
75+
Config: testutils.TestAccExampleWithReplace(t, "resources/grafana_k6_load_test/resource.tf", map[string]string{
76+
"Terraform Load Test Project": projectName,
77+
}),
78+
Check: resource.ComposeAggregateTestCheckFunc(
79+
loadTestCheckExists.exists("grafana_k6_load_test.test_load_test", &loadTest),
80+
resource.TestCheckResourceAttr("grafana_k6_load_test.test_load_test", "name", "Terraform Test Load Test"),
81+
),
82+
},
5083
// Change the name and script of a load test. This shouldn't recreate the load test.
5184
{
5285
Config: testutils.TestAccExampleWithReplace(t, "resources/grafana_k6_load_test/resource.tf", map[string]string{
86+
"Terraform Load Test Project": projectName,
5387
"Terraform Test Load Test": "Terraform Test Load Test Updated",
5488
"console.log('Hello from k6!')": "console.log('Hello from updated k6!')",
5589
}),

internal/resources/k6/resource_project.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package k6
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67
"time"
78

@@ -147,7 +148,13 @@ func (r *projectResource) Read(ctx context.Context, req resource.ReadRequest, re
147148
k6Req := r.client.ProjectsAPI.ProjectsRetrieve(ctx, state.ID.ValueInt32()).
148149
XStackId(r.config.StackID)
149150

150-
p, _, err := k6Req.Execute()
151+
p, httpResp, err := k6Req.Execute()
152+
153+
if httpResp != nil && httpResp.StatusCode == http.StatusNotFound {
154+
resp.State.RemoveResource(ctx)
155+
return
156+
}
157+
151158
if err != nil {
152159
resp.Diagnostics.AddError(
153160
"Error reading k6 project",

0 commit comments

Comments
 (0)