Skip to content

Commit 535da01

Browse files
Library Panel: Use OpenAPI client (#1142)
Use https://github.com/grafana/grafana-openapi-client-go instead of the manually generated client
1 parent b5eaf33 commit 535da01

File tree

2 files changed

+49
-29
lines changed

2 files changed

+49
-29
lines changed

internal/resources/grafana/resource_library_panel.go

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import (
88
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1010

11-
gapi "github.com/grafana/grafana-api-golang-client"
11+
"github.com/grafana/grafana-openapi-client-go/client/library_elements"
12+
"github.com/grafana/grafana-openapi-client-go/models"
1213
"github.com/grafana/terraform-provider-grafana/internal/common"
1314
)
1415

@@ -113,25 +114,28 @@ Manages Grafana library panels.
113114
}
114115

115116
func createLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
116-
client, _ := ClientFromNewOrgResource(meta, d)
117+
client, _ := OAPIClientFromNewOrgResource(meta, d)
117118

118119
panel := makeLibraryPanel(d)
119-
resp, err := client.NewLibraryPanel(panel)
120+
params := library_elements.NewCreateLibraryElementParams().WithBody(&panel)
121+
resp, err := client.LibraryElements.CreateLibraryElement(params, nil)
120122
if err != nil {
121123
return diag.FromErr(err)
122124
}
123-
d.SetId(MakeOrgResourceID(resp.OrgID, resp.UID))
125+
createdPanel := resp.Payload.Result
126+
d.SetId(MakeOrgResourceID(createdPanel.OrgID, createdPanel.UID))
124127
return readLibraryPanel(ctx, d, meta)
125128
}
126129

127130
func readLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
128-
client, orgID, uid := ClientFromExistingOrgResource(meta, d.Id())
131+
client, orgID, uid := OAPIClientFromExistingOrgResource(meta, d.Id())
129132

130-
panel, err := client.LibraryPanelByUID(uid)
131-
var diags diag.Diagnostics
133+
params := library_elements.NewGetLibraryElementByUIDParams().WithLibraryElementUID(uid)
134+
resp, err := client.LibraryElements.GetLibraryElementByUID(params, nil)
132135
if err, shouldReturn := common.CheckReadError("library panel", d, err); shouldReturn {
133136
return err
134137
}
138+
panel := resp.Payload.Result
135139

136140
modelJSONBytes, err := json.Marshal(panel.Model)
137141
if err != nil {
@@ -147,7 +151,7 @@ func readLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interfac
147151
d.Set("uid", panel.UID)
148152
d.Set("panel_id", panel.ID)
149153
d.Set("org_id", strconv.FormatInt(panel.OrgID, 10))
150-
d.Set("folder_id", MakeOrgResourceID(orgID, panel.Folder))
154+
d.Set("folder_id", MakeOrgResourceID(orgID, panel.FolderID))
151155
d.Set("description", panel.Description)
152156
d.Set("type", panel.Type)
153157
d.Set("name", panel.Name)
@@ -158,53 +162,67 @@ func readLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interfac
158162
d.Set("created", panel.Meta.Created.String())
159163
d.Set("updated", panel.Meta.Updated.String())
160164

161-
connections, err := client.LibraryPanelConnections(uid)
165+
getConnParams := library_elements.NewGetLibraryElementConnectionsParams().WithLibraryElementUID(uid)
166+
connResp, err := client.LibraryElements.GetLibraryElementConnections(getConnParams, nil)
162167
if err != nil {
163168
return diag.FromErr(err)
164169
}
170+
connections := connResp.Payload.Result
165171

166-
dashboardIds := make([]int64, 0, len(*connections))
167-
for _, connection := range *connections {
168-
dashboardIds = append(dashboardIds, connection.DashboardID)
172+
dashboardIds := make([]int64, 0, len(connections))
173+
for _, connection := range connections {
174+
dashboardIds = append(dashboardIds, connection.ConnectionID)
169175
}
170176
d.Set("dashboard_ids", dashboardIds)
171177

172-
return diags
178+
return nil
173179
}
174180

175181
func updateLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
176-
client, _, uid := ClientFromExistingOrgResource(meta, d.Id())
177-
panel := makeLibraryPanel(d)
182+
client, _, uid := OAPIClientFromExistingOrgResource(meta, d.Id())
183+
184+
modelJSON := d.Get("model_json").(string)
185+
panelJSON, _ := unmarshalLibraryPanelModelJSON(modelJSON)
178186

179-
resp, err := client.PatchLibraryPanel(uid, panel)
187+
_, folderIDStr := SplitOrgResourceID(d.Get("folder_id").(string))
188+
folderID, _ := strconv.ParseInt(folderIDStr, 10, 64)
189+
params := library_elements.NewUpdateLibraryElementParams().WithLibraryElementUID(uid).WithBody(&models.PatchLibraryElementCommand{
190+
Name: d.Get("name").(string),
191+
FolderID: folderID,
192+
Model: panelJSON,
193+
Kind: 1,
194+
Version: int64(d.Get("version").(int)),
195+
})
196+
resp, err := client.LibraryElements.UpdateLibraryElement(params, nil)
180197
if err != nil {
181198
return diag.FromErr(err)
182199
}
183-
d.SetId(MakeOrgResourceID(resp.OrgID, resp.UID))
200+
updatedPanel := resp.Payload.Result
201+
d.SetId(MakeOrgResourceID(updatedPanel.OrgID, updatedPanel.UID))
184202
return readLibraryPanel(ctx, d, meta)
185203
}
186204

