1
1
{{- /*gotype: tftemplate/models.ResourceTemplate*/ -}}
2
- package scaleway
2
+ package {{.API}}
3
3
4
4
import (
5
5
"context"
6
6
7
7
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8
8
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9
+ "github.com/scaleway/terraform-provider-scaleway/v2/internal/datasource"
10
+ "github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
9
11
)
10
12
11
13
func DataSource{{.Resource}}() *schema.Resource {
12
14
// Generate datasource schema from resource
13
- dsSchema := datasourceSchemaFromResourceSchema (Resource{{.Resource}}().Schema)
15
+ dsSchema := datasource.SchemaFromResourceSchema (Resource{{.Resource}}().Schema)
14
16
15
- addOptionalFieldsToSchema (dsSchema, "name", "{{.Locality}}")
17
+ datasource.AddOptionalFieldsToSchema (dsSchema, "name", "{{.Locality}}")
16
18
17
19
dsSchema["{{.ResourceCleanLow}}_id"] = &schema.Schema{
18
20
Type: schema.TypeString,
19
21
Optional: true,
20
22
Description: "The ID of the {{.ResourceCleanLow}}",
21
23
ConflictsWith: []string{"name"},
22
- ValidateFunc: validationUUIDorUUIDWithLocality (),
24
+ ValidateFunc: verify.IsUUIDorUUIDWithLocality (),
23
25
}
24
26
dsSchema["project_id"].Optional = true
25
27
@@ -30,49 +32,42 @@ func DataSource{{.Resource}}() *schema.Resource {
30
32
}
31
33
32
34
func DataSource{{.Resource}}Read(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
33
- api, {{.Locality}}, err := {{.API}}APIWith {{.LocalityUpper}}(d, m)
35
+ api, {{.Locality}}, err := newAPIWith {{.LocalityUpper}}(d, m)
34
36
if err != nil {
35
37
return diag.FromErr(err)
36
38
}
37
39
38
40
{{.ResourceCleanLow}}ID, {{.ResourceCleanLow}}IDExists := d.GetOk("{{.ResourceCleanLow}}_id")
39
41
if !{{.ResourceCleanLow}}IDExists {
42
+ {{.ResourceCleanLow}}Name := d.Get("name").(string)
40
43
res, err := api.List{{.ResourceClean}}s(&{{.API}}.List{{.ResourceClean}}sRequest{
41
44
{{.LocalityUpper}}: {{.Locality}},
42
45
Name: types.ExpandStringPtr(d.Get("name")),
43
- ProjectID: types.ExpandStringPtr(d.Get("project_id")),
44
46
})
45
47
if err != nil {
46
48
return diag.FromErr(err)
47
49
}
48
- for _, {{.ResourceCleanLow}} := range res.{{.ResourceClean}}s {
49
- if {{.ResourceCleanLow}}.Name == d.Get("name").(string) {
50
- if {{.ResourceCleanLow}}ID != "" {
51
- return diag.Errorf("more than 1 {{.ResourceCleanLow}} found with the same name %s", d.Get("name"))
52
- }
53
- {{.ResourceCleanLow}}ID = {{.ResourceCleanLow}}.ID
54
- }
55
- }
56
- if {{.ResourceCleanLow}}ID == "" {
57
- return diag.Errorf("no {{.ResourceCleanLow}} found with the name %s", d.Get("name"))
50
+ found{{.ResourceClean}} , err := datasource.FindExact(
51
+ res.{{.ResourceClean}}s,
52
+ func(s *{{.API}}.{{.ResourceClean}}) bool {return s.Name == {{.ResourceCleanLow}}Name },
53
+ {{.ResourceCleanLow}}Name,
54
+ )
55
+ if err != nil {
56
+ return diag.FromErr(err)
58
57
}
58
+ {{.ResourceCleanLow}}ID = found{{.ResourceClean}}.ID
59
59
}
60
60
61
- {{.Locality}}ID := datasourceNew{{.LocalityAdjectiveUpper}}ID({{.ResourceCleanLow}}ID, {{.Locality}})
61
+ {{- if eq .Locality "zone" }}
62
+ {{.Locality}}ID := datasource.NewZonedID({{.ResourceCleanLow}}ID, {{.Locality}})
63
+ {{- else }}
64
+ {{.Locality}}ID := datasource.New{{.LocalityAdjectiveUpper}}ID({{.ResourceCleanLow}}ID, {{.Locality}})
65
+ {{- end}}
62
66
d.SetId({{.Locality}}ID)
63
67
err = d.Set("{{.ResourceCleanLow}}_id", {{.Locality}}ID)
64
68
if err != nil {
65
69
return diag.FromErr(err)
66
70
}
67
71
68
- diags := Resource{{.Resource}}Read(ctx, d, m)
69
- if diags != nil {
70
- return append(diags, diag.Errorf("failed to read {{.ResourceCleanLow}} state")...)
71
- }
72
-
73
- if d.Id() == "" {
74
- return diag.Errorf("{{.ResourceCleanLow}} (%s) not found", {{.Locality}}ID)
75
- }
76
-
77
- return nil
72
+ return Resource{{.Resource}}Read(ctx, d, m)
78
73
}
0 commit comments