1- package equinix
1+ // Package devicetype provides the network_device_type data source
2+ package devicetype
23
34import (
45 "context"
56 "fmt"
67 "strings"
78
9+ "github.com/equinix/terraform-provider-equinix/internal/comparisons"
810 "github.com/equinix/terraform-provider-equinix/internal/config"
911 "github.com/equinix/terraform-provider-equinix/internal/converters"
1012 equinix_validation "github.com/equinix/terraform-provider-equinix/internal/validation"
1113
12- "github.com/equinix/ne-go "
14+ "github.com/equinix/equinix-sdk-go/services/networkedgev1 "
1315 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1416 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1517 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -33,7 +35,8 @@ var networkDeviceTypeDescriptions = map[string]string{
3335 "MetroCodes" : "List of metro codes where device type has to be available" ,
3436}
3537
36- func dataSourceNetworkDeviceType () * schema.Resource {
38+ // DataSource creates a new Terraform data source for retrieving device type data
39+ func DataSource () * schema.Resource {
3740 return & schema.Resource {
3841 ReadContext : dataSourceNetworkDeviceTypeRead ,
3942 Description : "Use this data source to get Equinix Network Edge device type details" ,
@@ -85,28 +88,33 @@ func dataSourceNetworkDeviceType() *schema.Resource {
8588}
8689
8790func dataSourceNetworkDeviceTypeRead (ctx context.Context , d * schema.ResourceData , m interface {}) diag.Diagnostics {
88- conf := m .(* config.Config )
8991 var diags diag.Diagnostics
90- types , err := conf .Ne .GetDeviceTypes ()
92+ client := m .(* config.Config ).NewNetworkEdgeClientForSDK (ctx , d )
93+ types , _ , err := client .SetupApi .GetVirtualDevicesUsingGET (ctx ).Execute ()
9194 name := d .Get (networkDeviceTypeSchemaNames ["Name" ]).(string )
9295 vendor := d .Get (networkDeviceTypeSchemaNames ["Vendor" ]).(string )
9396 category := d .Get (networkDeviceTypeSchemaNames ["Category" ]).(string )
9497 metroCodes := converters .SetToStringList (d .Get (networkDeviceTypeSchemaNames ["MetroCodes" ]).(* schema.Set ))
9598 if err != nil {
9699 return diag .FromErr (err )
97100 }
98- filtered := make ([]ne. DeviceType , 0 , len (types ))
99- for _ , deviceType := range types {
100- if name != "" && ne . StringValue ( deviceType .Name ) != name {
101+ filtered := make ([]networkedgev1. VirtualDeviceType , 0 , len (types . Data ))
102+ for _ , deviceType := range types . Data {
103+ if name != "" && deviceType .GetName ( ) != name {
101104 continue
102105 }
103- if vendor != "" && ne . StringValue ( deviceType .Vendor ) != vendor {
106+ if vendor != "" && deviceType .GetVendor ( ) != vendor {
104107 continue
105108 }
106- if category != "" && ! strings .EqualFold (ne . StringValue ( deviceType .Category ), category ) {
109+ if category != "" && ! strings .EqualFold (deviceType .GetCategory ( ), category ) {
107110 continue
108111 }
109- if ! stringsFound (metroCodes , deviceType .MetroCodes ) {
112+
113+ availableMetros := make ([]string , len (deviceType .AvailableMetros ))
114+ for _ , metro := range deviceType .AvailableMetros {
115+ availableMetros = append (availableMetros , metro .GetMetroCode ())
116+ }
117+ if ! comparisons .Subsets (metroCodes , availableMetros ) {
110118 continue
111119 }
112120 filtered = append (filtered , deviceType )
@@ -123,24 +131,29 @@ func dataSourceNetworkDeviceTypeRead(ctx context.Context, d *schema.ResourceData
123131 return diags
124132}
125133
126- func updateNetworkDeviceTypeResource (deviceType ne. DeviceType , d * schema.ResourceData ) error {
127- d .SetId (ne . StringValue ( deviceType .Code ))
128- if err := d .Set (networkDeviceTypeSchemaNames ["Name" ], deviceType .Name ); err != nil {
134+ func updateNetworkDeviceTypeResource (deviceType networkedgev1. VirtualDeviceType , d * schema.ResourceData ) error {
135+ d .SetId (deviceType .GetDeviceTypeCode ( ))
136+ if err := d .Set (networkDeviceTypeSchemaNames ["Name" ], deviceType .GetName () ); err != nil {
129137 return fmt .Errorf ("error reading Name: %s" , err )
130138 }
131- if err := d .Set (networkDeviceTypeSchemaNames ["Code" ], deviceType .Code ); err != nil {
139+ if err := d .Set (networkDeviceTypeSchemaNames ["Code" ], deviceType .GetDeviceTypeCode () ); err != nil {
132140 return fmt .Errorf ("error reading Code: %s" , err )
133141 }
134- if err := d .Set (networkDeviceTypeSchemaNames ["Description" ], deviceType .Description ); err != nil {
142+ if err := d .Set (networkDeviceTypeSchemaNames ["Description" ], deviceType .GetDescription () ); err != nil {
135143 return fmt .Errorf ("error reading Description: %s" , err )
136144 }
137- if err := d .Set (networkDeviceTypeSchemaNames ["Vendor" ], deviceType .Vendor ); err != nil {
145+ if err := d .Set (networkDeviceTypeSchemaNames ["Vendor" ], deviceType .GetVendor () ); err != nil {
138146 return fmt .Errorf ("error reading Vendor: %s" , err )
139147 }
140- if err := d .Set (networkDeviceTypeSchemaNames ["Category" ], deviceType .Category ); err != nil {
148+ if err := d .Set (networkDeviceTypeSchemaNames ["Category" ], deviceType .GetCategory () ); err != nil {
141149 return fmt .Errorf ("error reading Category: %s" , err )
142150 }
143- if err := d .Set (networkDeviceTypeSchemaNames ["MetroCodes" ], deviceType .MetroCodes ); err != nil {
151+
152+ availableMetros := make ([]string , len (deviceType .AvailableMetros ))
153+ for _ , metro := range deviceType .AvailableMetros {
154+ availableMetros = append (availableMetros , metro .GetMetroCode ())
155+ }
156+ if err := d .Set (networkDeviceTypeSchemaNames ["MetroCodes" ], availableMetros ); err != nil {
144157 return fmt .Errorf ("error reading MetroCodes: %s" , err )
145158 }
146159 return nil
0 commit comments