Skip to content

Commit 16e39f8

Browse files
Dashboard: Allow folder update
Closes #1105 Also removed the folder static examples to replace them with code. Too many variables now
1 parent 882513c commit 16e39f8

File tree

6 files changed

+80
-44
lines changed

6 files changed

+80
-44
lines changed

docs/resources/dashboard.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,17 @@ Manages Grafana dashboards.
1717
## Example Usage
1818

1919
```terraform
20-
resource "grafana_dashboard" "metrics" {
21-
config_json = file("grafana-dashboard.json")
20+
resource "grafana_folder" "test" {
21+
title = "My Folder"
22+
uid = "my-folder-uid"
23+
}
24+
25+
resource "grafana_dashboard" "test" {
26+
folder = grafana_folder.test.uid
27+
config_json = jsonencode({
28+
"title" : "My Dashboard",
29+
"uid" : "my-dashboard-uid"
30+
})
2231
}
2332
```
2433

examples/resources/grafana_dashboard/_acc_folder.tf

Lines changed: 0 additions & 15 deletions
This file was deleted.

examples/resources/grafana_dashboard/_acc_folder_uid_ref.tf

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1-
resource "grafana_dashboard" "metrics" {
2-
config_json = file("grafana-dashboard.json")
1+
resource "grafana_folder" "test" {
2+
title = "My Folder"
3+
uid = "my-folder-uid"
4+
}
5+
6+
resource "grafana_dashboard" "test" {
7+
folder = grafana_folder.test.uid
8+
config_json = jsonencode({
9+
"title" : "My Dashboard",
10+
"uid" : "my-dashboard-uid"
11+
})
312
}

internal/resources/grafana/resource_dashboard.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ Manages Grafana dashboards.
6565
"folder": {
6666
Type: schema.TypeString,
6767
Optional: true,
68-
ForceNew: true,
6968
Description: "The id or UID of the folder to save the dashboard in.",
7069
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
7170
_, old = SplitOrgResourceID(old)

internal/resources/grafana/resource_dashboard_test.go

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ func TestAccDashboard_computed_config(t *testing.T) {
163163
func TestAccDashboard_folder(t *testing.T) {
164164
testutils.CheckOSSTestsEnabled(t)
165165

166+
uid := acctest.RandString(10)
167+
166168
var dashboard gapi.Dashboard
167169
var folder goapi.Folder
168170

@@ -171,13 +173,25 @@ func TestAccDashboard_folder(t *testing.T) {
171173
CheckDestroy: testAccDashboardFolderCheckDestroy(&dashboard, &folder),
172174
Steps: []resource.TestStep{
173175
{
174-
Config: testutils.TestAccExample(t, "resources/grafana_dashboard/_acc_folder.tf"),
176+
Config: testAccDashboardFolder(uid, "grafana_folder.test_folder1.id"),
177+
Check: resource.ComposeTestCheckFunc(
178+
testAccDashboardCheckExists("grafana_dashboard.test_folder", &dashboard),
179+
testAccFolderCheckExists("grafana_folder.test_folder1", &folder),
180+
testAccDashboardCheckExistsInFolder(&dashboard, &folder),
181+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:"+uid), // <org id>:<uid>
182+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", uid),
183+
resource.TestMatchResourceAttr("grafana_dashboard.test_folder", "folder", common.IDRegexp),
184+
),
185+
},
186+
// Update folder
187+
{
188+
Config: testAccDashboardFolder(uid, "grafana_folder.test_folder2.id"),
175189
Check: resource.ComposeTestCheckFunc(
176190
testAccDashboardCheckExists("grafana_dashboard.test_folder", &dashboard),
177-
testAccFolderCheckExists("grafana_folder.test_folder", &folder),
191+
testAccFolderCheckExists("grafana_folder.test_folder2", &folder),
178192
testAccDashboardCheckExistsInFolder(&dashboard, &folder),
179-
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:folder-dashboard-test-ref-with-id"), // <org id>:<uid>
180-
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", "folder-dashboard-test-ref-with-id"),
193+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:"+uid), // <org id>:<uid>
194+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", uid),
181195
resource.TestMatchResourceAttr("grafana_dashboard.test_folder", "folder", common.IDRegexp),
182196
),
183197
},
@@ -187,7 +201,8 @@ func TestAccDashboard_folder(t *testing.T) {
187201

188202
func TestAccDashboard_folder_uid(t *testing.T) {
189203
testutils.CheckOSSTestsEnabled(t)
190-
testutils.CheckOSSTestsSemver(t, ">=8.0.0") // UID in folders were added in v8
204+
205+
uid := acctest.RandString(10)
191206

192207
var dashboard gapi.Dashboard
193208
var folder goapi.Folder
@@ -197,14 +212,26 @@ func TestAccDashboard_folder_uid(t *testing.T) {
197212
CheckDestroy: testAccDashboardFolderCheckDestroy(&dashboard, &folder),
198213
Steps: []resource.TestStep{
199214
{
200-
Config: testutils.TestAccExample(t, "resources/grafana_dashboard/_acc_folder_uid_ref.tf"),
215+
Config: testAccDashboardFolder(uid, "grafana_folder.test_folder1.uid"),
216+
Check: resource.ComposeTestCheckFunc(
217+
testAccFolderCheckExists("grafana_folder.test_folder1", &folder),
218+
testAccDashboardCheckExists("grafana_dashboard.test_folder", &dashboard),
219+
testAccDashboardCheckExistsInFolder(&dashboard, &folder),
220+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:"+uid), // <org id>:<uid>
221+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", uid),
222+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "folder", uid+"-1"),
223+
),
224+
},
225+
// Update folder
226+
{
227+
Config: testAccDashboardFolder(uid, "grafana_folder.test_folder2.uid"),
201228
Check: resource.ComposeTestCheckFunc(
202-
testAccFolderCheckExists("grafana_folder.test_folder", &folder),
229+
testAccFolderCheckExists("grafana_folder.test_folder2", &folder),
203230
testAccDashboardCheckExists("grafana_dashboard.test_folder", &dashboard),
204231
testAccDashboardCheckExistsInFolder(&dashboard, &folder),
205-
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:folder-dashboard-test-ref-with-uid"), // <org id>:<uid>
206-
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", "folder-dashboard-test-ref-with-uid"),
207-
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "folder", "folder-dashboard-uid-test"),
232+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "id", "1:"+uid), // <org id>:<uid>
233+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "uid", uid),
234+
resource.TestCheckResourceAttr("grafana_dashboard.test_folder", "folder", uid+"-2"),
208235
),
209236
},
210237
{
@@ -398,6 +425,27 @@ func Test_NormalizeDashboardConfigJSON(t *testing.T) {
398425
}
399426
}
400427

428+
func testAccDashboardFolder(uid string, folderRef string) string {
429+
return fmt.Sprintf(`
430+
resource "grafana_folder" "test_folder1" {
431+
title = "%[1]s-1"
432+
uid = "%[1]s-1"
433+
}
434+
435+
resource "grafana_folder" "test_folder2" {
436+
title = "%[1]s-2"
437+
uid = "%[1]s-2"
438+
}
439+
440+
resource "grafana_dashboard" "test_folder" {
441+
folder = %[2]s
442+
config_json = jsonencode({
443+
"title" : "%[1]s",
444+
"uid" : "%[1]s"
445+
})
446+
}`, uid, folderRef)
447+
}
448+
401449
func testAccDashboardInOrganization(orgName string) string {
402450
return fmt.Sprintf(`
403451
resource "grafana_organization" "test" {

0 commit comments

Comments
 (0)