@@ -7,16 +7,17 @@ import (
77 "context"
88 "fmt"
99 "log"
10+ "net/url"
11+ "reflect"
1012 "strconv"
1113
1214 "github.com/IBM/ibm-hpcs-tke-sdk/tkesdk"
1315 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1416 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1517
16- "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev2/controllerv2"
17- "github.com/IBM-Cloud/bluemix-go/models"
1818 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
1919 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
20+ rc "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
2021)
2122
2223func DataSourceIBMHPCS () * schema.Resource {
@@ -159,25 +160,19 @@ func DataSourceIBMHPCS() *schema.Resource {
159160}
160161
161162func dataSourceIBMHPCSRead (context context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
162- rsConClient , err := meta .(conns.ClientSession ).ResourceControllerAPIV2 ()
163+ rsConClient , err := meta .(conns.ClientSession ).ResourceControllerV2API ()
163164 if err != nil {
164165 return diag .FromErr (err )
165166 }
166- rsAPI := rsConClient .ResourceServiceInstanceV2 ()
167167 name := d .Get ("name" ).(string )
168168
169- rsInstQuery := controllerv2. ServiceInstanceQuery {
170- Name : name ,
169+ resourceInstanceListOptions := rc. ListResourceInstancesOptions {
170+ Name : & name ,
171171 }
172172
173173 if rsGrpID , ok := d .GetOk ("resource_group_id" ); ok {
174- rsInstQuery .ResourceGroupID = rsGrpID .(string )
175- } else {
176- defaultRg , err := flex .DefaultResourceGroup (meta )
177- if err != nil {
178- return diag .FromErr (err )
179- }
180- rsInstQuery .ResourceGroupID = defaultRg
174+ rg := rsGrpID .(string )
175+ resourceInstanceListOptions .ResourceGroupID = & rg
181176 }
182177
183178 rsCatClient , err := meta .(conns.ClientSession ).ResourceCatalogAPI ()
@@ -192,23 +187,37 @@ func dataSourceIBMHPCSRead(context context.Context, d *schema.ResourceData, meta
192187 if err != nil {
193188 return diag .FromErr (fmt .Errorf ("[ERROR] Error retrieving service offering: %s" , err ))
194189 }
195-
196- rsInstQuery . ServiceID = serviceOff [ 0 ]. ID
190+ resourceId := serviceOff [ 0 ]. ID
191+ resourceInstanceListOptions . ResourceID = & resourceId
197192 }
198193
199- var instances []models.ServiceInstanceV2
200-
201- instances , err = rsAPI .ListInstances (rsInstQuery )
202- if err != nil {
203- return diag .FromErr (err )
194+ next_url := ""
195+ var instances []rc.ResourceInstance
196+ for {
197+ if next_url != "" {
198+ resourceInstanceListOptions .Start = & next_url
199+ }
200+ listInstanceResponse , resp , err := rsConClient .ListResourceInstances (& resourceInstanceListOptions )
201+ if err != nil {
202+ return diag .FromErr (fmt .Errorf ("[ERROR] Error retrieving resource instance: %s with resp code: %s" , err , resp ))
203+ }
204+ next_url , err = getInstancesNext (listInstanceResponse .NextURL )
205+ if err != nil {
206+ return diag .FromErr (fmt .Errorf ("[DEBUG] ListResourceInstances failed. Error occurred while parsing NextURL: %s" , err ))
207+ }
208+ instances = append (instances , listInstanceResponse .Resources ... )
209+ if next_url == "" {
210+ break
211+ }
204212 }
205- var filteredInstances []models.ServiceInstanceV2
213+
214+ var filteredInstances []rc.ResourceInstance
206215 var location string
207216
208217 if loc , ok := d .GetOk ("location" ); ok {
209218 location = loc .(string )
210219 for _ , instance := range instances {
211- if flex .GetLocation (instance ) == location {
220+ if flex .GetLocationV2 (instance ) == location {
212221 filteredInstances = append (filteredInstances , instance )
213222 }
214223 }
@@ -219,26 +228,25 @@ func dataSourceIBMHPCSRead(context context.Context, d *schema.ResourceData, meta
219228 if len (filteredInstances ) == 0 {
220229 return diag .FromErr (fmt .Errorf ("[ERROR] No resource instance found with name [%s]\n If not specified please specify more filters like resource_group_id if instance doesn't exists in default group, location or service" , name ))
221230 }
222-
223- var instance models.ServiceInstanceV2
224-
231+ var instance rc.ResourceInstance
225232 if len (filteredInstances ) > 1 {
226233 return diag .FromErr (fmt .Errorf (
227234 "[ERROR] More than one resource instance found with name matching [%s]\n If not specified please specify more filters like resource_group_id if instance doesn't exists in default group, location or service" , name ))
228235 }
229236 instance = filteredInstances [0 ]
230237
231- d .SetId (instance .ID )
238+ d .SetId (* instance .ID )
232239 d .Set ("status" , instance .State )
233240 d .Set ("resource_group_id" , instance .ResourceGroupID )
234241 d .Set ("location" , instance .RegionID )
235- serviceOff , err := rsCatRepo .GetServiceName (instance .ServiceID )
242+
243+ serviceOff , err := rsCatRepo .GetServiceName (* instance .ResourceID )
236244 if err != nil {
237245 return diag .FromErr (fmt .Errorf ("[ERROR] Error retrieving service offering: %s" , err ))
238246 }
239247
240248 d .Set ("service" , serviceOff )
241- d .Set ("guid" , instance .Guid )
249+ d .Set ("guid" , instance .GUID )
242250 if len (instance .Extensions ) == 0 {
243251 d .Set ("extensions" , instance .Extensions )
244252 } else {
@@ -270,18 +278,19 @@ func dataSourceIBMHPCSRead(context context.Context, d *schema.ResourceData, meta
270278 d .Set ("failover_units" , failover_units )
271279 }
272280 }
273- servicePlan , err := rsCatRepo .GetServicePlanName (instance .ResourcePlanID )
281+
282+ servicePlan , err := rsCatRepo .GetServicePlanName (* instance .ResourcePlanID )
274283 if err != nil {
275284 return diag .FromErr (fmt .Errorf ("[ERROR] Error retrieving plan: %s" , err ))
276285 }
277286 d .Set ("plan" , servicePlan )
278- d .Set ("crn" , instance .Crn . String () )
287+ d .Set ("crn" , instance .CRN )
279288
280289 ci , err := hsmClient (d , meta )
281290 if err != nil {
282291 return diag .FromErr (err )
283292 }
284- ci .InstanceId = instance .Guid
293+ ci .InstanceId = * instance .GUID
285294 hsmInfo , err := tkesdk .Query (ci )
286295 if err != nil {
287296 return diag .FromErr (fmt .Errorf ("[ERROR] Error Quering HSM config %s" , err ))
@@ -316,3 +325,15 @@ func FlattenHSMInfo(hsmInfo []tkesdk.HsmInfo) []map[string]interface{} {
316325 }
317326 return info
318327}
328+
329+ func getInstancesNext (next * string ) (string , error ) {
330+ if reflect .ValueOf (next ).IsNil () {
331+ return "" , nil
332+ }
333+ u , err := url .Parse (* next )
334+ if err != nil {
335+ return "" , err
336+ }
337+ q := u .Query ()
338+ return q .Get ("next_url" ), nil
339+ }
0 commit comments