Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions ibm/conns/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ import (
"github.com/IBM/platform-services-go-sdk/partnercentersellv1"
scc "github.com/IBM/scc-go-sdk/v5/securityandcompliancecenterapiv3"
"github.com/IBM/secrets-manager-go-sdk/v2/secretsmanagerv2"
"github.ibm.com/DRAutomation/dra-go-sdk/drautomationservicev1"
)

// RetryAPIDelay - retry api delay
Expand Down Expand Up @@ -327,6 +328,7 @@ type ClientSession interface {
VmwareV1() (*vmwarev1.VmwareV1, error)
LogsV0() (*logsv0.LogsV0, error)
SdsaasV1() (*sdsaasv1.SdsaasV1, error)
DrAutomationServiceV1() (*drautomationservicev1.DrAutomationServiceV1, error)
}

type clientSession struct {
Expand Down Expand Up @@ -701,6 +703,10 @@ type clientSession struct {
// Global Catalog Management Option
globalCatalogClient *globalcatalogv1.GlobalCatalogV1
globalCatalogClientErr error

// DR Automation
drAutomationServiceClient *drautomationservicev1.DrAutomationServiceV1
drAutomationServiceClientErr error
}

// Usage Reports
Expand Down Expand Up @@ -1044,6 +1050,11 @@ func (sess clientSession) CisSSLClientSession() (*cissslv1.SslCertificateApiV1,
return sess.cisSSLClient.Clone(), nil
}

// DrAutomation Service
func (session clientSession) DrAutomationServiceV1() (*drautomationservicev1.DrAutomationServiceV1, error) {
return session.drAutomationServiceClient, session.drAutomationServiceClientErr
}

// CIS WAF Packages
func (sess clientSession) CisWAFPackageClientSession() (*ciswafpackagev1.WafRulePackagesApiV1, error) {
if sess.cisWAFPackageErr != nil {
Expand Down
17 changes: 17 additions & 0 deletions ibm/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/db2"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/directlink"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/dnsservices"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/drautomationservice"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/enterprise"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/eventnotification"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/eventstreams"
Expand Down Expand Up @@ -1098,6 +1099,18 @@ func Provider() *schema.Provider {
// Logs Router Service
"ibm_logs_router_tenants": logsrouting.DataSourceIBMLogsRouterTenants(),
"ibm_logs_router_targets": logsrouting.DataSourceIBMLogsRouterTargets(),

// DR Automation Service
"ibm_pdr_get_dr_summary_response": drautomationservice.DataSourceIbmPdrGetDrSummaryResponse(),
"ibm_pdr_workspace_schematic": drautomationservice.DataSourceIbmPdrWorkspaceSchematic(),
"ibm_pdr_workspace_custom_vpc": drautomationservice.DataSourceIbmPdrWorkspaceCustomVpc(),
"ibm_pdr_get_event": drautomationservice.DataSourceIbmPdrGetEvent(),
"ibm_pdr_get_events": drautomationservice.DataSourceIbmPdrGetEvents(),
"ibm_pdr_get_dr_locations": drautomationservice.DataSourceIbmPdrGetDrLocations(),
"ibm_pdr_get_machine_types": drautomationservice.DataSourceIbmPdrGetMachineTypes(),
"ibm_pdr_get_managed_vm_list": drautomationservice.DataSourceIbmPdrGetManagedVmList(),
"ibm_pdr_schematic_workspaces": drautomationservice.DataSourceIbmPdrSchematicWorkspaces(),
"ibm_pdr_last_operation": drautomationservice.DataSourceIbmPdrLastOperation(),
},

ResourcesMap: map[string]*schema.Resource{
Expand Down Expand Up @@ -1767,6 +1780,10 @@ func Provider() *schema.Provider {

// Logs Router Service
"ibm_logs_router_tenant": logsrouting.ResourceIBMLogsRouterTenant(),

// DR Automation Service
"ibm_pdr_managedr": drautomationservice.ResourceIbmPdrManagedr(),
"ibm_pdr_validate_apikey": drautomationservice.ResourceIbmPdrValidateApikey(),
},

ConfigureFunc: providerConfigure,
Expand Down
11 changes: 11 additions & 0 deletions ibm/service/drautomationservice/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Terraform IBM Provider
<!-- markdownlint-disable MD026 -->
This area is primarily for IBM provider contributors and maintainers. For information on _using_ Terraform and the IBM provider, see the links below.


## Handy Links
* [Find out about contributing](../../../CONTRIBUTING.md) to the IBM provider!
* IBM Provider Docs: [Home](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs)
* IBM Provider Docs: [One of the resources](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/pdr_managedr)
* IBM API Docs: [IBM API Docs for ]()
* IBM SDK: [IBM SDK for ](https://github.com/IBM/appconfiguration-go-admin-sdk/tree/master/drautomationservicev1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
// Copyright IBM Corp. 2025 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

/*
* IBM OpenAPI Terraform Generator Version: 3.105.0-3c13b041-20250605-193116
*/

package drautomationservice

import (
"context"
"fmt"
"log"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.ibm.com/DRAutomation/dra-go-sdk/drautomationservicev1"
)

func DataSourceIbmPdrGetDrLocations() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIbmPdrGetDrLocationsRead,

Schema: map[string]*schema.Schema{
"instance_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
Description: "instance id of instance to provision.",
},
"accept_language": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "The language requested for the return document.",
},
"if_none_match": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "ETag for conditional requests (optional).",
},
"dr_locations": &schema.Schema{
Type: schema.TypeList,
Computed: true,
Description: "List of disaster recovery locations available for the service.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
Description: "Unique identifier of the DR location.",
},
"name": &schema.Schema{
Type: schema.TypeString,
Computed: true,
Description: "Name of the DR location.",
},
},
},
},
},
}
}

func dataSourceIbmPdrGetDrLocationsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
drAutomationServiceClient, err := meta.(conns.ClientSession).DrAutomationServiceV1()
if err != nil {
tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_pdr_get_dr_locations", "read", "initialize-client")
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
return tfErr.GetDiag()
}

getDrLocationsOptions := &drautomationservicev1.GetDrLocationsOptions{}

getDrLocationsOptions.SetInstanceID(d.Get("instance_id").(string))
if _, ok := d.GetOk("accept_language"); ok {
getDrLocationsOptions.SetAcceptLanguage(d.Get("accept_language").(string))
}
if _, ok := d.GetOk("if_none_match"); ok {
getDrLocationsOptions.SetIfNoneMatch(d.Get("if_none_match").(string))
}

getDrLocationsResponse, _, err := drAutomationServiceClient.GetDrLocationsWithContext(context, getDrLocationsOptions)
if err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetDrLocationsWithContext failed: %s", err.Error()), "(Data) ibm_pdr_get_dr_locations", "read")
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
return tfErr.GetDiag()
}

d.SetId(dataSourceIbmPdrGetDrLocationsID(d))

drLocations := []map[string]interface{}{}
for _, drLocationsItem := range getDrLocationsResponse.DrLocations {
drLocationsItemMap, err := DataSourceIbmPdrGetDrLocationsDrLocationToMap(&drLocationsItem) // #nosec G601
if err != nil {
return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_pdr_get_dr_locations", "read", "dr_locations-to-map").GetDiag()
}
drLocations = append(drLocations, drLocationsItemMap)
}
if err = d.Set("dr_locations", drLocations); err != nil {
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting dr_locations: %s", err), "(Data) ibm_pdr_get_dr_locations", "read", "set-dr_locations").GetDiag()
}

return nil
}

// dataSourceIbmPdrGetDrLocationsID returns a reasonable ID for the list.
func dataSourceIbmPdrGetDrLocationsID(d *schema.ResourceData) string {
return time.Now().UTC().String()
}

func DataSourceIbmPdrGetDrLocationsDrLocationToMap(model *drautomationservicev1.DrLocation) (map[string]interface{}, error) {
modelMap := make(map[string]interface{})
if model.ID != nil {
modelMap["id"] = *model.ID
}
if model.Name != nil {
modelMap["name"] = *model.Name
}
return modelMap, nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright IBM Corp. 2025 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

/*
* IBM OpenAPI Terraform Generator Version: 3.105.0-3c13b041-20250605-193116
*/

package drautomationservice_test

import (
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/drautomationservice"
"github.com/IBM/go-sdk-core/v5/core"
"github.com/stretchr/testify/assert"
"github.ibm.com/DRAutomation/dra-go-sdk/drautomationservicev1"
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
)

func TestAccIbmPdrGetDrLocationsDataSourceBasic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { acc.TestAccPreCheck(t) },
Providers: acc.TestAccProviders,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccCheckIbmPdrGetDrLocationsDataSourceConfigBasic(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("data.ibm_pdr_get_dr_locations.pdr_get_dr_locations_instance", "id"),
resource.TestCheckResourceAttrSet("data.ibm_pdr_get_dr_locations.pdr_get_dr_locations_instance", "instance_id"),
resource.TestCheckResourceAttrSet("data.ibm_pdr_get_dr_locations.pdr_get_dr_locations_instance", "dr_locations.#"),
),
},
},
})
}

func testAccCheckIbmPdrGetDrLocationsDataSourceConfigBasic() string {
return fmt.Sprintf(`
data "ibm_pdr_get_dr_locations" "pdr_get_dr_locations_instance" {
instance_id = "crn:v1:staging:public:power-dr-automation:global:a/a123456fb04ceebfb4a9fd38c22334455:123456d3-1122-3344-b67d-4389b44b7bf9::"
}
`)
}


func TestDataSourceIbmPdrGetDrLocationsDrLocationToMap(t *testing.T) {
checkResult := func(result map[string]interface{}) {
model := make(map[string]interface{})
model["id"] = "loc123"
model["name"] = "US-East-1"

assert.Equal(t, result, model)
}

model := new(drautomationservicev1.DrLocation)
model.ID = core.StringPtr("loc123")
model.Name = core.StringPtr("US-East-1")

result, err := drautomationservice.DataSourceIbmPdrGetDrLocationsDrLocationToMap(model)
assert.Nil(t, err)
checkResult(result)
}
Loading
Loading