Skip to content

Commit 3e3be17

Browse files
Config Generation: More resources! (#1591)
1 parent 341efcb commit 3e3be17

File tree

7 files changed

+127
-7
lines changed

7 files changed

+127
-7
lines changed

internal/resources/grafana/resource_annotation.go

+25-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"time"
77

8+
goapi "github.com/grafana/grafana-openapi-client-go/client"
89
"github.com/grafana/grafana-openapi-client-go/client/annotations"
910
"github.com/grafana/grafana-openapi-client-go/models"
1011
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
@@ -82,7 +83,30 @@ func resourceAnnotation() *common.Resource {
8283
"grafana_annotation",
8384
orgResourceIDInt("id"),
8485
schema,
85-
)
86+
).WithLister(listerFunction(listAnnotations))
87+
}
88+
89+
func listAnnotations(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) {
90+
orgIDs, err := data.OrgIDs(client)
91+
if err != nil {
92+
return nil, err
93+
}
94+
95+
var ids []string
96+
for _, orgID := range orgIDs {
97+
client = client.Clone().WithOrgID(orgID)
98+
99+
resp, err := client.Annotations.GetAnnotations(annotations.NewGetAnnotationsParams())
100+
if err != nil {
101+
return nil, err
102+
}
103+
104+
for _, annotation := range resp.Payload {
105+
ids = append(ids, MakeOrgResourceID(orgID, annotation.ID))
106+
}
107+
}
108+
109+
return ids, nil
86110
}
87111

88112
func CreateAnnotation(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

internal/resources/grafana/resource_library_panel.go

+31-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ import (
88
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1010

11+
goapi "github.com/grafana/grafana-openapi-client-go/client"
12+
"github.com/grafana/grafana-openapi-client-go/client/library_elements"
1113
"github.com/grafana/grafana-openapi-client-go/models"
1214
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
1315
)
1416

17+
const libraryPanelKind int64 = 1
18+
1519
func resourceLibraryPanel() *common.Resource {
1620
schema := &schema.Resource{
1721

@@ -111,7 +115,31 @@ Manages Grafana library panels.
111115
"grafana_library_panel",
112116
orgResourceIDString("uid"),
113117
schema,
114-
)
118+
).WithLister(listerFunction(listLibraryPanels))
119+
}
120+
121+
func listLibraryPanels(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) {
122+
orgIDs, err := data.OrgIDs(client)
123+
if err != nil {
124+
return nil, err
125+
}
126+
127+
var ids []string
128+
for _, orgID := range orgIDs {
129+
client = client.Clone().WithOrgID(orgID)
130+
131+
params := library_elements.NewGetLibraryElementsParams().WithKind(common.Ref(libraryPanelKind))
132+
resp, err := client.LibraryElements.GetLibraryElements(params)
133+
if err != nil {
134+
return nil, err
135+
}
136+
137+
for _, panel := range resp.Payload.Result.Elements {
138+
ids = append(ids, MakeOrgResourceID(orgID, panel.UID))
139+
}
140+
}
141+
142+
return ids, nil
115143
}
116144

117145
func createLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
@@ -184,7 +212,7 @@ func updateLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interf
184212
body := models.PatchLibraryElementCommand{
185213
Name: d.Get("name").(string),
186214
Model: panelJSON,
187-
Kind: 1,
215+
Kind: libraryPanelKind,
188216
Version: int64(d.Get("version").(int)),
189217
}
190218
_, body.FolderUID = SplitOrgResourceID(d.Get("folder_uid").(string))
@@ -213,7 +241,7 @@ func makeLibraryPanel(d *schema.ResourceData) models.CreateLibraryElementCommand
213241
UID: d.Get("uid").(string),
214242
Name: d.Get("name").(string),
215243
Model: panelJSON,
216-
Kind: 1,
244+
Kind: libraryPanelKind,
217245
}
218246
_, panel.FolderUID = SplitOrgResourceID(d.Get("folder_uid").(string))
219247

internal/resources/grafana/resource_organization_preferences.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"strconv"
66

