Skip to content

Commit 8255202

Browse files
ianreianree
andauthored
Add Custom Endpoints to Logs Routing Service (IBM-Cloud#5961)
* Add Custom Endpoints to Logs Routing Service * Simplified Custom Endpoints for Logs Routing --------- Co-authored-by: Ian Reyes <[email protected]>
1 parent eeca33a commit 8255202

File tree

8 files changed

+77
-16
lines changed

8 files changed

+77
-16
lines changed

examples/ibm-logs-routing/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ data "ibm_logs_router_targets" "logs_router_targets_instance" {
128128

129129
### The Logs Routing URL can be set in endpoints.json
130130

131+
You can declare the service endpoints in a JSON file and either reference this file in your provider block by using the `endpoints_file_path` argument, or export the path to your file with the `IBMCLOUD_ENDPOINTS_FILE_PATH` or `IC_ENDPOINTS_FILE_PATH` environment variable.
132+
To use the provided endpoints file, set the visibility to either `public` or `pivate` by using the `IC_VISIBILITY` or `IBMCLOUD_VISIBILITY` environment variable, or by setting the `visibility` field in your provider block.
133+
131134
**Example**:
132135

133136
```json

examples/ibm-logs-routing/main.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
provider "ibm" {
22
ibmcloud_api_key = var.ibmcloud_api_key
3-
region = "us-south"
3+
region = "us-east"
4+
}
5+
6+
provider "ibm" {
7+
ibmcloud_api_key = var.ibmcloud_api_key
8+
region = "eu-de"
9+
alias = "provider-eu-de"
410
}
511

612
// Provision logs_router_tenant resource instance
@@ -27,6 +33,7 @@ resource "ibm_logs_router_tenant" "logs_router_tenant_instance" {
2733
}
2834

2935
resource "ibm_logs_router_tenant" "logs_router_tenant_instance_eu_de" {
36+
provider = ibm.provider-eu-de
3037
name = "eu-de-tenant"
3138
region = "eu-de"
3239
targets {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ require (
3030
github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta
3131
github.com/IBM/keyprotect-go-client v0.15.1
3232
github.com/IBM/logs-go-sdk v0.4.0
33-
github.com/IBM/logs-router-go-sdk v1.0.5
33+
github.com/IBM/logs-router-go-sdk v1.0.7
3434
github.com/IBM/mqcloud-go-sdk v0.2.0
3535
github.com/IBM/networking-go-sdk v0.51.1
3636
github.com/IBM/platform-services-go-sdk v0.73.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ github.com/IBM/logs-go-sdk v0.4.0 h1:CyUjm19EUtcJjf4mxsj6Rc7gkZDT8JEY5rLUIz8Eoag
152152
github.com/IBM/logs-go-sdk v0.4.0/go.mod h1:yv/GCXC4/p+MZEeXl4xjZAOMvDAVRwu61WyHZFKFXQM=
153153
github.com/IBM/logs-router-go-sdk v1.0.5 h1:r0kC1+HfmSeQCD6zQTUp4PDI/zp4Ueo1Zo19ipHuNlw=
154154
github.com/IBM/logs-router-go-sdk v1.0.5/go.mod h1:tCN2vFgu5xG0ob9iJcxi5M4bJ6mWmu3nhmRPnvlwev0=
155+
github.com/IBM/logs-router-go-sdk v1.0.7 h1:uQjQAAcQdo3XvhY6MC7HakhZaXIUsGfUmKj2d5vkjnY=
156+
github.com/IBM/logs-router-go-sdk v1.0.7/go.mod h1:tCN2vFgu5xG0ob9iJcxi5M4bJ6mWmu3nhmRPnvlwev0=
155157
github.com/IBM/mqcloud-go-sdk v0.2.0 h1:QOWk8ZGk0QfIL0MOGTKzNdM3Qe0Hk+ifAFtNSFQo5HU=
156158
github.com/IBM/mqcloud-go-sdk v0.2.0/go.mod h1:VZQKMtqmcdXKhmLhLiPuS/UHMs/5yo2tA/nD83cQt9E=
157159
github.com/IBM/networking-go-sdk v0.51.1 h1:xRlDFxSMejMmJ7JPFZ9cflL86uJpbqUzuL/1D/pP7/g=

ibm/service/logsrouting/data_source_ibm_logs-router_targets.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ func dataSourceIBMLogsRouterTargetsRead(context context.Context, d *schema.Resou
119119
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
120120
return tfErr.GetDiag()
121121
}
122+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
122123

123124
listTenantTargetsOptions := &ibmcloudlogsroutingv0.ListTenantTargetsOptions{}
124125

@@ -131,7 +132,7 @@ func dataSourceIBMLogsRouterTargetsRead(context context.Context, d *schema.Resou
131132
listTenantTargetsOptions.SetRegion(d.Get("region").(string))
132133
}
133134

134-
targetTypeCollection, _, err := ibmCloudLogsRoutingClient.ListTenantTargetsWithContext(context, listTenantTargetsOptions)
135+
targetTypeCollection, _, err := ibmCloudLogsRoutingClient.ListTenantTargetsWithContextEndpoint(context, listTenantTargetsOptions)
135136
if err != nil {
136137
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListTenantTargetsWithContext failed: %s", err.Error()), "(Data) ibm_logs_router_targets", "read")
137138
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())

ibm/service/logsrouting/data_source_ibm_logs-router_tenants.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ func dataSourceIBMLogsRouterTenantsRead(context context.Context, d *schema.Resou
151151
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
152152
return tfErr.GetDiag()
153153
}
154+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
154155

155156
listTenantsOptions := &ibmcloudlogsroutingv0.ListTenantsOptions{}
156157

@@ -162,7 +163,7 @@ func dataSourceIBMLogsRouterTenantsRead(context context.Context, d *schema.Resou
162163
listTenantsOptions.SetRegion(d.Get("region").(string))
163164
}
164165

165-
tenantCollection, _, err := ibmCloudLogsRoutingClient.ListTenantsWithContext(context, listTenantsOptions)
166+
tenantCollection, _, err := ibmCloudLogsRoutingClient.ListTenantsWithContextEndpoint(context, listTenantsOptions)
166167
if err != nil {
167168
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListTenantsWithContext failed: %s", err.Error()), "(Data) ibm_logs_router_tenants", "read")
168169
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())

ibm/service/logsrouting/resource_ibm_logs-router_tenant.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ func resourceIBMLogsRouterTenantCreate(context context.Context, d *schema.Resour
194194
return tfErr.GetDiag()
195195
}
196196

197+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
197198
createTenantOptions := &ibmcloudlogsroutingv0.CreateTenantOptions{}
198199

199200
createTenantOptions.SetName(d.Get("name").(string))
@@ -209,7 +210,7 @@ func resourceIBMLogsRouterTenantCreate(context context.Context, d *schema.Resour
209210
}
210211
createTenantOptions.SetTargets(targets)
211212

212-
tenant, _, err := ibmCloudLogsRoutingClient.CreateTenantWithContext(context, createTenantOptions)
213+
tenant, _, err := ibmCloudLogsRoutingClient.CreateTenantWithContextEndpoint(context, createTenantOptions)
213214
if err != nil {
214215
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateTenantWithContext failed: %s", err.Error()), "ibm_logs_router_tenant", "create")
215216
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
@@ -229,13 +230,14 @@ func resourceIBMLogsRouterTenantRead(context context.Context, d *schema.Resource
229230
return tfErr.GetDiag()
230231
}
231232

233+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
232234
getTenantDetailOptions := &ibmcloudlogsroutingv0.GetTenantDetailOptions{}
233235

234236
tenantId := strfmt.UUID(d.Id())
235237
getTenantDetailOptions.SetTenantID(&tenantId)
236238
getTenantDetailOptions.SetRegion(d.Get("region").(string))
237239

238-
tenant, response, err := ibmCloudLogsRoutingClient.GetTenantDetailWithContext(context, getTenantDetailOptions)
240+
tenant, response, err := ibmCloudLogsRoutingClient.GetTenantDetailWithContextEndpoint(context, getTenantDetailOptions)
239241
if err != nil {
240242
if response != nil && response.StatusCode == 404 {
241243
d.SetId("")
@@ -345,6 +347,7 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
345347
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
346348
return tfErr.GetDiag()
347349
}
350+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
348351

349352
updateTenantOptions := &ibmcloudlogsroutingv0.UpdateTenantOptions{}
350353

@@ -462,7 +465,7 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
462465
updateTenantOptions.TenantPatch["name"] = nil
463466
}
464467

465-
_, _, err = ibmCloudLogsRoutingClient.UpdateTenantWithContext(context, updateTenantOptions)
468+
_, _, err = ibmCloudLogsRoutingClient.UpdateTenantWithContextEndpoint(context, updateTenantOptions)
466469
if err != nil {
467470
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("UpdateTenantWithContext failed: %s", err.Error()), "ibm_logs_router_tenant", "update")
468471
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
@@ -493,9 +496,9 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
493496
_, newCRN := d.GetChange("targets.0.log_sink_crn")
494497
if crn, ok := newCRN.(string); ok {
495498
if strings.Contains(crn, ":logs:") {
496-
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContext(context, updateTarget0Options)
499+
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContextEndpoint(context, updateTarget0Options)
497500
} else {
498-
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContext(context, updateTarget0Options)
501+
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContextEndpoint(context, updateTarget0Options)
499502
}
500503
}
501504

@@ -507,7 +510,7 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
507510
}
508511

509512
if target1Create {
510-
_, _, err := ibmCloudLogsRoutingClient.CreateTargetWithContext(context, createTarget1Options)
513+
_, _, err := ibmCloudLogsRoutingClient.CreateTargetWithContextEndpoint(context, createTarget1Options)
511514
if err != nil {
512515
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateTargetWithContext failed: %s", err.Error()), "ibm_logs_router_target", "create")
513516
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
@@ -535,7 +538,7 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
535538
deleteTargetOptions.SetTenantID(&tenantId)
536539
deleteTargetOptions.SetTargetID(&target1ID)
537540
deleteTargetOptions.SetRegion(d.Get("region").(string))
538-
_, err = ibmCloudLogsRoutingClient.DeleteTargetWithContext(context, deleteTargetOptions)
541+
_, err = ibmCloudLogsRoutingClient.DeleteTargetWithContextEndpoint(context, deleteTargetOptions)
539542
if err != nil {
540543
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteTargetWithContext failed: %s", err.Error()), "ibm_logs_router_target", "delete")
541544
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
@@ -546,9 +549,9 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
546549
_, newCRN := d.GetChange("targets.1.log_sink_crn")
547550
if crn, ok := newCRN.(string); ok {
548551
if strings.Contains(crn, ":logs:") {
549-
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContext(context, updateTarget1Options)
552+
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContextEndpoint(context, updateTarget1Options)
550553
} else {
551-
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContext(context, updateTarget1Options)
554+
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContextEndpoint(context, updateTarget1Options)
552555
}
553556
}
554557
if err != nil {
@@ -578,9 +581,9 @@ func resourceIBMLogsRouterTenantUpdate(context context.Context, d *schema.Resour
578581
_, newCRN := d.GetChange("targets.0.log_sink_crn")
579582
if crn, ok := newCRN.(string); ok {
580583
if strings.Contains(crn, ":logs:") {
581-
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContext(context, updateTarget0Options)
584+
_, _, err = ibmCloudLogsRoutingClient.UpdateLogsTargetWithContextEndpoint(context, updateTarget0Options)
582585
} else {
583-
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContext(context, updateTarget0Options)
586+
_, _, err = ibmCloudLogsRoutingClient.UpdateTargetWithContextEndpoint(context, updateTarget0Options)
584587
}
585588
}
586589
if err != nil {
@@ -601,13 +604,14 @@ func resourceIBMLogsRouterTenantDelete(context context.Context, d *schema.Resour
601604
return tfErr.GetDiag()
602605
}
603606

607+
ibmCloudLogsRoutingClient, _, err = updateClientURLWithEndpoint(ibmCloudLogsRoutingClient, d)
604608
deleteTenantOptions := &ibmcloudlogsroutingv0.DeleteTenantOptions{}
605609

606610
tenantId := strfmt.UUID(d.Id())
607611
deleteTenantOptions.SetTenantID(&tenantId)
608612
deleteTenantOptions.SetRegion(d.Get("region").(string))
609613

610-
_, err = ibmCloudLogsRoutingClient.DeleteTenantWithContext(context, deleteTenantOptions)
614+
_, err = ibmCloudLogsRoutingClient.DeleteTenantWithContextEndpoint(context, deleteTenantOptions)
611615
if err != nil {
612616
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteTenantWithContext failed: %s", err.Error()), "ibm_logs_router_tenant", "delete")
613617
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())

ibm/service/logsrouting/utils.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package logsrouting
2+
3+
import (
4+
"log"
5+
"strings"
6+
7+
"github.com/IBM/logs-router-go-sdk/ibmcloudlogsroutingv0"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
// Clones the logs routing client and sets the correct URL. Public, private, or custom
12+
func updateClientURLWithEndpoint(logsRoutingClient *ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0, d *schema.ResourceData) (*ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0, string, error) {
13+
14+
region := d.Get("region").(string)
15+
originalConfigServiceURL := logsRoutingClient.GetServiceURL()
16+
newServiceURL := replaceRegion(originalConfigServiceURL, region)
17+
18+
newClient := &ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0{
19+
Service: logsRoutingClient.Service.Clone(),
20+
}
21+
22+
log.Printf("Constructing client with new service URL %s", newServiceURL)
23+
24+
newClient.Service.SetServiceURL(newServiceURL)
25+
26+
return newClient, region, nil
27+
}
28+
29+
// Function to replace the region in the URL
30+
func replaceRegion(url, region string) string {
31+
// Split the URL by "." to isolate the relevant parts
32+
parts := strings.Split(url, ".")
33+
34+
// Check if the URL contains 'private'
35+
if len(parts) > 1 && parts[1] == "private" {
36+
parts[2] = region
37+
} else {
38+
parts[1] = region
39+
}
40+
41+
// Join the parts back into a complete URL
42+
return strings.Join(parts, ".")
43+
}

0 commit comments

Comments
 (0)