187205
func deleteLibraryPanel(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
188-
client, _, uid := ClientFromExistingOrgResource(meta, d.Id())
189-
_, err := client.DeleteLibraryPanel(uid)
206+
client, _, uid := OAPIClientFromExistingOrgResource(meta, d.Id())
207+
params := library_elements.NewDeleteLibraryElementByUIDParams().WithLibraryElementUID(uid)
208+
_, err := client.LibraryElements.DeleteLibraryElementByUID(params, nil)
190209
return diag.FromErr(err)
191210
}
192211

193-
func makeLibraryPanel(d *schema.ResourceData) gapi.LibraryPanel {
212+
func makeLibraryPanel(d *schema.ResourceData) models.CreateLibraryElementCommand {
194213
modelJSON := d.Get("model_json").(string)
195-
panelJSON, err := unmarshalLibraryPanelModelJSON(modelJSON)
214+
panelJSON, _ := unmarshalLibraryPanelModelJSON(modelJSON)
196215

197216
_, folderIDStr := SplitOrgResourceID(d.Get("folder_id").(string))
198217
folderID, _ := strconv.ParseInt(folderIDStr, 10, 64)
199-
panel := gapi.LibraryPanel{
200-
UID: d.Get("uid").(string),
201-
Name: d.Get("name").(string),
202-
Folder: folderID,
203-
Model: panelJSON,
204-
}
205-
if err != nil {
206-
return panel
218+
panel := models.CreateLibraryElementCommand{
219+
UID: d.Get("uid").(string),
220+
Name: d.Get("name").(string),
221+
FolderID: folderID,
222+
Model: panelJSON,
223+
Kind: 1,
207224
}
225+
208226
return panel
209227
}
210228

internal/resources/grafana/resource_library_panel_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func TestAccLibraryPanel_basic(t *testing.T) {
3434
libraryPanelCheckExists.exists("grafana_library_panel.test", &panel),
3535
resource.TestCheckResourceAttr("grafana_library_panel.test", "name", "basic"),
3636
resource.TestCheckResourceAttr("grafana_library_panel.test", "version", "1"),
37+
resource.TestCheckResourceAttr("grafana_library_panel.test", "model_json", `{"description":"","title":"basic","type":"","version":34}`),
3738
),
3839
},
3940
{
@@ -44,6 +45,7 @@ func TestAccLibraryPanel_basic(t *testing.T) {
4445
libraryPanelCheckExists.exists("grafana_library_panel.test", &panel),
4546
resource.TestCheckResourceAttr("grafana_library_panel.test", "name", "updated name"),
4647
resource.TestCheckResourceAttr("grafana_library_panel.test", "version", "2"),
48+
resource.TestCheckResourceAttr("grafana_library_panel.test", "model_json", `{"description":"","id":12,"title":"updated name","type":"","version":35}`),
4749
),
4850
},
4951
{

0 commit comments

Comments
 (0)