7+
goapi "github.com/grafana/grafana-openapi-client-go/client"
78
"github.com/grafana/grafana-openapi-client-go/models"
89
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -60,7 +61,13 @@ func resourceOrganizationPreferences() *common.Resource {
6061
"grafana_organization_preferences",
6162
common.NewResourceID(common.IntIDField("orgID")),
6263
schema,
63-
)
64+
).WithLister(listerFunction(listOrganizationPreferences))
65+
}
66+
67+
func listOrganizationPreferences(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) {
68+
orgIDs, err := listOrganizations(ctx, client, data)
69+
orgIDs = append(orgIDs, "1") // Default org. We can set preferences for it even if it can't be managed otherwise.
70+
return orgIDs, err
6471
}
6572

6673
func CreateOrganizationPreferences(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

internal/resources/grafana/resource_playlist.go

+26-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"sort"
77
"strconv"
88

9+
goapi "github.com/grafana/grafana-openapi-client-go/client"
10+
"github.com/grafana/grafana-openapi-client-go/client/playlists"
911
"github.com/grafana/grafana-openapi-client-go/models"
1012
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
1113
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -74,7 +76,30 @@ func resourcePlaylist() *common.Resource {
7476
"grafana_playlist",
7577
orgResourceIDString("uid"),
7678
schema,
77-
)
79+
).WithLister(listerFunction(listPlaylists))
80+
}
81+
82+
func listPlaylists(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) {
83+
orgIDs, err := data.OrgIDs(client)
84+
if err != nil {
85+
return nil, err
86+
}
87+
88+
var ids []string
89+
for _, orgID := range orgIDs {
90+
client = client.Clone().WithOrgID(orgID)
91+
92+
resp, err := client.Playlists.SearchPlaylists(playlists.NewSearchPlaylistsParams())
93+
if err != nil {
94+
return nil, err
95+
}
96+
97+
for _, playlist := range resp.Payload {
98+
ids = append(ids, MakeOrgResourceID(orgID, playlist.UID))
99+
}
100+
}
101+
102+
return ids, nil
78103
}
79104

80105
func CreatePlaylist(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

internal/resources/grafana/resource_report.go

+28-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
_ "time/tzdata"
1212

1313
"github.com/go-openapi/strfmt"
14+
goapi "github.com/grafana/grafana-openapi-client-go/client"
1415
"github.com/grafana/grafana-openapi-client-go/models"
1516
"github.com/hashicorp/go-cty/cty"
1617
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -247,7 +248,33 @@ func resourceReport() *common.Resource {
247248
"grafana_report",
248249
orgResourceIDInt("id"),
249250
schema,
250-
)
251+
).WithLister(listerFunction(listReports))
252+
}
253+
254+
func listReports(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) {
255+
orgIDs, err := data.OrgIDs(client)
256+
if err != nil {
257+
return nil, err
258+
}
259+
260+
var ids []string
261+
for _, orgID := range orgIDs {
262+
client = client.Clone().WithOrgID(orgID)
263+
264+
resp, err := client.Reports.GetReports()
265+
if common.IsNotFoundError(err) {
266+
return nil, nil // Reports are not available in the current Grafana version (Probably OSS)
267+
}
268+
if err != nil {
269+
return nil, err
270+
}
271+
272+
for _, report := range resp.Payload {
273+
ids = append(ids, MakeOrgResourceID(orgID, report.ID))
274+
}
275+
}
276+
277+
return ids, nil
251278
}
252279

253280
func CreateReport(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

pkg/generate/testdata/generate/dashboard-expected/imports.tf

+5
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ import {
1212
to = grafana_notification_policy._1_policy
1313
id = "1:policy"
1414
}
15+
16+
import {
17+
to = grafana_organization_preferences._1
18+
id = "1"
19+
}

pkg/generate/testdata/generate/dashboard-expected/resources.tf

+4
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ resource "grafana_notification_policy" "_1_policy" {
2222
disable_provenance = true
2323
group_by = ["grafana_folder", "alertname"]
2424
}
25+
26+
# __generated__ by Terraform from "1"
27+
resource "grafana_organization_preferences" "_1" {
28+
}

0 commit comments

Comments
 (0)