/
data_source_huaweicloud_gaussdb_cassandra_dedicated_resource.go
117 lines (101 loc) · 2.98 KB
/
data_source_huaweicloud_gaussdb_cassandra_dedicated_resource.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package gaussdb
import (
"context"
"log"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/chnsz/golangsdk/openstack/geminidb/v3/instances"
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
)
// @API GaussDBforNoSQL GET /v3/{project_id}/dedicated-resources
func DataSourceGeminiDBDehResource() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceGeminiDBDehResourceRead,
Schema: map[string]*schema.Schema{
"region": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"resource_name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"availability_zone": {
Type: schema.TypeString,
Computed: true,
},
"architecture": {
Type: schema.TypeString,
Computed: true,
},
"vcpus": {
Type: schema.TypeInt,
Computed: true,
},
"ram": {
Type: schema.TypeInt,
Computed: true,
},
"volume": {
Type: schema.TypeInt,
Computed: true,
},
"status": {
Type: schema.TypeString,
Computed: true,
},
},
}
}
func dataSourceGeminiDBDehResourceRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
cfg := meta.(*config.Config)
region := cfg.GetRegion(d)
client, err := cfg.GeminiDBV3Client(region)
if err != nil {
return diag.Errorf("error creating GaussDB client: %s", err)
}
pages, err := instances.ListDeh(client).AllPages()
if err != nil {
return diag.Errorf("error getting GaussDB cassandra dedicated list: %s", err)
}
allResources, err := instances.ExtractDehResources(pages)
if err != nil {
return diag.Errorf("unable to retrieve dedicated resources: %s", err)
}
resourceName := d.Get("resource_name").(string)
refinedResources := []instances.DehResource{}
for _, refResource := range allResources.Resources {
if refResource.EngineName != "cassandra" {
continue
}
if resourceName != "" && refResource.ResourceName != resourceName {
continue
}
refinedResources = append(refinedResources, refResource)
}
if len(refinedResources) < 1 {
return diag.Errorf("your query returned no results. " +
"please change your search criteria and try again.")
}
if len(refinedResources) > 1 {
return diag.Errorf("your query returned more than one result." +
" please try a more specific search criteria")
}
resource := refinedResources[0]
log.Printf("[DEBUG] Retrieved Resource %s: %+v", resource.Id, resource)
d.SetId(resource.Id)
mErr := multierror.Append(
d.Set("resource_name", resource.ResourceName),
d.Set("availability_zone", resource.AvailabilityZone),
d.Set("architecture", resource.Architecture),
d.Set("vcpus", resource.Capacity.Vcpus),
d.Set("ram", resource.Capacity.Ram),
d.Set("volume", resource.Capacity.Volume),
d.Set("status", resource.Status),
d.Set("region", region),
)
return diag.FromErr(mErr.ErrorOrNil())
}