Skip to content

Commit 791c195

Browse files
Self-contained ML package (#1397)
Just like #1393 and #1396 - Makes the resource functions private (exposed via a single map attribute) rather than each resource individually - Puts the client validation in the ML package
1 parent 836dd73 commit 791c195

File tree

5 files changed

+62
-38
lines changed

5 files changed

+62
-38
lines changed

internal/provider/legacy_provider.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,6 @@ func Provider(version string) *schema.Provider {
7070
"grafana_sso_settings": grafana.ResourceSSOSettings(),
7171
"grafana_user": grafana.ResourceUser(),
7272

73-
// Machine Learning
74-
"grafana_machine_learning_job": machinelearning.ResourceJob(),
75-
"grafana_machine_learning_holiday": machinelearning.ResourceHoliday(),
76-
"grafana_machine_learning_outlier_detector": machinelearning.ResourceOutlierDetector(),
77-
7873
// SLO
7974
"grafana_slo": slo.ResourceSlo(),
8075
})
@@ -277,13 +272,15 @@ func Provider(version string) *schema.Provider {
277272

278273
ResourcesMap: mergeResourceMaps(
279274
grafanaClientResources,
275+
machinelearning.ResourcesMap,
280276
smClientResources,
281277
onCallClientResources,
282278
cloudClientResources,
283279
),
284280

285281
DataSourcesMap: mergeResourceMaps(
286282
grafanaClientDatasources,
283+
machinelearning.DatasourcesMap,
287284
smClientDatasources,
288285
onCallClientDatasources,
289286
cloudClientDatasources,

internal/resources/machinelearning/resource_holiday.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/grafana/terraform-provider-grafana/internal/common"
1414
)
1515

16-
func ResourceHoliday() *schema.Resource {
16+
func resourceHoliday() *schema.Resource {
1717
return &schema.Resource{
1818

1919
Description: `
@@ -30,10 +30,10 @@ resource "grafana_machine_learning_job" "test_job" {
3030
}
3131
` + "```",
3232

33-
CreateContext: ResourceHolidayCreate,
34-
ReadContext: ResourceHolidayRead,
35-
UpdateContext: ResourceHolidayUpdate,
36-
DeleteContext: ResourceHolidayDelete,
33+
CreateContext: checkClient(resourceHolidayCreate),
34+
ReadContext: checkClient(resourceHolidayRead),
35+
UpdateContext: checkClient(resourceHolidayUpdate),
36+
DeleteContext: checkClient(resourceHolidayDelete),
3737
Importer: &schema.ResourceImporter{
3838
StateContext: schema.ImportStatePassthroughContext,
3939
},
@@ -103,7 +103,7 @@ resource "grafana_machine_learning_job" "test_job" {
103103
}
104104
}
105105

106-
func ResourceHolidayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
106+
func resourceHolidayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
107107
c := meta.(*common.Client).MLAPI
108108
holiday, err := makeMLHoliday(d)
109109
if err != nil {
@@ -114,10 +114,10 @@ func ResourceHolidayCreate(ctx context.Context, d *schema.ResourceData, meta int
114114
return diag.FromErr(err)
115115
}
116116
d.SetId(holiday.ID)
117-
return ResourceHolidayRead(ctx, d, meta)
117+
return resourceHolidayRead(ctx, d, meta)
118118
}
119119

120-
func ResourceHolidayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
120+
func resourceHolidayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
121121
c := meta.(*common.Client).MLAPI
122122
holiday, err := c.Holiday(ctx, d.Id())
123123
if err, shouldReturn := common.CheckReadError("holiday", d, err); shouldReturn {
@@ -143,7 +143,7 @@ func ResourceHolidayRead(ctx context.Context, d *schema.ResourceData, meta inter
143143
return nil
144144
}
145145

146-
func ResourceHolidayUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
146+
func resourceHolidayUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
147147
c := meta.(*common.Client).MLAPI
148148
job, err := makeMLHoliday(d)
149149
if err != nil {
@@ -153,10 +153,10 @@ func ResourceHolidayUpdate(ctx context.Context, d *schema.ResourceData, meta int
153153
if err != nil {
154154
return diag.FromErr(err)
155155
}
156-
return ResourceHolidayRead(ctx, d, meta)
156+
return resourceHolidayRead(ctx, d, meta)
157157
}
158158

159-
func ResourceHolidayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
159+
func resourceHolidayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
160160
c := meta.(*common.Client).MLAPI
161161
err := c.DeleteHoliday(ctx, d.Id())
162162
if err != nil {

internal/resources/machinelearning/resource_job.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ import (
1212
"github.com/grafana/terraform-provider-grafana/internal/common"
1313
)
1414

15-
func ResourceJob() *schema.Resource {
15+
func resourceJob() *schema.Resource {
1616
return &schema.Resource{
1717

1818
Description: `
1919
A job defines the queries and model parameters for a machine learning task.
2020
`,
2121

22-
CreateContext: ResourceJobCreate,
23-
ReadContext: ResourceJobRead,
24-
UpdateContext: ResourceJobUpdate,
25-
DeleteContext: ResourceJobDelete,
22+
CreateContext: checkClient(resourceJobCreate),
23+
ReadContext: checkClient(resourceJobRead),
24+
UpdateContext: checkClient(resourceJobUpdate),
25+
DeleteContext: checkClient(resourceJobDelete),
2626
Importer: &schema.ResourceImporter{
2727
StateContext: schema.ImportStatePassthroughContext,
2828
},
@@ -104,7 +104,7 @@ A job defines the queries and model parameters for a machine learning task.
104104
}
105105
}
106106

107-
func ResourceJobCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
107+
func resourceJobCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
108108
c := meta.(*common.Client).MLAPI
109109
job, err := makeMLJob(d, meta)
110110
if err != nil {
@@ -115,10 +115,10 @@ func ResourceJobCreate(ctx context.Context, d *schema.ResourceData, meta interfa
115115
return diag.FromErr(err)
116116
}
117117
d.SetId(job.ID)
118-
return ResourceJobRead(ctx, d, meta)
118+
return resourceJobRead(ctx, d, meta)
119119
}
120120

121-
func ResourceJobRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
121+
func resourceJobRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
122122
c := meta.(*common.Client).MLAPI
123123
job, err := c.Job(ctx, d.Id())
124124
if err, shouldReturn := common.CheckReadError("job", d, err); shouldReturn {
@@ -149,7 +149,7 @@ func ResourceJobRead(ctx context.Context, d *schema.ResourceData, meta interface
149149
return nil
150150
}
151151

152-
func ResourceJobUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
152+
func resourceJobUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
153153
c := meta.(*common.Client).MLAPI
154154
job, err := makeMLJob(d, meta)
155155
if err != nil {
@@ -159,10 +159,10 @@ func ResourceJobUpdate(ctx context.Context, d *schema.ResourceData, meta interfa
159159
if err != nil {
160160
return diag.FromErr(err)
161161
}
162-
return ResourceJobRead(ctx, d, meta)
162+
return resourceJobRead(ctx, d, meta)
163163
}
164164

165-
func ResourceJobDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
165+
func resourceJobDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
166166
c := meta.(*common.Client).MLAPI
167167
err := c.DeleteJob(ctx, d.Id())
168168
if err != nil {

internal/resources/machinelearning/resource_outlier_detector.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1313
)
1414

15-
func ResourceOutlierDetector() *schema.Resource {
15+
func resourceOutlierDetector() *schema.Resource {
1616
return &schema.Resource{
1717

1818
Description: `
@@ -23,10 +23,10 @@ The normal band is configured by choice of algorithm, its sensitivity and other
2323
Visit https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for more details.
2424
`,
2525

26-
CreateContext: ResourceOutlierCreate,
27-
ReadContext: ResourceOutlierRead,
28-
UpdateContext: ResourceOutlierUpdate,
29-
DeleteContext: ResourceOutlierDelete,
26+
CreateContext: checkClient(resourceOutlierCreate),
27+
ReadContext: checkClient(resourceOutlierRead),
28+
UpdateContext: checkClient(resourceOutlierUpdate),
29+
DeleteContext: checkClient(resourceOutlierDelete),
3030
Importer: &schema.ResourceImporter{
3131
StateContext: schema.ImportStatePassthroughContext,
3232
},
@@ -122,7 +122,7 @@ Visit https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/
122122
}
123123
}
124124

125-
func ResourceOutlierCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
125+
func resourceOutlierCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
126126
c := meta.(*common.Client).MLAPI
127127
outlier, err := makeMLOutlier(d, meta)
128128
if err != nil {
@@ -133,10 +133,10 @@ func ResourceOutlierCreate(ctx context.Context, d *schema.ResourceData, meta int
133133
return diag.FromErr(err)
134134
}
135135
d.SetId(outlier.ID)
136-
return ResourceOutlierRead(ctx, d, meta)
136+
return resourceOutlierRead(ctx, d, meta)
137137
}
138138

139-
func ResourceOutlierRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
139+
func resourceOutlierRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
140140
c := meta.(*common.Client).MLAPI
141141
outlier, err := c.OutlierDetector(ctx, d.Id())
142142
if err, shouldReturn := common.CheckReadError("outlier detector", d, err); shouldReturn {
@@ -164,7 +164,7 @@ func ResourceOutlierRead(ctx context.Context, d *schema.ResourceData, meta inter
164164
return nil
165165
}
166166

167-
func ResourceOutlierUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
167+
func resourceOutlierUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
168168
c := meta.(*common.Client).MLAPI
169169
outlier, err := makeMLOutlier(d, meta)
170170
if err != nil {
@@ -174,10 +174,10 @@ func ResourceOutlierUpdate(ctx context.Context, d *schema.ResourceData, meta int
174174
if err != nil {
175175
return diag.FromErr(err)
176176
}
177-
return ResourceOutlierRead(ctx, d, meta)
177+
return resourceOutlierRead(ctx, d, meta)
178178
}
179179

180-
func ResourceOutlierDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
180+
func resourceOutlierDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
181181
c := meta.(*common.Client).MLAPI
182182
err := c.DeleteOutlierDetector(ctx, d.Id())
183183
if err != nil {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package machinelearning
2+
3+
import (
4+
"context"
5+
6+
"github.com/grafana/terraform-provider-grafana/internal/common"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func checkClient(f func(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics) func(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
12+
return func(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
13+
client := meta.(*common.Client).MLAPI
14+
if client == nil {
15+
return diag.Errorf("the ML API client is required for this resource. Set the url and auth provider attributes")
16+
}
17+
return f(ctx, d, meta)
18+
}
19+
}
20+
21+
var DatasourcesMap = map[string]*schema.Resource{}
22+
23+
var ResourcesMap = map[string]*schema.Resource{
24+
"grafana_machine_learning_job": resourceJob(),
25+
"grafana_machine_learning_holiday": resourceHoliday(),
26+
"grafana_machine_learning_outlier_detector": resourceOutlierDetector(),
27+
}

0 commit comments

Comments
 (0)