Skip to content

Commit 79e3854

Browse files
fritzheidiHeidi Fritz
andauthored
Support for trusted profile token (IBM-Cloud#6388)
Co-authored-by: Heidi Fritz <[email protected]>
1 parent 13b56d1 commit 79e3854

File tree

3 files changed

+60
-32
lines changed

3 files changed

+60
-32
lines changed

ibm/acctest/acctest.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ var (
139139
imageName string
140140
functionNamespace string
141141
HpcsInstanceID string
142+
HpcsInstanceName string
142143
ToolchainID string
143144
)
144145

@@ -1522,6 +1523,12 @@ func init() {
15221523
fmt.Println("[INFO] Set the environment variable HPCS_INSTANCE_ID for testing data_source_ibm_kms_key_test else it is set to default value")
15231524
}
15241525

1526+
HpcsInstanceName = os.Getenv("HPCS_INSTANCE_NAME")
1527+
if HpcsInstanceName == "" {
1528+
HpcsInstanceName = "test-hpcs"
1529+
fmt.Println("[INFO] Set the environment variable HPCS_INSTANCE_NAME for testing data_source_ibm_hpcs_test else it is set to default value")
1530+
}
1531+
15251532
SecretsManagerInstanceID = os.Getenv("SECRETS_MANAGER_INSTANCE_ID")
15261533
if SecretsManagerInstanceID == "" {
15271534
// SecretsManagerInstanceID = "5af62d5d-5d90-4b84-bbcd-90d2123ae6c8"

ibm/service/hpcs/data_source_ibm_hpcs.go

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2223
func DataSourceIBMHPCS() *schema.Resource {
@@ -159,25 +160,19 @@ func DataSourceIBMHPCS() *schema.Resource {
159160
}
160161

161162
func 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]\nIf 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]\nIf 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+
}

ibm/service/hpcs/data_source_ibm_hpcs_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
func TestAccIBMHPCSDatasourceBasic(t *testing.T) {
15-
instanceName := "test-hpcs"
15+
instanceName := acc.HpcsInstanceName
1616
resource.Test(t, resource.TestCase{
1717
PreCheck: func() { acc.TestAccPreCheck(t) },
1818
Providers: acc.TestAccProviders,

0 commit comments

Comments
 (0)