Skip to content

Commit 183cb08

Browse files
authored
Merge pull request #866 from ovh/dev/aamstutz/datasource-loadbalancer-flavors
feat: Add datasource ovh_cloud_project_loadbalancer_flavors
2 parents 64efed9 + fd83b26 commit 183cb08

4 files changed

+676
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package ovh
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/url"
7+
8+
"github.com/hashicorp/terraform-plugin-framework/attr"
9+
"github.com/hashicorp/terraform-plugin-framework/datasource"
10+
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
11+
ovhtypes "github.com/ovh/terraform-provider-ovh/ovh/types"
12+
)
13+
14+
var _ datasource.DataSourceWithConfigure = (*cloudProjectLoadbalancerFlavorsDataSource)(nil)
15+
16+
func NewCloudProjectLoadbalancerFlavorsDataSource() datasource.DataSource {
17+
return &cloudProjectLoadbalancerFlavorsDataSource{}
18+
}
19+
20+
type cloudProjectLoadbalancerFlavorsDataSource struct {
21+
config *Config
22+
}
23+
24+
func (d *cloudProjectLoadbalancerFlavorsDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
25+
resp.TypeName = req.ProviderTypeName + "_cloud_project_loadbalancer_flavors"
26+
}
27+
28+
func (d *cloudProjectLoadbalancerFlavorsDataSource) Configure(_ context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
29+
if req.ProviderData == nil {
30+
return
31+
}
32+
33+
config, ok := req.ProviderData.(*Config)
34+
if !ok {
35+
resp.Diagnostics.AddError(
36+
"Unexpected Data Source Configure Type",
37+
fmt.Sprintf("Expected *Config, got: %T. Please report this issue to the provider developers.", req.ProviderData),
38+
)
39+
return
40+
}
41+
42+
d.config = config
43+
}
44+
45+
func (d *cloudProjectLoadbalancerFlavorsDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
46+
resp.Schema = CloudProjectLoadbalancerFlavorsDataSourceSchema(ctx)
47+
}
48+
49+
func (d *cloudProjectLoadbalancerFlavorsDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
50+
var data CloudProjectLoadbalancerFlavorsModel
51+
52+
// Read Terraform configuration data into the model
53+
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
54+
55+
if resp.Diagnostics.HasError() {
56+
return
57+
}
58+
59+
// Read API call logic
60+
endpoint := "/cloud/project/" + url.PathEscape(data.ServiceName.ValueString()) + "/region/" + url.PathEscape(data.RegionName.ValueString()) + "/loadbalancing/flavor"
61+
62+
var arr []CloudProjectLoadbalancerFlavorsValue
63+
if err := d.config.OVHClient.Get(endpoint, &arr); err != nil {
64+
resp.Diagnostics.AddError(
65+
fmt.Sprintf("Error calling Get %s", endpoint),
66+
err.Error(),
67+
)
68+
return
69+
}
70+
71+
var b []attr.Value
72+
for _, a := range arr {
73+
b = append(b, a)
74+
}
75+
76+
data.Flavors = ovhtypes.TfListNestedValue[CloudProjectLoadbalancerFlavorsValue]{
77+
ListValue: basetypes.NewListValueMust(CloudProjectLoadbalancerFlavorsValue{}.Type(ctx), b),
78+
}
79+
80+
// Save data into Terraform state
81+
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
82+
}

0 commit comments

Comments
 (0)