From b1b1f9276ddaea03e8b49b159738dcc11911ec20 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Thu, 26 Jun 2025 23:34:54 +0530 Subject: [PATCH 01/15] add getcomponents data source --- ibm/conns/config.go | 31 + ibm/provider/provider.go | 1 + ..._backup_recovery_manager_get_components.go | 637 ++++++++++++++++++ ...up_recovery_manager_get_components_test.go | 510 ++++++++++++++ 4 files changed, 1179 insertions(+) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go diff --git a/ibm/conns/config.go b/ibm/conns/config.go index e6715733d4..cfa47f3672 100644 --- a/ibm/conns/config.go +++ b/ibm/conns/config.go @@ -247,6 +247,7 @@ type ClientSession interface { ResourceControllerAPIV2() (controllerv2.ResourceControllerAPIV2, error) BackupRecoveryV1() (*backuprecoveryv1.BackupRecoveryV1, error) BackupRecoveryV1Connector() (*backuprecoveryv1.BackupRecoveryV1Connector, error) + BackupRecoveryManagerV1() (*backuprecoveryv1.HeliosReportingServiceApIsV1, error) IBMCloudLogsRoutingV0() (*ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0, error) SoftLayerSession() *slsession.Session IBMPISession() (*ibmpisession.IBMPISession, error) @@ -579,6 +580,9 @@ type clientSession struct { backupRecoveryConnectorClient *backuprecoveryv1.BackupRecoveryV1Connector backupRecoveryConnectorClientErr error + backupRecoveryManagerClient *backuprecoveryv1.HeliosReportingServiceApIsV1 + backupRecoveryManagerClientErr error + secretsManagerClient *secretsmanagerv2.SecretsManagerV2 secretsManagerClientErr error @@ -1176,6 +1180,10 @@ func (session clientSession) BackupRecoveryV1Connector() (*backuprecoveryv1.Back return session.backupRecoveryConnectorClient, session.backupRecoveryConnectorClientErr } +func (session clientSession) BackupRecoveryManagerV1() (*backuprecoveryv1.HeliosReportingServiceApIsV1, error) { + return session.backupRecoveryManagerClient, session.backupRecoveryManagerClientErr +} + // IBM Cloud Secrets Manager V2 Basic API func (session clientSession) SecretsManagerV2() (*secretsmanagerv2.SecretsManagerV2, error) { return session.secretsManagerClient, session.secretsManagerClientErr @@ -1374,6 +1382,7 @@ func (c *Config) ClientSession() (interface{}, error) { session.resourceControllerErr = errEmptyBluemixCredentials session.backupRecoveryClientErr = errEmptyBluemixCredentials session.backupRecoveryConnectorClientErr = errEmptyBluemixCredentials + session.backupRecoveryManagerClientErr = errEmptyBluemixCredentials session.catalogManagementClientErr = errEmptyBluemixCredentials session.partnerCenterSellClientErr = errEmptyBluemixCredentials session.ibmpiConfigErr = errEmptyBluemixCredentials @@ -1640,6 +1649,7 @@ func (c *Config) ClientSession() (interface{}, error) { // Construct the service options. var backupRecoveryURL string var backupRecoveryConnectorURL string + var backupRecoveryManagerURL string if fileMap != nil && c.Visibility != "public-and-private" { backupRecoveryURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_ENDPOINT", c.Region, backupRecoveryURL) @@ -1689,6 +1699,27 @@ func (c *Config) ClientSession() (interface{}, error) { }) } + backupRecoveryManagerClientOptions := &backuprecoveryv1.HeliosReportingServiceApIsV1Options{ + Authenticator: authenticator, + URL: EnvFallBack([]string{"IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT"}, backupRecoveryManagerURL), + } + if backupRecoveryManagerClientOptions.URL == "" { + session.backupRecoveryManagerClientErr = fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT not set in env or endpoints file") + } + // Construct the service client. + session.backupRecoveryManagerClient, err = backuprecoveryv1.NewHeliosReportingServiceApIsV1(backupRecoveryManagerClientOptions) + if err != nil { + session.backupRecoveryManagerClientErr = fmt.Errorf("Error occurred while configuring IBM Backup recovery API service: %q", err) + } + if session.backupRecoveryManagerClient != nil && session.backupRecoveryManagerClient.Service != nil { + // Enable retries for API calls + session.backupRecoveryManagerClient.Service.EnableRetries(c.RetryCount, c.RetryDelay) + // Add custom header for analytics + session.backupRecoveryManagerClient.SetDefaultHeaders(gohttp.Header{ + "X-Original-User-Agent": {fmt.Sprintf("terraform-provider-ibm/%s", version.Version)}, + }) + } + projectEndpoint := project.DefaultServiceURL // Construct an "options" struct for creating the service client. if fileMap != nil && c.Visibility != "public-and-private" { diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 64c4317ee6..36711c712c 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -274,6 +274,7 @@ func Provider() *schema.Provider { "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), + "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), // // AppID "ibm_appid_action_url": appid.DataSourceIBMAppIDActionURL(), diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go new file mode 100644 index 0000000000..fa613cf514 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go @@ -0,0 +1,637 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetComponents() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentsRead, + + Schema: map[string]*schema.Schema{ + "ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the ids of the report component to fetch.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "components": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of components.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the aggregation related information that needs to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregated_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of aggregation properties to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregation_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the aggregation type.", + }, + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute name.", + }, + "label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", + }, + }, + }, + }, + "grouped_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of attributes to be grouped in the aggregation.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "xlsx_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize a component in excel report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "custom_label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", + }, + "format": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + "data": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the data returned after evaluating the component.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Component.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Component.", + }, + "limit": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the parameters to limit the resulting dataset.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "from": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", + }, + "size": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of objects to be returned from the offset specified.", + }, + }, + }, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Component.", + }, + "report_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the report type on top of which this Component is created from.", + }, + "sort": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "desc": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether the sorting order should be descending. Default value is false.", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetComponentsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosReportingServiceApIsClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_components", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getComponentsOptions := &backuprecoveryv1.GetComponentsOptions{} + + if _, ok := d.GetOk("ids"); ok { + var ids []string + for _, v := range d.Get("ids").([]interface{}) { + idsItem := v.(string) + ids = append(ids, idsItem) + } + getComponentsOptions.SetIds(ids) + } + + components, _, err := heliosReportingServiceApIsClient.GetComponentsWithContext(context, getComponentsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_components", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetComponentsID(d)) + + if !core.IsNil(components.Components) { + componentItems := []map[string]interface{}{} + for _, componentsItem := range components.Components { + componentsItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(&componentsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_components", "read", "components-to-map").GetDiag() + } + componentItems = append(componentItems, componentsItemMap) + } + if err = d.Set("components", componentItems); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting components: %s", err), "(Data) ibm_backup_recovery_manager_get_components", "read", "set-components").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetComponentsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetComponentsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Aggs != nil { + aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model.Aggs) + if err != nil { + return modelMap, err + } + modelMap["aggs"] = []map[string]interface{}{aggsMap} + } + if model.Config != nil { + configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model.Config) + if err != nil { + return modelMap, err + } + modelMap["config"] = []map[string]interface{}{configMap} + } + if model.Data != nil { + modelMap["data"] = model.Data + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.Filters != nil { + filters := []map[string]interface{}{} + for _, filtersItem := range model.Filters { + filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(&filtersItem) // #nosec G601 + if err != nil { + return modelMap, err + } + filters = append(filters, filtersItemMap) + } + modelMap["filters"] = filters + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Limit != nil { + limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model.Limit) + if err != nil { + return modelMap, err + } + modelMap["limit"] = []map[string]interface{}{limitMap} + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.ReportType != nil { + modelMap["report_type"] = *model.ReportType + } + if model.Sort != nil { + sort := []map[string]interface{}{} + for _, sortItem := range model.Sort { + sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(&sortItem) // #nosec G601 + if err != nil { + return modelMap, err + } + sort = append(sort, sortItemMap) + } + modelMap["sort"] = sort + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AggregatedAttributes != nil { + aggregatedAttributes := []map[string]interface{}{} + for _, aggregatedAttributesItem := range model.AggregatedAttributes { + aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 + if err != nil { + return modelMap, err + } + aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) + } + modelMap["aggregated_attributes"] = aggregatedAttributes + } + if model.GroupedAttributes != nil { + modelMap["grouped_attributes"] = model.GroupedAttributes + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["aggregation_type"] = *model.AggregationType + modelMap["attribute"] = *model.Attribute + if model.Label != nil { + modelMap["label"] = *model.Label + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.XlsxParams != nil { + xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model.XlsxParams) + if err != nil { + return modelMap, err + } + modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AttributeConfig != nil { + attributeConfig := []map[string]interface{}{} + for _, attributeConfigItem := range model.AttributeConfig { + attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 + if err != nil { + return modelMap, err + } + attributeConfig = append(attributeConfig, attributeConfigItemMap) + } + modelMap["attribute_config"] = attributeConfig + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_name"] = *model.AttributeName + if model.CustomLabel != nil { + modelMap["custom_label"] = *model.CustomLabel + } + if model.Format != nil { + modelMap["format"] = *model.Format + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.From != nil { + modelMap["from"] = flex.IntValue(model.From) + } + modelMap["size"] = flex.IntValue(model.Size) + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + if model.Desc != nil { + modelMap["desc"] = *model.Desc + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go new file mode 100644 index 0000000000..772fa9ff43 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go @@ -0,0 +1,510 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetComponentsDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetComponentsDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_components.backup_recovery_manager_get_components_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetComponentsDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_components" "backup_recovery_manager_get_components_instance" { + ids = [ "ids" ] + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + attributeAggregationsModel := make(map[string]interface{}) + attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + attributeAggregationsModel["grouped_attributes"] = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := make(map[string]interface{}) + customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + attributeFilterModel := make(map[string]interface{}) + attributeFilterModel["attribute"] = "testString" + attributeFilterModel["filter_type"] = "In" + attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + limitParamsModel := make(map[string]interface{}) + limitParamsModel["from"] = int(38) + limitParamsModel["size"] = int(1) + + attributeSortModel := make(map[string]interface{}) + attributeSortModel["attribute"] = "testString" + attributeSortModel["desc"] = true + + model := make(map[string]interface{}) + model["aggs"] = []map[string]interface{}{attributeAggregationsModel} + model["config"] = []map[string]interface{}{customConfigParamsModel} + model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model["description"] = "testString" + model["filters"] = []map[string]interface{}{attributeFilterModel} + model["id"] = "testString" + model["limit"] = []map[string]interface{}{limitParamsModel} + model["name"] = "testString" + model["report_type"] = "Failures" + model["sort"] = []map[string]interface{}{attributeSortModel} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) + attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + attributeAggregationsModel.GroupedAttributes = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) + customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + attributeFilterModel := new(backuprecoveryv1.AttributeFilter) + attributeFilterModel.Attribute = core.StringPtr("testString") + attributeFilterModel.FilterType = core.StringPtr("In") + attributeFilterModel.InFilterParams = inFilterParamsModel + attributeFilterModel.RangeFilterParams = rangeFilterParamsModel + attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel + attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel + + limitParamsModel := new(backuprecoveryv1.LimitParams) + limitParamsModel.From = core.Int64Ptr(int64(38)) + limitParamsModel.Size = core.Int64Ptr(int64(1)) + + attributeSortModel := new(backuprecoveryv1.AttributeSort) + attributeSortModel.Attribute = core.StringPtr("testString") + attributeSortModel.Desc = core.BoolPtr(true) + + model := new(backuprecoveryv1.Component) + model.Aggs = attributeAggregationsModel + model.Config = customConfigParamsModel + model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model.Description = core.StringPtr("testString") + model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} + model.ID = core.StringPtr("testString") + model.Limit = limitParamsModel + model.Name = core.StringPtr("testString") + model.ReportType = core.StringPtr("Failures") + model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + model := make(map[string]interface{}) + model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + model["grouped_attributes"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + model := new(backuprecoveryv1.AttributeAggregations) + model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + model.GroupedAttributes = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["aggregation_type"] = "sum" + model["attribute"] = "testString" + model["label"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AggregatedAttributesParams) + model.AggregationType = core.StringPtr("sum") + model.Attribute = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + model := make(map[string]interface{}) + model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + model := new(backuprecoveryv1.CustomConfigParams) + model.XlsxParams = xlsxCustomConfigParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + model := make(map[string]interface{}) + model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + model := new(backuprecoveryv1.XlsxCustomConfigParams) + model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_name"] = "testString" + model["custom_label"] = "testString" + model["format"] = "Timestamp" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + model.AttributeName = core.StringPtr("testString") + model.CustomLabel = core.StringPtr("testString") + model.Format = core.StringPtr("Timestamp") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["filter_type"] = "In" + model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + assert.Equal(t, result, model) + } + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + model := new(backuprecoveryv1.AttributeFilter) + model.Attribute = core.StringPtr("testString") + model.FilterType = core.StringPtr("In") + model.InFilterParams = inFilterParamsModel + model.RangeFilterParams = rangeFilterParamsModel + model.SystemsFilterParams = systemsFilterParamsModel + model.TimeRangeFilterParams = timeRangeFilterParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_data_type"] = "Bool" + model["attribute_labels"] = []string{"testString"} + model["bool_filter_values"] = []bool{true} + model["int32_filter_values"] = []int64{int64(38)} + model["int64_filter_values"] = []int64{int64(26)} + model["string_filter_values"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.InFilterParams) + model.AttributeDataType = core.StringPtr("Bool") + model.AttributeLabels = []string{"testString"} + model.BoolFilterValues = []bool{true} + model.Int32FilterValues = []int64{int64(38)} + model.Int64FilterValues = []int64{int64(26)} + model.StringFilterValues = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.RangeFilterParams) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["system_ids"] = []string{"testString"} + model["system_names"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.SystemsFilterParams) + model.SystemIds = []string{"testString"} + model.SystemNames = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["date_range"] = "Last1Hour" + model["duration_hours"] = int(26) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.TimeRangeFilterParams) + model.DateRange = core.StringPtr("Last1Hour") + model.DurationHours = core.Int64Ptr(int64(26)) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["from"] = int(38) + model["size"] = int(1) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.LimitParams) + model.From = core.Int64Ptr(int64(38)) + model.Size = core.Int64Ptr(int64(1)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["desc"] = true + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AttributeSort) + model.Attribute = core.StringPtr("testString") + model.Desc = core.BoolPtr(true) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(model) + assert.Nil(t, err) + checkResult(result) +} From c4ef897e6c5fe10c7da35c95bce0d92c67861375 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Fri, 27 Jun 2025 17:12:00 +0530 Subject: [PATCH 02/15] add helios sre client and get cluster cluster info --- ibm/conns/config.go | 31 ++ ibm/provider/provider.go | 51 +- ...p_recovery_manager_sre_get_cluster_info.go | 511 ++++++++++++++++++ ...overy_manager_sre_get_cluster_info_test.go | 39 ++ 4 files changed, 607 insertions(+), 25 deletions(-) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go diff --git a/ibm/conns/config.go b/ibm/conns/config.go index cfa47f3672..e2c4523a75 100644 --- a/ibm/conns/config.go +++ b/ibm/conns/config.go @@ -248,6 +248,7 @@ type ClientSession interface { BackupRecoveryV1() (*backuprecoveryv1.BackupRecoveryV1, error) BackupRecoveryV1Connector() (*backuprecoveryv1.BackupRecoveryV1Connector, error) BackupRecoveryManagerV1() (*backuprecoveryv1.HeliosReportingServiceApIsV1, error) + BackupRecoveryManagerSreV1() (*backuprecoveryv1.HeliosSreApiV2, error) IBMCloudLogsRoutingV0() (*ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0, error) SoftLayerSession() *slsession.Session IBMPISession() (*ibmpisession.IBMPISession, error) @@ -583,6 +584,9 @@ type clientSession struct { backupRecoveryManagerClient *backuprecoveryv1.HeliosReportingServiceApIsV1 backupRecoveryManagerClientErr error + backupRecoveryManagerSreClient *backuprecoveryv1.HeliosSreApiV2 + backupRecoveryManagerSreClientErr error + secretsManagerClient *secretsmanagerv2.SecretsManagerV2 secretsManagerClientErr error @@ -1184,6 +1188,10 @@ func (session clientSession) BackupRecoveryManagerV1() (*backuprecoveryv1.Helios return session.backupRecoveryManagerClient, session.backupRecoveryManagerClientErr } +func (session clientSession) BackupRecoveryManagerSreV1() (*backuprecoveryv1.HeliosSreApiV2, error) { + return session.backupRecoveryManagerSreClient, session.backupRecoveryManagerSreClientErr +} + // IBM Cloud Secrets Manager V2 Basic API func (session clientSession) SecretsManagerV2() (*secretsmanagerv2.SecretsManagerV2, error) { return session.secretsManagerClient, session.secretsManagerClientErr @@ -1383,6 +1391,7 @@ func (c *Config) ClientSession() (interface{}, error) { session.backupRecoveryClientErr = errEmptyBluemixCredentials session.backupRecoveryConnectorClientErr = errEmptyBluemixCredentials session.backupRecoveryManagerClientErr = errEmptyBluemixCredentials + session.backupRecoveryManagerSreClientErr = errEmptyBluemixCredentials session.catalogManagementClientErr = errEmptyBluemixCredentials session.partnerCenterSellClientErr = errEmptyBluemixCredentials session.ibmpiConfigErr = errEmptyBluemixCredentials @@ -1650,6 +1659,7 @@ func (c *Config) ClientSession() (interface{}, error) { var backupRecoveryURL string var backupRecoveryConnectorURL string var backupRecoveryManagerURL string + var backupRecoveryManagerSreURL string if fileMap != nil && c.Visibility != "public-and-private" { backupRecoveryURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_ENDPOINT", c.Region, backupRecoveryURL) @@ -1720,6 +1730,27 @@ func (c *Config) ClientSession() (interface{}, error) { }) } + backupRecoveryManagerSreClientOptions := &backuprecoveryv1.HeliosSreApiV2Options{ + Authenticator: authenticator, + URL: EnvFallBack([]string{"IBMCLOUD_BACKUP_RECOVERY_MANAGER_SRE_ENDPOINT"}, backupRecoveryManagerSreURL), + } + if backupRecoveryManagerSreClientOptions.URL == "" { + session.backupRecoveryManagerSreClientErr = fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_SRE_ENDPOINT not set in env or endpoints file") + } + // Construct the service client. + session.backupRecoveryManagerSreClient, err = backuprecoveryv1.NewHeliosSreApiV2(backupRecoveryManagerSreClientOptions) + if err != nil { + session.backupRecoveryManagerSreClientErr = fmt.Errorf("Error occurred while configuring IBM Backup recovery API service: %q", err) + } + if session.backupRecoveryManagerSreClient != nil && session.backupRecoveryManagerSreClient.Service != nil { + // Enable retries for API calls + session.backupRecoveryManagerSreClient.Service.EnableRetries(c.RetryCount, c.RetryDelay) + // Add custom header for analytics + session.backupRecoveryManagerSreClient.SetDefaultHeaders(gohttp.Header{ + "X-Original-User-Agent": {fmt.Sprintf("terraform-provider-ibm/%s", version.Version)}, + }) + } + projectEndpoint := project.DefaultServiceURL // Construct an "options" struct for creating the service client. if fileMap != nil && c.Visibility != "public-and-private" { diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 36711c712c..05e24bf6db 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -250,31 +250,32 @@ func Provider() *schema.Provider { "ibm_config_aggregator_resource_collection_status": configurationaggregator.AddConfigurationAggregatorInstanceFields(configurationaggregator.DataSourceIbmConfigAggregatorResourceCollectionStatus()), // // BackupAndRecovery - "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), - "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), - "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), - "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), - "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), - "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), - "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), - "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), - "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), - "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), - "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), - "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), - "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), - "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), - "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), - "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), - "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), - "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), - "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), - "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), - "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), - "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), - "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), - "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), - "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), + "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), + "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), + "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), + "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), + "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), + "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), + "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), + "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), + "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), + "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), + "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), + "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), + "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), + "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), + "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), + "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), + "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), + "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), + "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), + "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), + "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), + "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), + "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), + "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), + "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), + "ibm_backup_recovery_manager_sre_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetClusterInfo(), // // AppID "ibm_appid_action_url": appid.DataSourceIBMAppIDActionURL(), diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go new file mode 100644 index 0000000000..23e6eec245 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go @@ -0,0 +1,511 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetClusterInfoRead, + + Schema: map[string]*schema.Schema{ + "cohesity_clusters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the array of clusters upgrade details.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "auth_support_for_pkg_downloads": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "If cluster can support authHeader for upgrade or not.", + }, + "available_versions": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the release versions the cluster can upgrade to.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "notes": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies release's notes.", + }, + "patch_details": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the details of the available patch release.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "notes": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies patch release's notes.", + }, + "release_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Release's type.", + }, + "version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies patch release's version.", + }, + }, + }, + }, + "release_stage": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the stage of a release.", + }, + "release_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Release's type e.g, LTS, Feature, Patch, MCM.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of package or release.", + }, + "version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies release's version.", + }, + }, + }, + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + "cluster_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies cluster's name.", + }, + "current_patch_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies current patch version of the cluster.", + }, + "current_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies if the cluster is connected to helios.", + }, + "health": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the health of the cluster.", + }, + "is_connected_to_helios": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies if the cluster is connected to helios.", + }, + "location": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the location of the cluster.", + }, + "multi_tenancy_enabled": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies if multi tenancy is enabled in the cluster.", + }, + "node_ips": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of node ips for the cluster.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "number_of_nodes": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of nodes in the cluster.", + }, + "patch_target_upgrade_url": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the patch package URL for the cluster. This is populated for patch update only.", + }, + "patch_target_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies target version to which clusters are upgrading. This is populated for patch update only.", + }, + "provider_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the cluster provider.", + }, + "scheduled_timestamp": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Time at which an upgrade is scheduled.", + }, + "status": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the upgrade status of the cluster.", + }, + "target_upgrade_url": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the upgrade URL for the cluster. This is populated for upgrade only.", + }, + "target_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies target version to which clusters are to be upgraded. This is populated for upgrade only.", + }, + "total_capacity": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies how total memory capacity of the cluster.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the cluster.", + }, + "update_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of upgrade performed on a cluster. This is to be used with status field to know the status of the upgrade action performed on cluster.", + }, + "used_capacity": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies how much of the cluster capacity is consumed.", + }, + }, + }, + }, + "sp_clusters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the array of clusters claimed from IBM Storage Protect environment.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + "cluster_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies cluster's name.", + }, + "current_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the currently running version on cluster.", + }, + "health": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the health of the cluster.", + }, + "is_connected_to_helios": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies if the cluster is connected to helios.", + }, + "node_ips": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of node ips for the cluster.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "number_of_nodes": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of nodes in the cluster.", + }, + "provider_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the cluster provider.", + }, + "total_capacity": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies total capacity of the cluster in bytes.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the SP cluster.", + }, + "used_capacity": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies how much of the cluster capacity is consumed in bytes.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetClusterInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getClustersInfoOptions := &backuprecoveryv1.GetClustersInfoOptions{} + + clusterDetails, _, err := heliosSreApiClient.GetClustersInfoWithContext(context, getClustersInfoOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetClustersInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID(d)) + + if !core.IsNil(clusterDetails.CohesityClusters) { + cohesityClusters := []map[string]interface{}{} + for _, cohesityClustersItem := range clusterDetails.CohesityClusters { + cohesityClustersItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(&cohesityClustersItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "cohesity_clusters-to-map").GetDiag() + } + cohesityClusters = append(cohesityClusters, cohesityClustersItemMap) + } + if err = d.Set("cohesity_clusters", cohesityClusters); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting cohesity_clusters: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "set-cohesity_clusters").GetDiag() + } + } + + if !core.IsNil(clusterDetails.SpClusters) { + spClusters := []map[string]interface{}{} + for _, spClustersItem := range clusterDetails.SpClusters { + spClustersItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoSPClusterInfoToMap(&spClustersItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "sp_clusters-to-map").GetDiag() + } + spClusters = append(spClusters, spClustersItemMap) + } + if err = d.Set("sp_clusters", spClusters); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sp_clusters: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "set-sp_clusters").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(model *backuprecoveryv1.ClusterInfo) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AuthSupportForPkgDownloads != nil { + modelMap["auth_support_for_pkg_downloads"] = *model.AuthSupportForPkgDownloads + } + if model.AvailableVersions != nil { + availableVersions := []map[string]interface{}{} + for _, availableVersionsItem := range model.AvailableVersions { + availableVersionsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailableReleaseVersionToMap(&availableVersionsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + availableVersions = append(availableVersions, availableVersionsItemMap) + } + modelMap["available_versions"] = availableVersions + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + if model.ClusterName != nil { + modelMap["cluster_name"] = *model.ClusterName + } + if model.CurrentPatchVersion != nil { + modelMap["current_patch_version"] = *model.CurrentPatchVersion + } + if model.CurrentVersion != nil { + modelMap["current_version"] = *model.CurrentVersion + } + if model.Health != nil { + modelMap["health"] = *model.Health + } + if model.IsConnectedToHelios != nil { + modelMap["is_connected_to_helios"] = *model.IsConnectedToHelios + } + if model.Location != nil { + modelMap["location"] = *model.Location + } + if model.MultiTenancyEnabled != nil { + modelMap["multi_tenancy_enabled"] = *model.MultiTenancyEnabled + } + if model.NodeIps != nil { + modelMap["node_ips"] = model.NodeIps + } + if model.NumberOfNodes != nil { + modelMap["number_of_nodes"] = flex.IntValue(model.NumberOfNodes) + } + if model.PatchTargetUpgradeURL != nil { + modelMap["patch_target_upgrade_url"] = *model.PatchTargetUpgradeURL + } + if model.PatchTargetVersion != nil { + modelMap["patch_target_version"] = *model.PatchTargetVersion + } + if model.ProviderType != nil { + modelMap["provider_type"] = *model.ProviderType + } + if model.ScheduledTimestamp != nil { + modelMap["scheduled_timestamp"] = flex.IntValue(model.ScheduledTimestamp) + } + if model.Status != nil { + modelMap["status"] = *model.Status + } + if model.TargetUpgradeURL != nil { + modelMap["target_upgrade_url"] = *model.TargetUpgradeURL + } + if model.TargetVersion != nil { + modelMap["target_version"] = *model.TargetVersion + } + if model.TotalCapacity != nil { + modelMap["total_capacity"] = flex.IntValue(model.TotalCapacity) + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.UpdateType != nil { + modelMap["update_type"] = *model.UpdateType + } + if model.UsedCapacity != nil { + modelMap["used_capacity"] = flex.IntValue(model.UsedCapacity) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailableReleaseVersionToMap(model *backuprecoveryv1.AvailableReleaseVersion) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Notes != nil { + modelMap["notes"] = *model.Notes + } + if model.PatchDetails != nil { + patchDetailsMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailablePatchReleaseToMap(model.PatchDetails) + if err != nil { + return modelMap, err + } + modelMap["patch_details"] = []map[string]interface{}{patchDetailsMap} + } + if model.ReleaseStage != nil { + modelMap["release_stage"] = *model.ReleaseStage + } + if model.ReleaseType != nil { + modelMap["release_type"] = *model.ReleaseType + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.Version != nil { + modelMap["version"] = *model.Version + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailablePatchReleaseToMap(model *backuprecoveryv1.AvailablePatchRelease) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Notes != nil { + modelMap["notes"] = *model.Notes + } + if model.ReleaseType != nil { + modelMap["release_type"] = *model.ReleaseType + } + if model.Version != nil { + modelMap["version"] = *model.Version + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoSPClusterInfoToMap(model *backuprecoveryv1.SPClusterInfo) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + if model.ClusterName != nil { + modelMap["cluster_name"] = *model.ClusterName + } + if model.CurrentVersion != nil { + modelMap["current_version"] = *model.CurrentVersion + } + if model.Health != nil { + modelMap["health"] = *model.Health + } + if model.IsConnectedToHelios != nil { + modelMap["is_connected_to_helios"] = *model.IsConnectedToHelios + } + if model.NodeIps != nil { + modelMap["node_ips"] = model.NodeIps + } + if model.NumberOfNodes != nil { + modelMap["number_of_nodes"] = flex.IntValue(model.NumberOfNodes) + } + if model.ProviderType != nil { + modelMap["provider_type"] = *model.ProviderType + } + if model.TotalCapacity != nil { + modelMap["total_capacity"] = flex.IntValue(model.TotalCapacity) + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.UsedCapacity != nil { + modelMap["used_capacity"] = flex.IntValue(model.UsedCapacity) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go new file mode 100644 index 0000000000..7563fb8801 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go @@ -0,0 +1,39 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetClusterInfoDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetClusterInfoDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_cluster_info.backup_recovery_manager_sre_get_cluster_info_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetClusterInfoDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_cluster_info" "backup_recovery_manager_sre_get_cluster_info_instance" { + } + `) +} From 35096d6223d5319552aa25c651b8c0e0de886c89 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Wed, 2 Jul 2025 11:22:08 +0530 Subject: [PATCH 03/15] add reporting support --- ibm/provider/provider.go | 7 + ...m_backup_recovery_manager_export_report.go | 502 +++++++ ...kup_recovery_manager_export_report_test.go | 46 + ...m_backup_recovery_manager_get_component.go | 622 +++++++++ ..._recovery_manager_get_component_preview.go | 1234 +++++++++++++++++ ...very_manager_get_component_preview_test.go | 514 +++++++ ...kup_recovery_manager_get_component_test.go | 361 +++++ ..._ibm_backup_recovery_manager_get_report.go | 129 ++ ...kup_recovery_manager_get_report_preview.go | 1050 ++++++++++++++ ...ecovery_manager_get_report_preview_test.go | 514 +++++++ ...backup_recovery_manager_get_report_test.go | 41 + ...backup_recovery_manager_get_report_type.go | 110 ++ ...p_recovery_manager_get_report_type_test.go | 63 + ...ibm_backup_recovery_manager_get_reports.go | 166 +++ ...ackup_recovery_manager_get_reports_test.go | 71 + ...m_backup_recovery_manager_get_resources.go | 405 ++++++ ...kup_recovery_manager_get_resources_test.go | 171 +++ 17 files changed, 6006 insertions(+) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 05e24bf6db..bdef618a2c 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -274,7 +274,14 @@ func Provider() *schema.Provider { "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), + "ibm_backup_recovery_manager_get_component": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponent(), "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), + "ibm_backup_recovery_manager_export_report": backuprecovery.DataSourceIbmBackupRecoveryManagerExportReport(), + "ibm_backup_recovery_manager_get_report": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReport(), + "ibm_backup_recovery_manager_get_report_preview": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreview(), + "ibm_backup_recovery_manager_get_report_type": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportType(), + "ibm_backup_recovery_manager_get_reports": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReports(), + "ibm_backup_recovery_manager_get_resources": backuprecovery.DataSourceIbmBackupRecoveryManagerGetResources(), "ibm_backup_recovery_manager_sre_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetClusterInfo(), // // AppID diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go new file mode 100644 index 0000000000..975169aa59 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go @@ -0,0 +1,502 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery + +import ( + "context" + "fmt" + "io" + "log" + "os" + "time" + + "github.com/IBM/go-sdk-core/v5/core" + "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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerExportReport() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerExportReportRead, + + Schema: map[string]*schema.Schema{ + "report_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the id of the report.", + }, + "file_path": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the absolute path for download", + }, + "async": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Description: "Specifies if the report should be generated asynchronously.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of global filters that are applicable to given components in the report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "layout": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The layout of the report which needs to be exported.", + }, + "report_format": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The format in which the report needs to be exported.", + }, + "timezone": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerExportReportRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_export_report", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + exportReportOptions := &backuprecoveryv1.ExportReportOptions{} + + exportReportOptions.SetID(d.Get("report_id").(string)) + if _, ok := d.GetOk("async"); ok { + exportReportOptions.SetAsync(d.Get("async").(bool)) + } + if _, ok := d.GetOk("filters"); ok { + var newFilters []backuprecoveryv1.AttributeFilter + for _, v := range d.Get("filters").([]interface{}) { + value := v.(map[string]interface{}) + newFiltersItem, err := ResourceIbmBackupRecoveryManagerExportReportMapToAttributeFilter(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_export_report", "read", "parse-filters").GetDiag() + } + newFilters = append(newFilters, *newFiltersItem) + } + exportReportOptions.SetFilters(newFilters) + } + if _, ok := d.GetOk("layout"); ok { + exportReportOptions.SetLayout(d.Get("layout").(string)) + } + if _, ok := d.GetOk("report_format"); ok { + exportReportOptions.SetReportFormat(d.Get("report_format").(string)) + } + if _, ok := d.GetOk("timezone"); ok { + exportReportOptions.SetTimezone(d.Get("timezone").(string)) + } + + typeString, _, err := backupRecoveryClient.ExportReportWithContext(context, exportReportOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ExportReportWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_export_report", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerExportReportID(d)) + + err = saveReportExportToFile(typeString, d.Get("file_path").(string)) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_download_agent", "read", "parse-linux_params").GetDiag() + } + + return nil +} + +func saveReportExportToFile(response io.ReadCloser, filePath string) error { + outputFile, err := os.Create(filePath) + if err != nil { + return err + } + defer outputFile.Close() + + _, err = io.Copy(outputFile, response) + if err != nil { + return err + } + + err = response.Close() + if err != nil { + return err + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerExportReportID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerExportReportID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func ResourceIbmBackupRecoveryManagerExportReportMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { + model := &backuprecoveryv1.AttributeFilter{} + model.Attribute = core.StringPtr(modelMap["attribute"].(string)) + model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) + if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { + InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.InFilterParams = InFilterParamsModel + } + if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { + RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.RangeFilterParams = RangeFilterParamsModel + } + if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { + SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.SystemsFilterParams = SystemsFilterParamsModel + } + if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { + TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.TimeRangeFilterParams = TimeRangeFilterParamsModel + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { + model := &backuprecoveryv1.InFilterParams{} + model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) + if modelMap["attribute_labels"] != nil { + attributeLabels := []string{} + for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { + attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) + } + model.AttributeLabels = attributeLabels + } + if modelMap["bool_filter_values"] != nil { + boolFilterValues := []bool{} + for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { + boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) + } + model.BoolFilterValues = boolFilterValues + } + if modelMap["int32_filter_values"] != nil { + int32FilterValues := []int64{} + for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { + int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) + } + model.Int32FilterValues = int32FilterValues + } + if modelMap["int64_filter_values"] != nil { + int64FilterValues := []int64{} + for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { + int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) + } + model.Int64FilterValues = int64FilterValues + } + if modelMap["string_filter_values"] != nil { + stringFilterValues := []string{} + for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { + stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) + } + model.StringFilterValues = stringFilterValues + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { + model := &backuprecoveryv1.RangeFilterParams{} + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { + model := &backuprecoveryv1.SystemsFilterParams{} + systemIds := []string{} + for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { + systemIds = append(systemIds, systemIdsItem.(string)) + } + model.SystemIds = systemIds + if modelMap["system_names"] != nil { + systemNames := []string{} + for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { + systemNames = append(systemNames, systemNamesItem.(string)) + } + model.SystemNames = systemNames + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { + model := &backuprecoveryv1.TimeRangeFilterParams{} + if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { + model.DateRange = core.StringPtr(modelMap["date_range"].(string)) + } + if modelMap["duration_hours"] != nil { + model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) + } + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerExportReportTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go new file mode 100644 index 0000000000..85e4cc3d7d --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go @@ -0,0 +1,46 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerExportReportDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerExportReportDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_export_report.backup_recovery_manager_export_report_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_export_report.backup_recovery_manager_export_report_instance", "backup_recovery_manager_export_report_id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerExportReportDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_export_report" "backup_recovery_manager_export_report_instance" { + id = "id" + async = true + filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] + layout = "layout" + reportFormat = "XLS" + timezone = "timezone" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go new file mode 100644 index 0000000000..69b016235c --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go @@ -0,0 +1,622 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +import ( + "context" + "fmt" + "log" + + "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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetComponent() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentRead, + + Schema: map[string]*schema.Schema{ + "component_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the id of the report component.", + }, + "aggs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the aggregation related information that needs to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregated_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of aggregation properties to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregation_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the aggregation type.", + }, + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute name.", + }, + "label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", + }, + }, + }, + }, + "grouped_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of attributes to be grouped in the aggregation.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "xlsx_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize a component in excel report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "custom_label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", + }, + "format": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + "data": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the data returned after evaluating the component.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Component.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "limit": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the parameters to limit the resulting dataset.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "from": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", + }, + "size": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of objects to be returned from the offset specified.", + }, + }, + }, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Component.", + }, + "report_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the report type on top of which this Component is created from.", + }, + "sort": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "desc": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether the sorting order should be descending. Default value is false.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetComponentRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosReportingServiceApIsClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getComponentByIdOptions := &backuprecoveryv1.GetComponentByIdOptions{} + + getComponentByIdOptions.SetID(d.Get("component_id").(string)) + + component, _, err := heliosReportingServiceApIsClient.GetComponentByIDWithContext(context, getComponentByIdOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentByIDWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_component", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(*component.ID) + + if !core.IsNil(component.Aggs) { + aggs := []map[string]interface{}{} + aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(component.Aggs) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "aggs-to-map").GetDiag() + } + aggs = append(aggs, aggsMap) + if err = d.Set("aggs", aggs); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggs: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-aggs").GetDiag() + } + } + + if !core.IsNil(component.Config) { + config := []map[string]interface{}{} + configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(component.Config) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "config-to-map").GetDiag() + } + config = append(config, configMap) + if err = d.Set("config", config); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting config: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-config").GetDiag() + } + } + + if !core.IsNil(component.Data) { + data := []map[string]interface{}{} + for _, dataItem := range component.Data { + data = append(data, dataItem) + } + if err = d.Set("data", data); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting data: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-data").GetDiag() + } + } + + if !core.IsNil(component.Description) { + if err = d.Set("description", component.Description); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-description").GetDiag() + } + } + + if !core.IsNil(component.Filters) { + filters := []map[string]interface{}{} + for _, filtersItem := range component.Filters { + filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(&filtersItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "filters-to-map").GetDiag() + } + filters = append(filters, filtersItemMap) + } + if err = d.Set("filters", filters); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting filters: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-filters").GetDiag() + } + } + + if !core.IsNil(component.Limit) { + limit := []map[string]interface{}{} + limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(component.Limit) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "limit-to-map").GetDiag() + } + limit = append(limit, limitMap) + if err = d.Set("limit", limit); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting limit: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-limit").GetDiag() + } + } + + if !core.IsNil(component.Name) { + if err = d.Set("name", component.Name); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-name").GetDiag() + } + } + + if !core.IsNil(component.ReportType) { + if err = d.Set("report_type", component.ReportType); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting report_type: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-report_type").GetDiag() + } + } + + if !core.IsNil(component.Sort) { + sort := []map[string]interface{}{} + for _, sortItem := range component.Sort { + sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(&sortItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "sort-to-map").GetDiag() + } + sort = append(sort, sortItemMap) + } + if err = d.Set("sort", sort); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sort: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-sort").GetDiag() + } + } + + return nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AggregatedAttributes != nil { + aggregatedAttributes := []map[string]interface{}{} + for _, aggregatedAttributesItem := range model.AggregatedAttributes { + aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 + if err != nil { + return modelMap, err + } + aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) + } + modelMap["aggregated_attributes"] = aggregatedAttributes + } + if model.GroupedAttributes != nil { + modelMap["grouped_attributes"] = model.GroupedAttributes + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["aggregation_type"] = *model.AggregationType + modelMap["attribute"] = *model.Attribute + if model.Label != nil { + modelMap["label"] = *model.Label + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.XlsxParams != nil { + xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model.XlsxParams) + if err != nil { + return modelMap, err + } + modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AttributeConfig != nil { + attributeConfig := []map[string]interface{}{} + for _, attributeConfigItem := range model.AttributeConfig { + attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 + if err != nil { + return modelMap, err + } + attributeConfig = append(attributeConfig, attributeConfigItemMap) + } + modelMap["attribute_config"] = attributeConfig + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_name"] = *model.AttributeName + if model.CustomLabel != nil { + modelMap["custom_label"] = *model.CustomLabel + } + if model.Format != nil { + modelMap["format"] = *model.Format + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.From != nil { + modelMap["from"] = flex.IntValue(model.From) + } + modelMap["size"] = flex.IntValue(model.Size) + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + if model.Desc != nil { + modelMap["desc"] = *model.Desc + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go new file mode 100644 index 0000000000..6e58f77a3a --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go @@ -0,0 +1,1234 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetComponentPreview() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentPreviewRead, + + Schema: map[string]*schema.Schema{ + "component_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the id of the component.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of global filters that are applicable to given components in the report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "sort": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "desc": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether the sorting order should be descending. Default value is false.", + }, + }, + }, + }, + "timezone": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", + }, + "component": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies a Report Component.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the aggregation related information that needs to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregated_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of aggregation properties to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregation_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the aggregation type.", + }, + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute name.", + }, + "label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", + }, + }, + }, + }, + "grouped_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of attributes to be grouped in the aggregation.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "xlsx_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize a component in excel report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "custom_label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", + }, + "format": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + "data": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the data returned after evaluating the component.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Component.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Component.", + }, + "limit": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the parameters to limit the resulting dataset.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "from": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", + }, + "size": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of objects to be returned from the offset specified.", + }, + }, + }, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Component.", + }, + "report_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the report type on top of which this Component is created from.", + }, + "sort": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "desc": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether the sorting order should be descending. Default value is false.", + }, + }, + }, + }, + }, + }, + }, + "generated_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the epoch timestamp in UTC in microseconds.", + }, + "last_refresh_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the last refresh timestamp of data used to evaluate the component. If this parameter is not returned, then 'generatedTimestampUsecs' can be used for last refreshed timestamp of the data. This is epoch timestamp in UTC in microseconds.", + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetComponentPreviewRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getComponentPreviewOptions := &backuprecoveryv1.GetComponentPreviewOptions{} + + getComponentPreviewOptions.SetID(d.Get("component_id").(string)) + + if _, ok := d.GetOk("filters"); ok { + var filters []backuprecoveryv1.AttributeFilter + for _, v := range d.Get("filters").([]interface{}) { + value := v.(map[string]interface{}) + filtersItem, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeFilter(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "parse-filters").GetDiag() + } + filters = append(filters, *filtersItem) + } + getComponentPreviewOptions.SetFilters(filters) + } + if _, ok := d.GetOk("limit"); ok { + limitModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToLimitParams(d.Get("limit.0").(map[string]interface{})) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_get_component_preview", "read", "parse-limit").GetDiag() + } + getComponentPreviewOptions.SetLimit(limitModel) + } + if _, ok := d.GetOk("sort"); ok { + var sort []backuprecoveryv1.AttributeSort + for _, v := range d.Get("sort").([]interface{}) { + value := v.(map[string]interface{}) + sortItem, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeSort(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "parse-sort").GetDiag() + } + sort = append(sort, *sortItem) + } + getComponentPreviewOptions.SetSort(sort) + } + if _, ok := d.GetOk("timezone"); ok { + getComponentPreviewOptions.SetTimezone(d.Get("timezone").(string)) + } + + componentPreview, _, err := backupRecoveryClient.GetComponentPreviewWithContext(context, getComponentPreviewOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentPreviewWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_component_preview", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetComponentPreviewID(d)) + + if !core.IsNil(componentPreview.Component) { + component := []map[string]interface{}{} + componentMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(componentPreview.Component) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "component-to-map").GetDiag() + } + component = append(component, componentMap) + if err = d.Set("component", component); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting component: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-component").GetDiag() + } + } + + if !core.IsNil(componentPreview.GeneratedTimestampUsecs) { + if err = d.Set("generated_timestamp_usecs", flex.IntValue(componentPreview.GeneratedTimestampUsecs)); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting generated_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-generated_timestamp_usecs").GetDiag() + } + } + + if !core.IsNil(componentPreview.LastRefreshTimestampUsecs) { + if err = d.Set("last_refresh_timestamp_usecs", flex.IntValue(componentPreview.LastRefreshTimestampUsecs)); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting last_refresh_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-last_refresh_timestamp_usecs").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetComponentPreviewID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetComponentPreviewID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Aggs != nil { + aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model.Aggs) + if err != nil { + return modelMap, err + } + modelMap["aggs"] = []map[string]interface{}{aggsMap} + } + if model.Config != nil { + configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model.Config) + if err != nil { + return modelMap, err + } + modelMap["config"] = []map[string]interface{}{configMap} + } + if model.Data != nil { + modelMap["data"] = model.Data + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.Filters != nil { + filters := []map[string]interface{}{} + for _, filtersItem := range model.Filters { + filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 + if err != nil { + return modelMap, err + } + filters = append(filters, filtersItemMap) + } + modelMap["filters"] = filters + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Limit != nil { + limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model.Limit) + if err != nil { + return modelMap, err + } + modelMap["limit"] = []map[string]interface{}{limitMap} + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.ReportType != nil { + modelMap["report_type"] = *model.ReportType + } + if model.Sort != nil { + sort := []map[string]interface{}{} + for _, sortItem := range model.Sort { + sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(&sortItem) // #nosec G601 + if err != nil { + return modelMap, err + } + sort = append(sort, sortItemMap) + } + modelMap["sort"] = sort + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AggregatedAttributes != nil { + aggregatedAttributes := []map[string]interface{}{} + for _, aggregatedAttributesItem := range model.AggregatedAttributes { + aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 + if err != nil { + return modelMap, err + } + aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) + } + modelMap["aggregated_attributes"] = aggregatedAttributes + } + if model.GroupedAttributes != nil { + modelMap["grouped_attributes"] = model.GroupedAttributes + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["aggregation_type"] = *model.AggregationType + modelMap["attribute"] = *model.Attribute + if model.Label != nil { + modelMap["label"] = *model.Label + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.XlsxParams != nil { + xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) + if err != nil { + return modelMap, err + } + modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AttributeConfig != nil { + attributeConfig := []map[string]interface{}{} + for _, attributeConfigItem := range model.AttributeConfig { + attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 + if err != nil { + return modelMap, err + } + attributeConfig = append(attributeConfig, attributeConfigItemMap) + } + modelMap["attribute_config"] = attributeConfig + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_name"] = *model.AttributeName + if model.CustomLabel != nil { + modelMap["custom_label"] = *model.CustomLabel + } + if model.Format != nil { + modelMap["format"] = *model.Format + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.From != nil { + modelMap["from"] = flex.IntValue(model.From) + } + modelMap["size"] = flex.IntValue(model.Size) + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + if model.Desc != nil { + modelMap["desc"] = *model.Desc + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { + model := &backuprecoveryv1.AttributeFilter{} + model.Attribute = core.StringPtr(modelMap["attribute"].(string)) + model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) + if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { + InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.InFilterParams = InFilterParamsModel + } + if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { + RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.RangeFilterParams = RangeFilterParamsModel + } + if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { + SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.SystemsFilterParams = SystemsFilterParamsModel + } + if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { + TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.TimeRangeFilterParams = TimeRangeFilterParamsModel + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { + model := &backuprecoveryv1.InFilterParams{} + model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) + if modelMap["attribute_labels"] != nil { + attributeLabels := []string{} + for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { + attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) + } + model.AttributeLabels = attributeLabels + } + if modelMap["bool_filter_values"] != nil { + boolFilterValues := []bool{} + for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { + boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) + } + model.BoolFilterValues = boolFilterValues + } + if modelMap["int32_filter_values"] != nil { + int32FilterValues := []int64{} + for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { + int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) + } + model.Int32FilterValues = int32FilterValues + } + if modelMap["int64_filter_values"] != nil { + int64FilterValues := []int64{} + for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { + int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) + } + model.Int64FilterValues = int64FilterValues + } + if modelMap["string_filter_values"] != nil { + stringFilterValues := []string{} + for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { + stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) + } + model.StringFilterValues = stringFilterValues + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { + model := &backuprecoveryv1.RangeFilterParams{} + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { + model := &backuprecoveryv1.SystemsFilterParams{} + systemIds := []string{} + for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { + systemIds = append(systemIds, systemIdsItem.(string)) + } + model.SystemIds = systemIds + if modelMap["system_names"] != nil { + systemNames := []string{} + for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { + systemNames = append(systemNames, systemNamesItem.(string)) + } + model.SystemNames = systemNames + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { + model := &backuprecoveryv1.TimeRangeFilterParams{} + if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { + model.DateRange = core.StringPtr(modelMap["date_range"].(string)) + } + if modelMap["duration_hours"] != nil { + model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) + } + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToLimitParams(modelMap map[string]interface{}) (*backuprecoveryv1.LimitParams, error) { + model := &backuprecoveryv1.LimitParams{} + if modelMap["from"] != nil { + model.From = core.Int64Ptr(int64(modelMap["from"].(int))) + } + model.Size = core.Int64Ptr(int64(modelMap["size"].(int))) + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeSort(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeSort, error) { + model := &backuprecoveryv1.AttributeSort{} + model.Attribute = core.StringPtr(modelMap["attribute"].(string)) + if modelMap["desc"] != nil { + model.Desc = core.BoolPtr(modelMap["desc"].(bool)) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Aggs != nil { + aggsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model.Aggs) + if err != nil { + return modelMap, err + } + modelMap["aggs"] = []map[string]interface{}{aggsMap} + } + if model.Config != nil { + configMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model.Config) + if err != nil { + return modelMap, err + } + modelMap["config"] = []map[string]interface{}{configMap} + } + if model.Data != nil { + modelMap["data"] = model.Data + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.Filters != nil { + filters := []map[string]interface{}{} + for _, filtersItem := range model.Filters { + filtersItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 + if err != nil { + return modelMap, err + } + filters = append(filters, filtersItemMap) + } + modelMap["filters"] = filters + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Limit != nil { + limitMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model.Limit) + if err != nil { + return modelMap, err + } + modelMap["limit"] = []map[string]interface{}{limitMap} + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.ReportType != nil { + modelMap["report_type"] = *model.ReportType + } + if model.Sort != nil { + sort := []map[string]interface{}{} + for _, sortItem := range model.Sort { + sortItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(&sortItem) // #nosec G601 + if err != nil { + return modelMap, err + } + sort = append(sort, sortItemMap) + } + modelMap["sort"] = sort + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AggregatedAttributes != nil { + aggregatedAttributes := []map[string]interface{}{} + for _, aggregatedAttributesItem := range model.AggregatedAttributes { + aggregatedAttributesItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 + if err != nil { + return modelMap, err + } + aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) + } + modelMap["aggregated_attributes"] = aggregatedAttributes + } + if model.GroupedAttributes != nil { + modelMap["grouped_attributes"] = model.GroupedAttributes + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["aggregation_type"] = *model.AggregationType + modelMap["attribute"] = *model.Attribute + if model.Label != nil { + modelMap["label"] = *model.Label + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.XlsxParams != nil { + xlsxParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) + if err != nil { + return modelMap, err + } + modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AttributeConfig != nil { + attributeConfig := []map[string]interface{}{} + for _, attributeConfigItem := range model.AttributeConfig { + attributeConfigItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 + if err != nil { + return modelMap, err + } + attributeConfig = append(attributeConfig, attributeConfigItemMap) + } + modelMap["attribute_config"] = attributeConfig + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_name"] = *model.AttributeName + if model.CustomLabel != nil { + modelMap["custom_label"] = *model.CustomLabel + } + if model.Format != nil { + modelMap["format"] = *model.Format + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.From != nil { + modelMap["from"] = flex.IntValue(model.From) + } + modelMap["size"] = flex.IntValue(model.Size) + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + if model.Desc != nil { + modelMap["desc"] = *model.Desc + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go new file mode 100644 index 0000000000..90068be409 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go @@ -0,0 +1,514 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetComponentPreviewDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetComponentPreviewDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component_preview.backup_recovery_manager_get_component_preview_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component_preview.backup_recovery_manager_get_component_preview_instance", "backup_recovery_manager_get_component_preview_id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetComponentPreviewDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_component_preview" "backup_recovery_manager_get_component_preview_instance" { + id = "id" + filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] + sort = [ { attribute="attribute", desc=true } ] + timezone = "timezone" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + attributeAggregationsModel := make(map[string]interface{}) + attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + attributeAggregationsModel["grouped_attributes"] = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := make(map[string]interface{}) + customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + attributeFilterModel := make(map[string]interface{}) + attributeFilterModel["attribute"] = "testString" + attributeFilterModel["filter_type"] = "In" + attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + limitParamsModel := make(map[string]interface{}) + limitParamsModel["from"] = int(38) + limitParamsModel["size"] = int(1) + + attributeSortModel := make(map[string]interface{}) + attributeSortModel["attribute"] = "testString" + attributeSortModel["desc"] = true + + model := make(map[string]interface{}) + model["aggs"] = []map[string]interface{}{attributeAggregationsModel} + model["config"] = []map[string]interface{}{customConfigParamsModel} + model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model["description"] = "testString" + model["filters"] = []map[string]interface{}{attributeFilterModel} + model["id"] = "testString" + model["limit"] = []map[string]interface{}{limitParamsModel} + model["name"] = "testString" + model["report_type"] = "Failures" + model["sort"] = []map[string]interface{}{attributeSortModel} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) + attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + attributeAggregationsModel.GroupedAttributes = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) + customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + attributeFilterModel := new(backuprecoveryv1.AttributeFilter) + attributeFilterModel.Attribute = core.StringPtr("testString") + attributeFilterModel.FilterType = core.StringPtr("In") + attributeFilterModel.InFilterParams = inFilterParamsModel + attributeFilterModel.RangeFilterParams = rangeFilterParamsModel + attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel + attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel + + limitParamsModel := new(backuprecoveryv1.LimitParams) + limitParamsModel.From = core.Int64Ptr(int64(38)) + limitParamsModel.Size = core.Int64Ptr(int64(1)) + + attributeSortModel := new(backuprecoveryv1.AttributeSort) + attributeSortModel.Attribute = core.StringPtr("testString") + attributeSortModel.Desc = core.BoolPtr(true) + + model := new(backuprecoveryv1.Component) + model.Aggs = attributeAggregationsModel + model.Config = customConfigParamsModel + model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model.Description = core.StringPtr("testString") + model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} + model.ID = core.StringPtr("testString") + model.Limit = limitParamsModel + model.Name = core.StringPtr("testString") + model.ReportType = core.StringPtr("Failures") + model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + model := make(map[string]interface{}) + model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + model["grouped_attributes"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + model := new(backuprecoveryv1.AttributeAggregations) + model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + model.GroupedAttributes = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["aggregation_type"] = "sum" + model["attribute"] = "testString" + model["label"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AggregatedAttributesParams) + model.AggregationType = core.StringPtr("sum") + model.Attribute = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + model := make(map[string]interface{}) + model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + model := new(backuprecoveryv1.CustomConfigParams) + model.XlsxParams = xlsxCustomConfigParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + model := make(map[string]interface{}) + model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + model := new(backuprecoveryv1.XlsxCustomConfigParams) + model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_name"] = "testString" + model["custom_label"] = "testString" + model["format"] = "Timestamp" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + model.AttributeName = core.StringPtr("testString") + model.CustomLabel = core.StringPtr("testString") + model.Format = core.StringPtr("Timestamp") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["filter_type"] = "In" + model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + assert.Equal(t, result, model) + } + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + model := new(backuprecoveryv1.AttributeFilter) + model.Attribute = core.StringPtr("testString") + model.FilterType = core.StringPtr("In") + model.InFilterParams = inFilterParamsModel + model.RangeFilterParams = rangeFilterParamsModel + model.SystemsFilterParams = systemsFilterParamsModel + model.TimeRangeFilterParams = timeRangeFilterParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_data_type"] = "Bool" + model["attribute_labels"] = []string{"testString"} + model["bool_filter_values"] = []bool{true} + model["int32_filter_values"] = []int64{int64(38)} + model["int64_filter_values"] = []int64{int64(26)} + model["string_filter_values"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.InFilterParams) + model.AttributeDataType = core.StringPtr("Bool") + model.AttributeLabels = []string{"testString"} + model.BoolFilterValues = []bool{true} + model.Int32FilterValues = []int64{int64(38)} + model.Int64FilterValues = []int64{int64(26)} + model.StringFilterValues = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.RangeFilterParams) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["system_ids"] = []string{"testString"} + model["system_names"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.SystemsFilterParams) + model.SystemIds = []string{"testString"} + model.SystemNames = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["date_range"] = "Last1Hour" + model["duration_hours"] = int(26) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.TimeRangeFilterParams) + model.DateRange = core.StringPtr("Last1Hour") + model.DurationHours = core.Int64Ptr(int64(26)) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["from"] = int(38) + model["size"] = int(1) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.LimitParams) + model.From = core.Int64Ptr(int64(38)) + model.Size = core.Int64Ptr(int64(1)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["desc"] = true + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AttributeSort) + model.Attribute = core.StringPtr("testString") + model.Desc = core.BoolPtr(true) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go new file mode 100644 index 0000000000..6437f043be --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go @@ -0,0 +1,361 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetComponentDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetComponentDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component.backup_recovery_manager_get_component_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component.backup_recovery_manager_get_component_instance", "backup_recovery_manager_get_component_id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetComponentDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_component" "backup_recovery_manager_get_component_instance" { + id = "id" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + model := make(map[string]interface{}) + model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + model["grouped_attributes"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + model := new(backuprecoveryv1.AttributeAggregations) + model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + model.GroupedAttributes = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["aggregation_type"] = "sum" + model["attribute"] = "testString" + model["label"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AggregatedAttributesParams) + model.AggregationType = core.StringPtr("sum") + model.Attribute = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + model := make(map[string]interface{}) + model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + model := new(backuprecoveryv1.CustomConfigParams) + model.XlsxParams = xlsxCustomConfigParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + model := make(map[string]interface{}) + model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + model := new(backuprecoveryv1.XlsxCustomConfigParams) + model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_name"] = "testString" + model["custom_label"] = "testString" + model["format"] = "Timestamp" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + model.AttributeName = core.StringPtr("testString") + model.CustomLabel = core.StringPtr("testString") + model.Format = core.StringPtr("Timestamp") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["filter_type"] = "In" + model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + assert.Equal(t, result, model) + } + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + model := new(backuprecoveryv1.AttributeFilter) + model.Attribute = core.StringPtr("testString") + model.FilterType = core.StringPtr("In") + model.InFilterParams = inFilterParamsModel + model.RangeFilterParams = rangeFilterParamsModel + model.SystemsFilterParams = systemsFilterParamsModel + model.TimeRangeFilterParams = timeRangeFilterParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_data_type"] = "Bool" + model["attribute_labels"] = []string{"testString"} + model["bool_filter_values"] = []bool{true} + model["int32_filter_values"] = []int64{int64(38)} + model["int64_filter_values"] = []int64{int64(26)} + model["string_filter_values"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.InFilterParams) + model.AttributeDataType = core.StringPtr("Bool") + model.AttributeLabels = []string{"testString"} + model.BoolFilterValues = []bool{true} + model.Int32FilterValues = []int64{int64(38)} + model.Int64FilterValues = []int64{int64(26)} + model.StringFilterValues = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.RangeFilterParams) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["system_ids"] = []string{"testString"} + model["system_names"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.SystemsFilterParams) + model.SystemIds = []string{"testString"} + model.SystemNames = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["date_range"] = "Last1Hour" + model["duration_hours"] = int(26) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.TimeRangeFilterParams) + model.DateRange = core.StringPtr("Last1Hour") + model.DurationHours = core.Int64Ptr(int64(26)) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["from"] = int(38) + model["size"] = int(1) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.LimitParams) + model.From = core.Int64Ptr(int64(38)) + model.Size = core.Int64Ptr(int64(1)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["desc"] = true + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AttributeSort) + model.Attribute = core.StringPtr("testString") + model.Desc = core.BoolPtr(true) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go new file mode 100644 index 0000000000..50cb725901 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go @@ -0,0 +1,129 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery + +import ( + "context" + "fmt" + "log" + + "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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetReport() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetReportRead, + + Schema: map[string]*schema.Schema{ + "report_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the id of the report.", + }, + "category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies categoty of the Report.", + }, + "component_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of component ids in the Report.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Report.", + }, + "supported_user_contexts": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies all the supported user contexts for this report.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "title": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the title of the report.", + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetReportRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getReportByIdOptions := &backuprecoveryv1.GetReportByIdOptions{} + + getReportByIdOptions.SetID(d.Get("report_id").(string)) + + report, _, err := backupRecoveryClient.GetReportByIDWithContext(context, getReportByIdOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportByIDWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(*report.ID) + + if !core.IsNil(report.Category) { + if err = d.Set("category", report.Category); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting category: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-category").GetDiag() + } + } + + if !core.IsNil(report.ComponentIds) { + componentIds := []interface{}{} + for _, componentIdsItem := range report.ComponentIds { + componentIds = append(componentIds, componentIdsItem) + } + if err = d.Set("component_ids", componentIds); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting component_ids: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-component_ids").GetDiag() + } + } + + if !core.IsNil(report.Description) { + if err = d.Set("description", report.Description); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-description").GetDiag() + } + } + + if !core.IsNil(report.SupportedUserContexts) { + supportedUserContexts := []interface{}{} + for _, supportedUserContextsItem := range report.SupportedUserContexts { + supportedUserContexts = append(supportedUserContexts, supportedUserContextsItem) + } + if err = d.Set("supported_user_contexts", supportedUserContexts); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting supported_user_contexts: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-supported_user_contexts").GetDiag() + } + } + + if !core.IsNil(report.Title) { + if err = d.Set("title", report.Title); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting title: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-title").GetDiag() + } + } + + return nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go new file mode 100644 index 0000000000..ff55e38eae --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go @@ -0,0 +1,1050 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +import ( + "context" + "fmt" + "log" + + "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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetReportPreview() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetReportPreviewRead, + + Schema: map[string]*schema.Schema{ + "report_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the id of the report.", + }, + "component_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of components ids to be evaluated for the given report. If not specified, then all the components are evaluated.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of global filters that are applicable to given components in the report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "timezone": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", + }, + "components": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the component params and data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the aggregation related information that needs to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregated_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of aggregation properties to be applied on the attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "aggregation_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the aggregation type.", + }, + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute name.", + }, + "label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", + }, + }, + }, + }, + "grouped_attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of attributes to be grouped in the aggregation.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "xlsx_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the configuration parameters to customize a component in excel report.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_config": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "custom_label": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", + }, + "format": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + "data": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the data returned after evaluating the component.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Component.", + }, + "filters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute.", + }, + "filter_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the filter that needs to be applied.", + }, + "in_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the in filter that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute_data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "attribute_labels": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional label values for the attribute.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "bool_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of boolean values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeBool, + }, + }, + "int32_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int32 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "int64_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of int64 values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "string_filter_values": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of string values to filter results on.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the filters that are applied on attributes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + "systems_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "system_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "system_names": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the optional system names labels.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "time_range_filter_params": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "date_range": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", + }, + "duration_hours": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", + }, + "lower_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", + }, + "upper_bound": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", + }, + }, + }, + }, + }, + }, + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Component.", + }, + "limit": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the parameters to limit the resulting dataset.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "from": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", + }, + "size": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the number of objects to be returned from the offset specified.", + }, + }, + }, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Component.", + }, + "report_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the report type on top of which this Component is created from.", + }, + "sort": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "attribute": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the attribute.", + }, + "desc": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether the sorting order should be descending. Default value is false.", + }, + }, + }, + }, + }, + }, + }, + "generated_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the epoch timestamp in UTC in microseconds.", + }, + "last_refresh_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the last refresh timestamp of data used to evaluate the component. If this parameter is not returned, then 'generatedTimestampUsecs' can be used for last refreshed timestamp of the data. This is epoch timestamp in UTC in microseconds.", + }, + "title": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the title of the report.", + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetReportPreviewRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getReportPreviewOptions := &backuprecoveryv1.GetReportPreviewOptions{} + + getReportPreviewOptions.SetID(d.Get("report_id").(string)) + if _, ok := d.GetOk("component_ids"); ok { + var componentIds []string + for _, v := range d.Get("component_ids").([]interface{}) { + componentIdsItem := v.(string) + componentIds = append(componentIds, componentIdsItem) + } + getReportPreviewOptions.SetComponentIds(componentIds) + } + if _, ok := d.GetOk("filters"); ok { + var filters []backuprecoveryv1.AttributeFilter + for _, v := range d.Get("filters").([]interface{}) { + value := v.(map[string]interface{}) + filtersItem, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToAttributeFilter(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_get_report_preview", "read", "parse-filters").GetDiag() + } + filters = append(filters, *filtersItem) + } + getReportPreviewOptions.SetFilters(filters) + } + if _, ok := d.GetOk("timezone"); ok { + getReportPreviewOptions.SetTimezone(d.Get("timezone").(string)) + } + + reportPreview, _, err := backupRecoveryClient.GetReportPreviewWithContext(context, getReportPreviewOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportPreviewWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report_preview", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(*reportPreview.ID) + + if !core.IsNil(reportPreview.Components) { + components := []map[string]interface{}{} + for _, componentsItem := range reportPreview.Components { + componentsItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(&componentsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "components-to-map").GetDiag() + } + components = append(components, componentsItemMap) + } + if err = d.Set("components", components); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting components: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-components").GetDiag() + } + } + + if !core.IsNil(reportPreview.GeneratedTimestampUsecs) { + if err = d.Set("generated_timestamp_usecs", flex.IntValue(reportPreview.GeneratedTimestampUsecs)); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting generated_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-generated_timestamp_usecs").GetDiag() + } + } + + if !core.IsNil(reportPreview.LastRefreshTimestampUsecs) { + if err = d.Set("last_refresh_timestamp_usecs", flex.IntValue(reportPreview.LastRefreshTimestampUsecs)); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting last_refresh_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-last_refresh_timestamp_usecs").GetDiag() + } + } + + if !core.IsNil(reportPreview.Title) { + if err = d.Set("title", reportPreview.Title); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting title: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-title").GetDiag() + } + } + + return nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Aggs != nil { + aggsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model.Aggs) + if err != nil { + return modelMap, err + } + modelMap["aggs"] = []map[string]interface{}{aggsMap} + } + if model.Config != nil { + configMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model.Config) + if err != nil { + return modelMap, err + } + modelMap["config"] = []map[string]interface{}{configMap} + } + if model.Data != nil { + modelMap["data"] = model.Data + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.Filters != nil { + filters := []map[string]interface{}{} + for _, filtersItem := range model.Filters { + filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 + if err != nil { + return modelMap, err + } + filters = append(filters, filtersItemMap) + } + modelMap["filters"] = filters + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Limit != nil { + limitMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model.Limit) + if err != nil { + return modelMap, err + } + modelMap["limit"] = []map[string]interface{}{limitMap} + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.ReportType != nil { + modelMap["report_type"] = *model.ReportType + } + if model.Sort != nil { + sort := []map[string]interface{}{} + for _, sortItem := range model.Sort { + sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(&sortItem) // #nosec G601 + if err != nil { + return modelMap, err + } + sort = append(sort, sortItemMap) + } + modelMap["sort"] = sort + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AggregatedAttributes != nil { + aggregatedAttributes := []map[string]interface{}{} + for _, aggregatedAttributesItem := range model.AggregatedAttributes { + aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 + if err != nil { + return modelMap, err + } + aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) + } + modelMap["aggregated_attributes"] = aggregatedAttributes + } + if model.GroupedAttributes != nil { + modelMap["grouped_attributes"] = model.GroupedAttributes + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["aggregation_type"] = *model.AggregationType + modelMap["attribute"] = *model.Attribute + if model.Label != nil { + modelMap["label"] = *model.Label + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.XlsxParams != nil { + xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) + if err != nil { + return modelMap, err + } + modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AttributeConfig != nil { + attributeConfig := []map[string]interface{}{} + for _, attributeConfigItem := range model.AttributeConfig { + attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 + if err != nil { + return modelMap, err + } + attributeConfig = append(attributeConfig, attributeConfigItemMap) + } + modelMap["attribute_config"] = attributeConfig + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_name"] = *model.AttributeName + if model.CustomLabel != nil { + modelMap["custom_label"] = *model.CustomLabel + } + if model.Format != nil { + modelMap["format"] = *model.Format + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.From != nil { + modelMap["from"] = flex.IntValue(model.From) + } + modelMap["size"] = flex.IntValue(model.Size) + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + if model.Desc != nil { + modelMap["desc"] = *model.Desc + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { + model := &backuprecoveryv1.AttributeFilter{} + model.Attribute = core.StringPtr(modelMap["attribute"].(string)) + model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) + if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { + InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.InFilterParams = InFilterParamsModel + } + if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { + RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.RangeFilterParams = RangeFilterParamsModel + } + if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { + SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.SystemsFilterParams = SystemsFilterParamsModel + } + if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { + TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.TimeRangeFilterParams = TimeRangeFilterParamsModel + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { + model := &backuprecoveryv1.InFilterParams{} + model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) + if modelMap["attribute_labels"] != nil { + attributeLabels := []string{} + for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { + attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) + } + model.AttributeLabels = attributeLabels + } + if modelMap["bool_filter_values"] != nil { + boolFilterValues := []bool{} + for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { + boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) + } + model.BoolFilterValues = boolFilterValues + } + if modelMap["int32_filter_values"] != nil { + int32FilterValues := []int64{} + for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { + int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) + } + model.Int32FilterValues = int32FilterValues + } + if modelMap["int64_filter_values"] != nil { + int64FilterValues := []int64{} + for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { + int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) + } + model.Int64FilterValues = int64FilterValues + } + if modelMap["string_filter_values"] != nil { + stringFilterValues := []string{} + for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { + stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) + } + model.StringFilterValues = stringFilterValues + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { + model := &backuprecoveryv1.RangeFilterParams{} + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { + model := &backuprecoveryv1.SystemsFilterParams{} + systemIds := []string{} + for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { + systemIds = append(systemIds, systemIdsItem.(string)) + } + model.SystemIds = systemIds + if modelMap["system_names"] != nil { + systemNames := []string{} + for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { + systemNames = append(systemNames, systemNamesItem.(string)) + } + model.SystemNames = systemNames + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { + model := &backuprecoveryv1.TimeRangeFilterParams{} + if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { + model.DateRange = core.StringPtr(modelMap["date_range"].(string)) + } + if modelMap["duration_hours"] != nil { + model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) + } + if modelMap["lower_bound"] != nil { + model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) + } + if modelMap["upper_bound"] != nil { + model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute"] = *model.Attribute + modelMap["filter_type"] = *model.FilterType + if model.InFilterParams != nil { + inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model.InFilterParams) + if err != nil { + return modelMap, err + } + modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} + } + if model.RangeFilterParams != nil { + rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model.RangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} + } + if model.SystemsFilterParams != nil { + systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) + if err != nil { + return modelMap, err + } + modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} + } + if model.TimeRangeFilterParams != nil { + timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) + if err != nil { + return modelMap, err + } + modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["attribute_data_type"] = *model.AttributeDataType + if model.AttributeLabels != nil { + modelMap["attribute_labels"] = model.AttributeLabels + } + if model.BoolFilterValues != nil { + modelMap["bool_filter_values"] = model.BoolFilterValues + } + if model.Int32FilterValues != nil { + modelMap["int32_filter_values"] = model.Int32FilterValues + } + if model.Int64FilterValues != nil { + modelMap["int64_filter_values"] = model.Int64FilterValues + } + if model.StringFilterValues != nil { + modelMap["string_filter_values"] = model.StringFilterValues + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["system_ids"] = model.SystemIds + if model.SystemNames != nil { + modelMap["system_names"] = model.SystemNames + } + return modelMap, nil +} + +func ResourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DateRange != nil { + modelMap["date_range"] = *model.DateRange + } + if model.DurationHours != nil { + modelMap["duration_hours"] = flex.IntValue(model.DurationHours) + } + if model.LowerBound != nil { + modelMap["lower_bound"] = flex.IntValue(model.LowerBound) + } + if model.UpperBound != nil { + modelMap["upper_bound"] = flex.IntValue(model.UpperBound) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go new file mode 100644 index 0000000000..ce6feacb8f --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go @@ -0,0 +1,514 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetReportPreviewDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetReportPreviewDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_preview.backup_recovery_manager_get_report_preview_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_preview.backup_recovery_manager_get_report_preview_instance", "backup_recovery_manager_get_report_preview_id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetReportPreviewDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_report_preview" "backup_recovery_manager_get_report_preview_instance" { + id = "id" + componentIds = [ "componentIds" ] + filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] + timezone = "timezone" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + attributeAggregationsModel := make(map[string]interface{}) + attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + attributeAggregationsModel["grouped_attributes"] = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := make(map[string]interface{}) + customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + attributeFilterModel := make(map[string]interface{}) + attributeFilterModel["attribute"] = "testString" + attributeFilterModel["filter_type"] = "In" + attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + limitParamsModel := make(map[string]interface{}) + limitParamsModel["from"] = int(38) + limitParamsModel["size"] = int(1) + + attributeSortModel := make(map[string]interface{}) + attributeSortModel["attribute"] = "testString" + attributeSortModel["desc"] = true + + model := make(map[string]interface{}) + model["aggs"] = []map[string]interface{}{attributeAggregationsModel} + model["config"] = []map[string]interface{}{customConfigParamsModel} + model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model["description"] = "testString" + model["filters"] = []map[string]interface{}{attributeFilterModel} + model["id"] = "testString" + model["limit"] = []map[string]interface{}{limitParamsModel} + model["name"] = "testString" + model["report_type"] = "Failures" + model["sort"] = []map[string]interface{}{attributeSortModel} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) + attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + attributeAggregationsModel.GroupedAttributes = []string{"testString"} + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) + customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + attributeFilterModel := new(backuprecoveryv1.AttributeFilter) + attributeFilterModel.Attribute = core.StringPtr("testString") + attributeFilterModel.FilterType = core.StringPtr("In") + attributeFilterModel.InFilterParams = inFilterParamsModel + attributeFilterModel.RangeFilterParams = rangeFilterParamsModel + attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel + attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel + + limitParamsModel := new(backuprecoveryv1.LimitParams) + limitParamsModel.From = core.Int64Ptr(int64(38)) + limitParamsModel.Size = core.Int64Ptr(int64(1)) + + attributeSortModel := new(backuprecoveryv1.AttributeSort) + attributeSortModel.Attribute = core.StringPtr("testString") + attributeSortModel.Desc = core.BoolPtr(true) + + model := new(backuprecoveryv1.Component) + model.Aggs = attributeAggregationsModel + model.Config = customConfigParamsModel + model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} + model.Description = core.StringPtr("testString") + model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} + model.ID = core.StringPtr("testString") + model.Limit = limitParamsModel + model.Name = core.StringPtr("testString") + model.ReportType = core.StringPtr("Failures") + model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + aggregatedAttributesParamsModel := make(map[string]interface{}) + aggregatedAttributesParamsModel["aggregation_type"] = "sum" + aggregatedAttributesParamsModel["attribute"] = "testString" + aggregatedAttributesParamsModel["label"] = "testString" + + model := make(map[string]interface{}) + model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} + model["grouped_attributes"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) + aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") + aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") + aggregatedAttributesParamsModel.Label = core.StringPtr("testString") + + model := new(backuprecoveryv1.AttributeAggregations) + model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} + model.GroupedAttributes = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["aggregation_type"] = "sum" + model["attribute"] = "testString" + model["label"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AggregatedAttributesParams) + model.AggregationType = core.StringPtr("sum") + model.Attribute = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + xlsxCustomConfigParamsModel := make(map[string]interface{}) + xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + model := make(map[string]interface{}) + model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) + xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + model := new(backuprecoveryv1.CustomConfigParams) + model.XlsxParams = xlsxCustomConfigParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) + xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" + xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" + xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" + + model := make(map[string]interface{}) + model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} + + assert.Equal(t, result, model) + } + + xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") + xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") + + model := new(backuprecoveryv1.XlsxCustomConfigParams) + model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_name"] = "testString" + model["custom_label"] = "testString" + model["format"] = "Timestamp" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) + model.AttributeName = core.StringPtr("testString") + model.CustomLabel = core.StringPtr("testString") + model.Format = core.StringPtr("Timestamp") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + inFilterParamsModel := make(map[string]interface{}) + inFilterParamsModel["attribute_data_type"] = "Bool" + inFilterParamsModel["attribute_labels"] = []string{"testString"} + inFilterParamsModel["bool_filter_values"] = []bool{true} + inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} + inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} + inFilterParamsModel["string_filter_values"] = []string{"testString"} + + rangeFilterParamsModel := make(map[string]interface{}) + rangeFilterParamsModel["lower_bound"] = int(26) + rangeFilterParamsModel["upper_bound"] = int(26) + + systemsFilterParamsModel := make(map[string]interface{}) + systemsFilterParamsModel["system_ids"] = []string{"testString"} + systemsFilterParamsModel["system_names"] = []string{"testString"} + + timeRangeFilterParamsModel := make(map[string]interface{}) + timeRangeFilterParamsModel["date_range"] = "Last1Hour" + timeRangeFilterParamsModel["duration_hours"] = int(26) + timeRangeFilterParamsModel["lower_bound"] = int(26) + timeRangeFilterParamsModel["upper_bound"] = int(26) + + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["filter_type"] = "In" + model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} + model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} + model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} + model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} + + assert.Equal(t, result, model) + } + + inFilterParamsModel := new(backuprecoveryv1.InFilterParams) + inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") + inFilterParamsModel.AttributeLabels = []string{"testString"} + inFilterParamsModel.BoolFilterValues = []bool{true} + inFilterParamsModel.Int32FilterValues = []int64{int64(38)} + inFilterParamsModel.Int64FilterValues = []int64{int64(26)} + inFilterParamsModel.StringFilterValues = []string{"testString"} + + rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) + rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) + systemsFilterParamsModel.SystemIds = []string{"testString"} + systemsFilterParamsModel.SystemNames = []string{"testString"} + + timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) + timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") + timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) + timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) + + model := new(backuprecoveryv1.AttributeFilter) + model.Attribute = core.StringPtr("testString") + model.FilterType = core.StringPtr("In") + model.InFilterParams = inFilterParamsModel + model.RangeFilterParams = rangeFilterParamsModel + model.SystemsFilterParams = systemsFilterParamsModel + model.TimeRangeFilterParams = timeRangeFilterParamsModel + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute_data_type"] = "Bool" + model["attribute_labels"] = []string{"testString"} + model["bool_filter_values"] = []bool{true} + model["int32_filter_values"] = []int64{int64(38)} + model["int64_filter_values"] = []int64{int64(26)} + model["string_filter_values"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.InFilterParams) + model.AttributeDataType = core.StringPtr("Bool") + model.AttributeLabels = []string{"testString"} + model.BoolFilterValues = []bool{true} + model.Int32FilterValues = []int64{int64(38)} + model.Int64FilterValues = []int64{int64(26)} + model.StringFilterValues = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.RangeFilterParams) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["system_ids"] = []string{"testString"} + model["system_names"] = []string{"testString"} + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.SystemsFilterParams) + model.SystemIds = []string{"testString"} + model.SystemNames = []string{"testString"} + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["date_range"] = "Last1Hour" + model["duration_hours"] = int(26) + model["lower_bound"] = int(26) + model["upper_bound"] = int(26) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.TimeRangeFilterParams) + model.DateRange = core.StringPtr("Last1Hour") + model.DurationHours = core.Int64Ptr(int64(26)) + model.LowerBound = core.Int64Ptr(int64(26)) + model.UpperBound = core.Int64Ptr(int64(26)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["from"] = int(38) + model["size"] = int(1) + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.LimitParams) + model.From = core.Int64Ptr(int64(38)) + model.Size = core.Int64Ptr(int64(1)) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["attribute"] = "testString" + model["desc"] = true + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.AttributeSort) + model.Attribute = core.StringPtr("testString") + model.Desc = core.BoolPtr(true) + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go new file mode 100644 index 0000000000..467762677d --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go @@ -0,0 +1,41 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerGetReportDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetReportDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report.backup_recovery_manager_get_report_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report.backup_recovery_manager_get_report_instance", "backup_recovery_manager_get_report_id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetReportDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_report" "backup_recovery_manager_get_report_instance" { + id = "id" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go new file mode 100644 index 0000000000..8eb7d681d0 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go @@ -0,0 +1,110 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetReportType() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetReportTypeRead, + + Schema: map[string]*schema.Schema{ + "report_type": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the report type.", + }, + "attributes": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the attribute name.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "data_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the data type of the attribute.", + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the attribute name.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetReportTypeRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getReportTypeOptions := &backuprecoveryv1.GetReportTypeOptions{} + + getReportTypeOptions.SetReportType(d.Get("report_type").(string)) + + reportTypeAttributes, _, err := backupRecoveryClient.GetReportTypeWithContext(context, getReportTypeOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportTypeWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report_type", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetReportTypeID(d)) + + if !core.IsNil(reportTypeAttributes.Attributes) { + attributes := []map[string]interface{}{} + for _, attributesItem := range reportTypeAttributes.Attributes { + attributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(&attributesItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "attributes-to-map").GetDiag() + } + attributes = append(attributes, attributesItemMap) + } + if err = d.Set("attributes", attributes); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting attributes: %s", err), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "set-attributes").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetReportTypeID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetReportTypeID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(model *backuprecoveryv1.ReportTypeAttribute) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.DataType != nil { + modelMap["data_type"] = *model.DataType + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go new file mode 100644 index 0000000000..47ce66a942 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go @@ -0,0 +1,63 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetReportTypeDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetReportTypeDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_type.backup_recovery_manager_get_report_type_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_type.backup_recovery_manager_get_report_type_instance", "report_type"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetReportTypeDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_report_type" "backup_recovery_manager_get_report_type_instance" { + reportType = "Failures" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["data_type"] = "Bool" + model["name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.ReportTypeAttribute) + model.DataType = core.StringPtr("Bool") + model.Name = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go new file mode 100644 index 0000000000..cd444858d9 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go @@ -0,0 +1,166 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetReports() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetReportsRead, + + Schema: map[string]*schema.Schema{ + "ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the ids of reports to fetch.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "user_context": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies the user context to filter reports.", + }, + "reports": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of reports.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies categoty of the Report.", + }, + "component_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of component ids in the Report.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies description of the Report.", + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the report.", + }, + "supported_user_contexts": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies all the supported user contexts for this report.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "title": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the title of the report.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetReportsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_reports", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getReportsOptions := &backuprecoveryv1.GetReportsOptions{} + + if _, ok := d.GetOk("ids"); ok { + var ids []string + for _, v := range d.Get("ids").([]interface{}) { + idsItem := v.(string) + ids = append(ids, idsItem) + } + getReportsOptions.SetIds(ids) + } + if _, ok := d.GetOk("user_context"); ok { + getReportsOptions.SetUserContext(d.Get("user_context").(string)) + } + + reports, _, err := backupRecoveryClient.GetReportsWithContext(context, getReportsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_reports", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetReportsID(d)) + + if !core.IsNil(reports.Reports) { + reportsMap := []map[string]interface{}{} + for _, reportsItem := range reports.Reports { + reportsItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(&reportsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_reports", "read", "reports-to-map").GetDiag() + } + reportsMap = append(reportsMap, reportsItemMap) + } + if err = d.Set("reports", reportsMap); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting reports: %s", err), "(Data) ibm_backup_recovery_manager_get_reports", "read", "set-reports").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetReportsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetReportsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(model *backuprecoveryv1.Report) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Category != nil { + modelMap["category"] = *model.Category + } + if model.ComponentIds != nil { + modelMap["component_ids"] = model.ComponentIds + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.SupportedUserContexts != nil { + modelMap["supported_user_contexts"] = model.SupportedUserContexts + } + if model.Title != nil { + modelMap["title"] = *model.Title + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go new file mode 100644 index 0000000000..c448ca82fb --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go @@ -0,0 +1,71 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetReportsDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetReportsDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_reports.backup_recovery_manager_get_reports_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetReportsDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_reports" "backup_recovery_manager_get_reports_instance" { + ids = [ "ids" ] + userContext = "IBMBaaS" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetReportsReportToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["category"] = "Protection" + model["component_ids"] = []string{"testString"} + model["description"] = "testString" + model["id"] = "testString" + model["supported_user_contexts"] = []string{"IBMBaaS"} + model["title"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.Report) + model.Category = core.StringPtr("Protection") + model.ComponentIds = []string{"testString"} + model.Description = core.StringPtr("testString") + model.ID = core.StringPtr("testString") + model.SupportedUserContexts = []string{"IBMBaaS"} + model.Title = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go new file mode 100644 index 0000000000..42299a557b --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go @@ -0,0 +1,405 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetResources() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetResourcesRead, + + Schema: map[string]*schema.Schema{ + "resource_type": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the type of the resource.", + }, + "external_targets": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of External Targets.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the External target.", + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the External target.", + }, + "system_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the System.", + }, + "system_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the System.", + }, + "target_type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of the External target.", + }, + }, + }, + }, + "message_code_mappings": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of Message codes.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "message_code": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the message code.", + }, + "message_guid": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the message GUID.", + }, + }, + }, + }, + "policies": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of Protection Groups.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Protection Policy.", + }, + "is_global_policy": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + Description: "Specifies whether this is a Global Policy.", + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Protection Policy.", + }, + "system_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the System.", + }, + "system_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the System.", + }, + }, + }, + }, + "protection_groups": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of Protection Groups.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Protection Group.", + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Protection Group.", + }, + "system_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the System.", + }, + "system_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the System.", + }, + }, + }, + }, + "sources": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of Registered sources.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "environments": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of all environments discovered as part of this source.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the registered source.", + }, + "uuid": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the unique identifier of registered source.", + }, + }, + }, + }, + "tenants": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of Tenants.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the id of the Tenant.", + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of the Tenant.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetResourcesRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getResourcesOptions := &backuprecoveryv1.GetResourcesOptions{} + + getResourcesOptions.SetResourceType(d.Get("resource_type").(string)) + + resources, _, err := backupRecoveryClient.GetResourcesWithContext(context, getResourcesOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetResourcesWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_resources", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetResourcesID(d)) + + if !core.IsNil(resources.ExternalTargets) { + externalTargets := []map[string]interface{}{} + for _, externalTargetsItem := range resources.ExternalTargets { + externalTargetsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(&externalTargetsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "external_targets-to-map").GetDiag() + } + externalTargets = append(externalTargets, externalTargetsItemMap) + } + if err = d.Set("external_targets", externalTargets); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting external_targets: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-external_targets").GetDiag() + } + } + + if !core.IsNil(resources.MessageCodeMappings) { + messageCodeMappings := []map[string]interface{}{} + for _, messageCodeMappingsItem := range resources.MessageCodeMappings { + messageCodeMappingsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(&messageCodeMappingsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "message_code_mappings-to-map").GetDiag() + } + messageCodeMappings = append(messageCodeMappings, messageCodeMappingsItemMap) + } + if err = d.Set("message_code_mappings", messageCodeMappings); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting message_code_mappings: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-message_code_mappings").GetDiag() + } + } + + if !core.IsNil(resources.Policies) { + policies := []map[string]interface{}{} + for _, policiesItem := range resources.Policies { + policiesItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(&policiesItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "policies-to-map").GetDiag() + } + policies = append(policies, policiesItemMap) + } + if err = d.Set("policies", policies); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting policies: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-policies").GetDiag() + } + } + + if !core.IsNil(resources.ProtectionGroups) { + protectionGroups := []map[string]interface{}{} + for _, protectionGroupsItem := range resources.ProtectionGroups { + protectionGroupsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(&protectionGroupsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "protection_groups-to-map").GetDiag() + } + protectionGroups = append(protectionGroups, protectionGroupsItemMap) + } + if err = d.Set("protection_groups", protectionGroups); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting protection_groups: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-protection_groups").GetDiag() + } + } + + if !core.IsNil(resources.Sources) { + sources := []map[string]interface{}{} + for _, sourcesItem := range resources.Sources { + sourcesItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(&sourcesItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "sources-to-map").GetDiag() + } + sources = append(sources, sourcesItemMap) + } + if err = d.Set("sources", sources); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sources: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-sources").GetDiag() + } + } + + if !core.IsNil(resources.Tenants) { + tenants := []map[string]interface{}{} + for _, tenantsItem := range resources.Tenants { + tenantsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(&tenantsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "tenants-to-map").GetDiag() + } + tenants = append(tenants, tenantsItemMap) + } + if err = d.Set("tenants", tenants); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting tenants: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-tenants").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetResourcesID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetResourcesID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(model *backuprecoveryv1.ExternalTarget) (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 + } + if model.SystemID != nil { + modelMap["system_id"] = *model.SystemID + } + if model.SystemName != nil { + modelMap["system_name"] = *model.SystemName + } + if model.TargetType != nil { + modelMap["target_type"] = *model.TargetType + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(model *backuprecoveryv1.MessageCodeMapping) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.MessageCode != nil { + modelMap["message_code"] = *model.MessageCode + } + if model.MessageGuid != nil { + modelMap["message_guid"] = *model.MessageGuid + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(model *backuprecoveryv1.Policy) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.IsGlobalPolicy != nil { + modelMap["is_global_policy"] = *model.IsGlobalPolicy + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.SystemID != nil { + modelMap["system_id"] = *model.SystemID + } + if model.SystemName != nil { + modelMap["system_name"] = *model.SystemName + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(model *backuprecoveryv1.ProtectionGroup) (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 + } + if model.SystemID != nil { + modelMap["system_id"] = *model.SystemID + } + if model.SystemName != nil { + modelMap["system_name"] = *model.SystemName + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(model *backuprecoveryv1.RegisteredSource) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Environments != nil { + modelMap["environments"] = model.Environments + } + if model.Name != nil { + modelMap["name"] = *model.Name + } + if model.UUID != nil { + modelMap["uuid"] = *model.UUID + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(model *backuprecoveryv1.Tenant) (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 +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go new file mode 100644 index 0000000000..b336b6e20e --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go @@ -0,0 +1,171 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" + "github.com/stretchr/testify/assert" +) + +func TestAccIbmBackupRecoveryManagerGetResourcesDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerGetResourcesDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_resources.backup_recovery_manager_get_resources_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_resources.backup_recovery_manager_get_resources_instance", "resource_type"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerGetResourcesDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_get_resources" "backup_recovery_manager_get_resources_instance" { + resourceType = "Policies" + } + `) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + model["system_id"] = "testString" + model["system_name"] = "testString" + model["target_type"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.ExternalTarget) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + model.SystemID = core.StringPtr("testString") + model.SystemName = core.StringPtr("testString") + model.TargetType = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["message_code"] = "testString" + model["message_guid"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.MessageCodeMapping) + model.MessageCode = core.StringPtr("testString") + model.MessageGuid = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["is_global_policy"] = true + model["name"] = "testString" + model["system_id"] = "testString" + model["system_name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.Policy) + model.ID = core.StringPtr("testString") + model.IsGlobalPolicy = core.BoolPtr(true) + model.Name = core.StringPtr("testString") + model.SystemID = core.StringPtr("testString") + model.SystemName = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + model["system_id"] = "testString" + model["system_name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.ProtectionGroup) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + model.SystemID = core.StringPtr("testString") + model.SystemName = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["environments"] = []string{"testString"} + model["name"] = "testString" + model["uuid"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.RegisteredSource) + model.Environments = []string{"testString"} + model.Name = core.StringPtr("testString") + model.UUID = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(backuprecoveryv1.Tenant) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + + result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(model) + assert.Nil(t, err) + checkResult(result) +} From d1bada11803474340d399d4195c9b14c9213800f Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Fri, 11 Jul 2025 16:47:26 +0530 Subject: [PATCH 04/15] update code --- go.mod | 2 + go.sum | 2 - ibm/provider/provider.go | 74 +- ..._backup_recovery_manager_sre_get_alerts.go | 662 ++++++++++++++++++ ...recovery_manager_sre_get_alerts_summary.go | 200 ++++++ ...ery_manager_sre_get_alerts_summary_test.go | 45 ++ ...up_recovery_manager_sre_get_alerts_test.go | 56 ++ ...ery_manager_sre_get_compatible_clusters.go | 66 ++ ...anager_sre_get_compatible_clusters_test.go | 40 ++ ..._recovery_manager_sre_get_helios_alerts.go | 595 ++++++++++++++++ ...anager_sre_get_helios_alerts_resolution.go | 263 +++++++ ...r_sre_get_helios_alerts_resolution_test.go | 43 ++ ...ery_manager_sre_get_helios_alerts_stats.go | 558 +++++++++++++++ ...anager_sre_get_helios_alerts_stats_test.go | 48 ++ ...y_manager_sre_get_helios_alerts_summary.go | 184 +++++ ...ager_sre_get_helios_alerts_summary_test.go | 43 ++ ...very_manager_sre_get_helios_alerts_test.go | 56 ++ ..._recovery_manager_sre_get_upgrades_info.go | 75 ++ ...very_manager_sre_get_upgrades_info_test.go | 40 ++ 19 files changed, 3017 insertions(+), 35 deletions(-) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go diff --git a/go.mod b/go.mod index b88cf40acc..dd633274a7 100644 --- a/go.mod +++ b/go.mod @@ -242,3 +242,5 @@ exclude ( k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible k8s.io/client-go v12.0.0+incompatible ) + +replace github.com/IBM/ibm-backup-recovery-sdk-go => /Users/deekshasharma/Documents/git/baas-go-sdk/ibm-backup-recovery-sdk-go diff --git a/go.sum b/go.sum index ade168a509..af1f4f5d99 100644 --- a/go.sum +++ b/go.sum @@ -128,8 +128,6 @@ github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2y github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= github.com/IBM/go-sdk-core/v5 v5.20.1 h1:dzeyifh1kfRLw8VfAIIS5okZYuqLTqplPZP/Kcsgdlo= github.com/IBM/go-sdk-core/v5 v5.20.1/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3 h1:9TZHocmCfgmF8TGVrpP1kFyQbjcqLNW7+bM07lefpKQ= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3/go.mod h1:jsYutWlnGysdCNoAk0zoIXb2vfKM9TmMpiUkI4pVuXY= github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA= github.com/IBM/ibm-cos-sdk-go v1.12.2/go.mod h1:ODYcmrmdpjo5hVguq9RbD6xmC8xb1XZMG7NefUbJNcc= github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 h1:956Nqk0eKI3lq+AkzWXZDid4UZHRz0wWh1LwkleBsWk= diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index bdef618a2c..66f3a35626 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -250,39 +250,47 @@ func Provider() *schema.Provider { "ibm_config_aggregator_resource_collection_status": configurationaggregator.AddConfigurationAggregatorInstanceFields(configurationaggregator.DataSourceIbmConfigAggregatorResourceCollectionStatus()), // // BackupAndRecovery - "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), - "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), - "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), - "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), - "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), - "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), - "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), - "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), - "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), - "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), - "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), - "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), - "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), - "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), - "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), - "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), - "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), - "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), - "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), - "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), - "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), - "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), - "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), - "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), - "ibm_backup_recovery_manager_get_component": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponent(), - "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), - "ibm_backup_recovery_manager_export_report": backuprecovery.DataSourceIbmBackupRecoveryManagerExportReport(), - "ibm_backup_recovery_manager_get_report": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReport(), - "ibm_backup_recovery_manager_get_report_preview": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreview(), - "ibm_backup_recovery_manager_get_report_type": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportType(), - "ibm_backup_recovery_manager_get_reports": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReports(), - "ibm_backup_recovery_manager_get_resources": backuprecovery.DataSourceIbmBackupRecoveryManagerGetResources(), - "ibm_backup_recovery_manager_sre_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetClusterInfo(), + "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), + "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), + "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), + "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), + "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), + "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), + "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), + "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), + "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), + "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), + "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), + "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), + "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), + "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), + "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), + "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), + "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), + "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), + "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), + "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), + "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), + "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), + "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), + "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), + "ibm_backup_recovery_manager_get_component": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponent(), + "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), + "ibm_backup_recovery_manager_export_report": backuprecovery.DataSourceIbmBackupRecoveryManagerExportReport(), + "ibm_backup_recovery_manager_get_report": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReport(), + "ibm_backup_recovery_manager_get_report_preview": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreview(), + "ibm_backup_recovery_manager_get_report_type": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportType(), + "ibm_backup_recovery_manager_get_reports": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReports(), + "ibm_backup_recovery_manager_get_resources": backuprecovery.DataSourceIbmBackupRecoveryManagerGetResources(), + "ibm_backup_recovery_manager_sre_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetClusterInfo(), + "ibm_backup_recovery_manager_sre_get_helios_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlerts(), + "ibm_backup_recovery_manager_sre_get_helios_alerts_stats": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats(), + "ibm_backup_recovery_manager_sre_get_helios_alerts_resolution": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution(), + "ibm_backup_recovery_manager_sre_get_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetAlertsSummary(), + "ibm_backup_recovery_manager_sre_get_helios_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummary(), + "ibm_backup_recovery_manager_sre_get_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetAlerts(), + "ibm_backup_recovery_manager_sre_get_upgrades_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetUpgradesInfo(), + "ibm_backup_recovery_manager_sre_get_compatible_clusters": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetCompatibleClusters(), // // AppID "ibm_appid_action_url": appid.DataSourceIBMAppIDActionURL(), diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go new file mode 100644 index 0000000000..de0c7e09cf --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go @@ -0,0 +1,662 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetAlerts() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetAlertsRead, + + Schema: map[string]*schema.Schema{ + "alert_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_types": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert types.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "alert_categories": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert categories.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_states": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert states.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_severities": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert severity types.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_type_buckets": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert type buckets.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "start_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies start time Unix epoch time in microseconds to filter alerts by.", + }, + "end_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies end time Unix epoch time in microseconds to filter alerts by.", + }, + "max_alerts": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies maximum number of alerts to return.The default value is 100 and maximum allowed value is 1000.", + }, + "property_key": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies name of the property to filter alerts by.", + }, + "property_value": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies value of the property to filter alerts by.", + }, + "alert_name": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies name of alert to filter alerts by.", + }, + "resolution_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies alert resolution ids to filter alerts by.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "tenant_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by tenant ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "all_under_hierarchy": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Description: "Filter by objects of all the tenants under the hierarchy of the logged in user's organization.", + }, + "x_scope_identifier": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "This field uniquely represents a service instance. Please specify the values as \"service-instance-id: \".", + }, + "alerts": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of alerts.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alert_category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert category.", + }, + "alert_code": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a unique code that categorizes the Alert, for example: CE00200014, where CE stands for IBM Error, the alert state next 3 digits is the id of the Alert Category (e.g. 002 for 'kNode') and the last 5 digits is the id of the Alert Type (e.g. 00014 for 'kNodeHighCpuUsage').", + }, + "alert_document": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the fields of alert document.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alert_cause": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the cause of alert.", + }, + "alert_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the description of alert.", + }, + "alert_help_text": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the help text for alert.", + }, + "alert_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of alert.", + }, + "alert_summary": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Short description for the alert.", + }, + }, + }, + }, + "alert_state": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert state.", + }, + "alert_type": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the alert type.", + }, + "alert_type_bucket": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the Alert type bucket.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Id of the cluster which the alert is associated.", + }, + "cluster_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of cluster which alert is raised from.", + }, + "dedup_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the dedup count of alert.", + }, + "dedup_timestamps": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies Unix epoch Timestamps (in microseconds) for the last 25 occurrences of duplicated Alerts that are stored with the original/primary Alert. Alerts are grouped into one Alert if the Alerts are the same type, are reporting on the same Object and occur within one hour. 'dedupCount' always reports the total count of duplicated Alerts even if there are more than 25 occurrences. For example, if there are 100 occurrences of this Alert, dedupTimestamps stores the timestamps of the last 25 occurrences and dedupCount equals 100.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "event_source": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies source where the event occurred.", + }, + "first_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies Unix epoch Timestamp (in microseconds) of the first occurrence of the Alert.", + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies unique id of the alert.", + }, + "label_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the labels for which this alert has been raised.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "latest_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies Unix epoch Timestamp (in microseconds) of the most recent occurrence of the Alert.", + }, + "property_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "List of property key and values associated with alert.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Key of the Label.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Value of the Label, multiple values should be joined by '|'.", + }, + }, + }, + }, + "region_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the region id of the alert.", + }, + "resolution_details": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies information about the Alert Resolution.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "resolution_details": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies detailed notes about the Resolution.", + }, + "resolution_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the unique resolution id assigned in helios.", + }, + "resolution_summary": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies short description about the Resolution.", + }, + "timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies unix epoch timestamp (in microseconds) when the Alert was resolved.", + }, + "user_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies name of the IBM Cluster user who resolved the Alerts.", + }, + }, + }, + }, + "resolution_id_string": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Resolution Id String.", + }, + "resolved_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies Unix epoch Timestamps in microseconds when alert is resolved.", + }, + "severity": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert severity.", + }, + "suppression_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies unique id generated when the Alert is suppressed by the admin.", + }, + "tenant_ids": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the tenants for which this alert has been raised.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "vaults": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies information about vaults where source object associated with alert is vaulted. This could be empty if alert is not related to any source object or it is not vaulted.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "global_vault_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies Global vault id.", + }, + "region_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies id of region where vault resides.", + }, + "region_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies name of region where vault resides.", + }, + "vault_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies name of vault.", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getAlertsOptions := &backuprecoveryv1.GetAlertsOptions{} + + if _, ok := d.GetOk("alert_ids"); ok { + var alertIds []string + for _, v := range d.Get("alert_ids").([]interface{}) { + alertIdsItem := v.(string) + alertIds = append(alertIds, alertIdsItem) + } + getAlertsOptions.SetAlertIds(alertIds) + } + if _, ok := d.GetOk("alert_types"); ok { + var alertTypes []int64 + for _, v := range d.Get("alert_types").([]interface{}) { + alertTypesItem := int64(v.(int)) + alertTypes = append(alertTypes, alertTypesItem) + } + getAlertsOptions.SetAlertTypes(alertTypes) + } + if _, ok := d.GetOk("alert_categories"); ok { + var alertCategories []string + for _, v := range d.Get("alert_categories").([]interface{}) { + alertCategoriesItem := v.(string) + alertCategories = append(alertCategories, alertCategoriesItem) + } + getAlertsOptions.SetAlertCategories(alertCategories) + } + if _, ok := d.GetOk("alert_states"); ok { + var alertStates []string + for _, v := range d.Get("alert_states").([]interface{}) { + alertStatesItem := v.(string) + alertStates = append(alertStates, alertStatesItem) + } + getAlertsOptions.SetAlertStates(alertStates) + } + if _, ok := d.GetOk("alert_severities"); ok { + var alertSeverities []string + for _, v := range d.Get("alert_severities").([]interface{}) { + alertSeveritiesItem := v.(string) + alertSeverities = append(alertSeverities, alertSeveritiesItem) + } + getAlertsOptions.SetAlertSeverities(alertSeverities) + } + if _, ok := d.GetOk("alert_type_buckets"); ok { + var alertTypeBuckets []string + for _, v := range d.Get("alert_type_buckets").([]interface{}) { + alertTypeBucketsItem := v.(string) + alertTypeBuckets = append(alertTypeBuckets, alertTypeBucketsItem) + } + getAlertsOptions.SetAlertTypeBuckets(alertTypeBuckets) + } + if _, ok := d.GetOk("start_time_usecs"); ok { + getAlertsOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + } + if _, ok := d.GetOk("end_time_usecs"); ok { + getAlertsOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + } + if _, ok := d.GetOk("max_alerts"); ok { + getAlertsOptions.SetMaxAlerts(int64(d.Get("max_alerts").(int))) + } + if _, ok := d.GetOk("property_key"); ok { + getAlertsOptions.SetPropertyKey(d.Get("property_key").(string)) + } + if _, ok := d.GetOk("property_value"); ok { + getAlertsOptions.SetPropertyValue(d.Get("property_value").(string)) + } + if _, ok := d.GetOk("alert_name"); ok { + getAlertsOptions.SetAlertName(d.Get("alert_name").(string)) + } + if _, ok := d.GetOk("resolution_ids"); ok { + var resolutionIds []int64 + for _, v := range d.Get("resolution_ids").([]interface{}) { + resolutionIdsItem := int64(v.(int)) + resolutionIds = append(resolutionIds, resolutionIdsItem) + } + getAlertsOptions.SetResolutionIds(resolutionIds) + } + if _, ok := d.GetOk("tenant_ids"); ok { + var tenantIds []string + for _, v := range d.Get("tenant_ids").([]interface{}) { + tenantIdsItem := v.(string) + tenantIds = append(tenantIds, tenantIdsItem) + } + getAlertsOptions.SetTenantIds(tenantIds) + } + if _, ok := d.GetOk("all_under_hierarchy"); ok { + getAlertsOptions.SetAllUnderHierarchy(d.Get("all_under_hierarchy").(bool)) + } + if _, ok := d.GetOk("x_scope_identifier"); ok { + getAlertsOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) + } + + alertList, _, err := heliosSreApiClient.GetAlertsWithContext(context, getAlertsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetAlertsID(d)) + + alerts := []map[string]interface{}{} + for _, alertsItem := range alertList.Alerts { + alertsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(&alertsItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "alerts-to-map").GetDiag() + } + alerts = append(alerts, alertsItemMap) + } + if err = d.Set("alerts", alerts); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "set-alerts").GetDiag() + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetAlertsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetAlertsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backuprecoveryv1.AlertInfo) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertCategory != nil { + modelMap["alert_category"] = *model.AlertCategory + } + if model.AlertCode != nil { + modelMap["alert_code"] = *model.AlertCode + } + if model.AlertDocument != nil { + alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertDocumentToMap(model.AlertDocument) + if err != nil { + return modelMap, err + } + modelMap["alert_document"] = []map[string]interface{}{alertDocumentMap} + } + if model.AlertState != nil { + modelMap["alert_state"] = *model.AlertState + } + if model.AlertType != nil { + modelMap["alert_type"] = flex.IntValue(model.AlertType) + } + if model.AlertTypeBucket != nil { + modelMap["alert_type_bucket"] = *model.AlertTypeBucket + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterName != nil { + modelMap["cluster_name"] = *model.ClusterName + } + if model.DedupCount != nil { + modelMap["dedup_count"] = flex.IntValue(model.DedupCount) + } + if model.DedupTimestamps != nil { + modelMap["dedup_timestamps"] = model.DedupTimestamps + } + if model.EventSource != nil { + modelMap["event_source"] = *model.EventSource + } + if model.FirstTimestampUsecs != nil { + modelMap["first_timestamp_usecs"] = flex.IntValue(model.FirstTimestampUsecs) + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.LabelIds != nil { + modelMap["label_ids"] = model.LabelIds + } + if model.LatestTimestampUsecs != nil { + modelMap["latest_timestamp_usecs"] = flex.IntValue(model.LatestTimestampUsecs) + } + if model.PropertyList != nil { + propertyList := []map[string]interface{}{} + for _, propertyListItem := range model.PropertyList { + propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsLabelToMap(&propertyListItem) // #nosec G601 + if err != nil { + return modelMap, err + } + propertyList = append(propertyList, propertyListItemMap) + } + modelMap["property_list"] = propertyList + } + if model.RegionID != nil { + modelMap["region_id"] = *model.RegionID + } + if model.ResolutionDetails != nil { + resolutionDetailsMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertResolutionDetailsToMap(model.ResolutionDetails) + if err != nil { + return modelMap, err + } + modelMap["resolution_details"] = []map[string]interface{}{resolutionDetailsMap} + } + if model.ResolutionIdString != nil { + modelMap["resolution_id_string"] = *model.ResolutionIdString + } + if model.ResolvedTimestampUsecs != nil { + modelMap["resolved_timestamp_usecs"] = flex.IntValue(model.ResolvedTimestampUsecs) + } + if model.Severity != nil { + modelMap["severity"] = *model.Severity + } + if model.SuppressionID != nil { + modelMap["suppression_id"] = flex.IntValue(model.SuppressionID) + } + if model.TenantIds != nil { + modelMap["tenant_ids"] = model.TenantIds + } + if model.Vaults != nil { + vaults := []map[string]interface{}{} + for _, vaultsItem := range model.Vaults { + vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsVaultToMap(&vaultsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + vaults = append(vaults, vaultsItemMap) + } + modelMap["vaults"] = vaults + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertCause != nil { + modelMap["alert_cause"] = *model.AlertCause + } + if model.AlertDescription != nil { + modelMap["alert_description"] = *model.AlertDescription + } + if model.AlertHelpText != nil { + modelMap["alert_help_text"] = *model.AlertHelpText + } + if model.AlertName != nil { + modelMap["alert_name"] = *model.AlertName + } + if model.AlertSummary != nil { + modelMap["alert_summary"] = *model.AlertSummary + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["key"] = *model.Key + modelMap["value"] = *model.Value + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertResolutionDetailsToMap(model *backuprecoveryv1.AlertResolutionDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ResolutionDetails != nil { + modelMap["resolution_details"] = *model.ResolutionDetails + } + if model.ResolutionID != nil { + modelMap["resolution_id"] = flex.IntValue(model.ResolutionID) + } + if model.ResolutionSummary != nil { + modelMap["resolution_summary"] = *model.ResolutionSummary + } + if model.TimestampUsecs != nil { + modelMap["timestamp_usecs"] = flex.IntValue(model.TimestampUsecs) + } + if model.UserName != nil { + modelMap["user_name"] = *model.UserName + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.GlobalVaultID != nil { + modelMap["global_vault_id"] = *model.GlobalVaultID + } + if model.RegionID != nil { + modelMap["region_id"] = *model.RegionID + } + if model.RegionName != nil { + modelMap["region_name"] = *model.RegionName + } + if model.VaultName != nil { + modelMap["vault_name"] = *model.VaultName + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go new file mode 100644 index 0000000000..2d842ea262 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go @@ -0,0 +1,200 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsSummary() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryRead, + + Schema: map[string]*schema.Schema{ + "start_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Filter by start time. Specify the start time as a Unix epoch Timestamp (in microseconds). By default it is current time minus a day.", + }, + "end_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Filter by end time. Specify the end time as a Unix epoch Timestamp (in microseconds). By default it is current time.", + }, + "include_tenants": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Description: "IncludeTenants specifies if alerts of all the tenants under the hierarchy of the logged in user's organization should be used to compute summary.", + }, + "tenant_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "TenantIds contains ids of the tenants for which alerts are to be used to compute summary.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "states_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of alert states to filter alerts by. If not specified, only open alerts will be used to get summary.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "x_scope_identifier": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "This field uniquely represents a service instance. Please specify the values as \"service-instance-id: \".", + }, + "alerts_summary": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies a list of alerts summary grouped by category.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Category of alerts by which summary is grouped.", + }, + "critical_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of critical alerts.", + }, + "info_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of info alerts.", + }, + "total_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of total alerts.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Type/bucket that this alert category belongs to.", + }, + "warning_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of warning alerts.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getAlertSummaryOptions := &backuprecoveryv1.GetAlertSummaryOptions{} + + if _, ok := d.GetOk("start_time_usecs"); ok { + getAlertSummaryOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + } + if _, ok := d.GetOk("end_time_usecs"); ok { + getAlertSummaryOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + } + if _, ok := d.GetOk("include_tenants"); ok { + getAlertSummaryOptions.SetIncludeTenants(d.Get("include_tenants").(bool)) + } + if _, ok := d.GetOk("tenant_ids"); ok { + var tenantIds []string + for _, v := range d.Get("tenant_ids").([]interface{}) { + tenantIdsItem := v.(string) + tenantIds = append(tenantIds, tenantIdsItem) + } + getAlertSummaryOptions.SetTenantIds(tenantIds) + } + if _, ok := d.GetOk("states_list"); ok { + var statesList []string + for _, v := range d.Get("states_list").([]interface{}) { + statesListItem := v.(string) + statesList = append(statesList, statesListItem) + } + getAlertSummaryOptions.SetStatesList(statesList) + } + if _, ok := d.GetOk("x_scope_identifier"); ok { + getAlertSummaryOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) + } + + alertsSummaryResponse, _, err := heliosSreApiClient.GetAlertSummaryWithContext(context, getAlertSummaryOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID(d)) + + if !core.IsNil(alertsSummaryResponse.AlertsSummary) { + alertsSummary := []map[string]interface{}{} + for _, alertsSummaryItem := range alertsSummaryResponse.AlertsSummary { + alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "alerts_summary-to-map").GetDiag() + } + alertsSummary = append(alertsSummary, alertsSummaryItemMap) + } + if err = d.Set("alerts_summary", alertsSummary); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "set-alerts_summary").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Category != nil { + modelMap["category"] = *model.Category + } + if model.CriticalCount != nil { + modelMap["critical_count"] = flex.IntValue(model.CriticalCount) + } + if model.InfoCount != nil { + modelMap["info_count"] = flex.IntValue(model.InfoCount) + } + if model.TotalCount != nil { + modelMap["total_count"] = flex.IntValue(model.TotalCount) + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.WarningCount != nil { + modelMap["warning_count"] = flex.IntValue(model.WarningCount) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go new file mode 100644 index 0000000000..e7a1928230 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go @@ -0,0 +1,45 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts_summary.backup_recovery_manager_sre_get_alerts_summary_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_alerts_summary" "backup_recovery_manager_sre_get_alerts_summary_instance" { + startTimeUsecs = 1 + endTimeUsecs = 1 + includeTenants = true + tenantIds = [ "tenantIds" ] + statesList = [ "kResolved" ] + X-Scope-Identifier = "X-Scope-Identifier" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go new file mode 100644 index 0000000000..cb2003548a --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go @@ -0,0 +1,56 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetAlertsDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetAlertsDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts.backup_recovery_manager_sre_get_alerts_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts.backup_recovery_manager_sre_get_alerts_instance", "alerts.#"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetAlertsDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_alerts" "backup_recovery_manager_sre_get_alerts_instance" { + alertIds = [ "alertIds" ] + alertTypes = [ 1 ] + alertCategories = [ "kDisk" ] + alertStates = [ "kResolved" ] + alertSeverities = [ "kCritical" ] + alertTypeBuckets = [ "kHardware" ] + startTimeUsecs = 1 + endTimeUsecs = 1 + maxAlerts = 1 + propertyKey = "propertyKey" + propertyValue = "propertyValue" + alertName = "alertName" + resolutionIds = [ 1 ] + tenantIds = [ "tenantIds" ] + allUnderHierarchy = true + X-Scope-Identifier = "X-Scope-Identifier" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go new file mode 100644 index 0000000000..3e2789099d --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go @@ -0,0 +1,66 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetCompatibleClusters() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersRead, + + Schema: map[string]*schema.Schema{ + "release_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_compatible_clusters", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + compatibleClustersForReleaseOptions := &backuprecoveryv1.CompatibleClustersForReleaseOptions{} + + if _, ok := d.GetOk("release_version"); ok { + compatibleClustersForReleaseOptions.SetReleaseVersion(d.Get("release_version").(string)) + } + + _, _, err = heliosSreApiClient.CompatibleClustersForReleaseWithContext(context, compatibleClustersForReleaseOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CompatibleClustersForReleaseWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_compatible_clusters", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID(d)) + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go new file mode 100644 index 0000000000..c323bc01f9 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go @@ -0,0 +1,40 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_compatible_clusters.backup_recovery_manager_sre_get_compatible_clusters_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_compatible_clusters" "backup_recovery_manager_sre_get_compatible_clusters_instance" { + releaseVersion = "releaseVersion" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go new file mode 100644 index 0000000000..1aa3ca77b5 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go @@ -0,0 +1,595 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlerts() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead, + + Schema: map[string]*schema.Schema{ + "alert_id_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_state_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert states.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_type_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert types.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "alert_severity_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert severity types.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "region_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of region ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "cluster_identifiers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of cluster ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "start_date_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies the start time of the alerts to be returned. All the alerts returned are raised after the specified start time. This value should be in Unix timestamp epoch in microseconds.", + }, + "end_date_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies the end time of the alerts to be returned. All the alerts returned are raised before the specified end time. This value should be in Unix timestamp epoch in microseconds.", + }, + "max_alerts": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies maximum number of alerts to return.", + }, + "alert_category_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert categories.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "tenant_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by tenant ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_type_bucket_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by list of alert type buckets.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_property_key_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of the alert property keys to query.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_property_value_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of the alert property value, multiple values for one key should be joined by '|'.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alert_name": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies name of alert to filter alerts by.", + }, + "service_instance_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies services instance ids to filter alerts for IBM customers.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alerts_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the list of alerts.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alert_category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert category.", + }, + "alert_code": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies a unique code that categorizes the Alert, for example: CE00200014, where CE stands for IBM Error, the alert state next 3 digits is the id of the Alert Category (e.g. 002 for 'kNode') and the last 5 digits is the id of the Alert Type (e.g. 00014 for 'kNodeHighCpuUsage').", + }, + "alert_document": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the fields of alert document.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alert_cause": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the cause of alert.", + }, + "alert_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the description of alert.", + }, + "alert_help_text": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the help text for alert.", + }, + "alert_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of alert.", + }, + "alert_summary": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Short description for the alert.", + }, + }, + }, + }, + "alert_state": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert state.", + }, + "alert_type": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the alert type.", + }, + "alert_type_bucket": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the Alert type bucket.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Id of the cluster which the alert is associated.", + }, + "cluster_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the name of cluster which alert is raised from.", + }, + "dedup_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the dedup count of alert.", + }, + "dedup_timestamps": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies Unix epoch Timestamps (in microseconds) for the last 25 occurrences of duplicated Alerts that are stored with the original/primary Alert. Alerts are grouped into one Alert if the Alerts are the same type, are reporting on the same Object and occur within one hour. 'dedupCount' always reports the total count of duplicated Alerts even if there are more than 25 occurrences. For example, if there are 100 occurrences of this Alert, dedupTimestamps stores the timestamps of the last 25 occurrences and dedupCount equals 100.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "first_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "SpeSpecifies Unix epoch Timestamp (in microseconds) of the first occurrence of the Alert.", + }, + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies unique id of the alert.", + }, + "latest_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "SpeSpecifies Unix epoch Timestamp (in microseconds) of the most recent occurrence of the Alert.", + }, + "property_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "List of property key and values associated with alert.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Key of the Label.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Value of the Label, multiple values should be joined by '|'.", + }, + }, + }, + }, + "region_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the region id of the alert.", + }, + "resolution_id_string": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the resolution id of the alert if its resolved.", + }, + "service_instance_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Id of the serrvice instance which the alert is associated.", + }, + "severity": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the alert severity.", + }, + "vaults": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies information about vaults where source object associated with alert is vaulted. This could be empty if alert is not related to any source object or it is not vaulted.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "global_vault_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies Global vault id.", + }, + "region_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies id of region where vault resides.", + }, + "region_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies name of region where vault resides.", + }, + "vault_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies name of vault.", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getHeliosAlertsOptions := &backuprecoveryv1.GetHeliosAlertsOptions{} + + if _, ok := d.GetOk("alert_id_list"); ok { + var alertIdList []string + for _, v := range d.Get("alert_id_list").([]interface{}) { + alertIdListItem := v.(string) + alertIdList = append(alertIdList, alertIdListItem) + } + getHeliosAlertsOptions.SetAlertIdList(alertIdList) + } + if _, ok := d.GetOk("alert_state_list"); ok { + var alertStateList []string + for _, v := range d.Get("alert_state_list").([]interface{}) { + alertStateListItem := v.(string) + alertStateList = append(alertStateList, alertStateListItem) + } + getHeliosAlertsOptions.SetAlertStateList(alertStateList) + } + if _, ok := d.GetOk("alert_type_list"); ok { + var alertTypeList []int64 + for _, v := range d.Get("alert_type_list").([]interface{}) { + alertTypeListItem := int64(v.(int)) + alertTypeList = append(alertTypeList, alertTypeListItem) + } + getHeliosAlertsOptions.SetAlertTypeList(alertTypeList) + } + if _, ok := d.GetOk("alert_severity_list"); ok { + var alertSeverityList []string + for _, v := range d.Get("alert_severity_list").([]interface{}) { + alertSeverityListItem := v.(string) + alertSeverityList = append(alertSeverityList, alertSeverityListItem) + } + getHeliosAlertsOptions.SetAlertSeverityList(alertSeverityList) + } + if _, ok := d.GetOk("region_ids"); ok { + var regionIds []string + for _, v := range d.Get("region_ids").([]interface{}) { + regionIdsItem := v.(string) + regionIds = append(regionIds, regionIdsItem) + } + getHeliosAlertsOptions.SetRegionIds(regionIds) + } + if _, ok := d.GetOk("cluster_identifiers"); ok { + var clusterIdentifiers []string + for _, v := range d.Get("cluster_identifiers").([]interface{}) { + clusterIdentifiersItem := v.(string) + clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) + } + getHeliosAlertsOptions.SetClusterIdentifiers(clusterIdentifiers) + } + if _, ok := d.GetOk("start_date_usecs"); ok { + getHeliosAlertsOptions.SetStartDateUsecs(int64(d.Get("start_date_usecs").(int))) + } + if _, ok := d.GetOk("end_date_usecs"); ok { + getHeliosAlertsOptions.SetEndDateUsecs(int64(d.Get("end_date_usecs").(int))) + } + if _, ok := d.GetOk("max_alerts"); ok { + getHeliosAlertsOptions.SetMaxAlerts(int64(d.Get("max_alerts").(int))) + } + if _, ok := d.GetOk("alert_category_list"); ok { + var alertCategoryList []string + for _, v := range d.Get("alert_category_list").([]interface{}) { + alertCategoryListItem := v.(string) + alertCategoryList = append(alertCategoryList, alertCategoryListItem) + } + getHeliosAlertsOptions.SetAlertCategoryList(alertCategoryList) + } + if _, ok := d.GetOk("tenant_ids"); ok { + var tenantIds []string + for _, v := range d.Get("tenant_ids").([]interface{}) { + tenantIdsItem := v.(string) + tenantIds = append(tenantIds, tenantIdsItem) + } + getHeliosAlertsOptions.SetTenantIds(tenantIds) + } + if _, ok := d.GetOk("alert_type_bucket_list"); ok { + var alertTypeBucketList []string + for _, v := range d.Get("alert_type_bucket_list").([]interface{}) { + alertTypeBucketListItem := v.(string) + alertTypeBucketList = append(alertTypeBucketList, alertTypeBucketListItem) + } + getHeliosAlertsOptions.SetAlertTypeBucketList(alertTypeBucketList) + } + if _, ok := d.GetOk("alert_property_key_list"); ok { + var alertPropertyKeyList []string + for _, v := range d.Get("alert_property_key_list").([]interface{}) { + alertPropertyKeyListItem := v.(string) + alertPropertyKeyList = append(alertPropertyKeyList, alertPropertyKeyListItem) + } + getHeliosAlertsOptions.SetAlertPropertyKeyList(alertPropertyKeyList) + } + if _, ok := d.GetOk("alert_property_value_list"); ok { + var alertPropertyValueList []string + for _, v := range d.Get("alert_property_value_list").([]interface{}) { + alertPropertyValueListItem := v.(string) + alertPropertyValueList = append(alertPropertyValueList, alertPropertyValueListItem) + } + getHeliosAlertsOptions.SetAlertPropertyValueList(alertPropertyValueList) + } + if _, ok := d.GetOk("alert_name"); ok { + getHeliosAlertsOptions.SetAlertName(d.Get("alert_name").(string)) + } + if _, ok := d.GetOk("service_instance_ids"); ok { + var serviceInstanceIds []string + for _, v := range d.Get("service_instance_ids").([]interface{}) { + serviceInstanceIdsItem := v.(string) + serviceInstanceIds = append(serviceInstanceIds, serviceInstanceIdsItem) + } + getHeliosAlertsOptions.SetServiceInstanceIds(serviceInstanceIds) + } + + alertsList, _, err := heliosSreApiClient.GetHeliosAlertsWithContext(context, getHeliosAlertsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID(d)) + + alertsListItems := []map[string]interface{}{} + for _, alertsListItem := range alertsList.AlertsList { + alertsListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(&alertsListItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "alerts_list-to-map").GetDiag() + } + alertsListItems = append(alertsListItems, alertsListItemMap) + } + if err = d.Set("alerts_list", alertsList); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_list: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "set-alerts_list").GetDiag() + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backuprecoveryv1.Alert) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertCategory != nil { + modelMap["alert_category"] = *model.AlertCategory + } + if model.AlertCode != nil { + modelMap["alert_code"] = *model.AlertCode + } + if model.AlertDocument != nil { + alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertDocumentToMap(model.AlertDocument) + if err != nil { + return modelMap, err + } + modelMap["alert_document"] = []map[string]interface{}{alertDocumentMap} + } + if model.AlertState != nil { + modelMap["alert_state"] = *model.AlertState + } + if model.AlertType != nil { + modelMap["alert_type"] = flex.IntValue(model.AlertType) + } + if model.AlertTypeBucket != nil { + modelMap["alert_type_bucket"] = *model.AlertTypeBucket + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterName != nil { + modelMap["cluster_name"] = *model.ClusterName + } + if model.DedupCount != nil { + modelMap["dedup_count"] = flex.IntValue(model.DedupCount) + } + if model.DedupTimestamps != nil { + modelMap["dedup_timestamps"] = model.DedupTimestamps + } + if model.FirstTimestampUsecs != nil { + modelMap["first_timestamp_usecs"] = flex.IntValue(model.FirstTimestampUsecs) + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.LatestTimestampUsecs != nil { + modelMap["latest_timestamp_usecs"] = flex.IntValue(model.LatestTimestampUsecs) + } + if model.PropertyList != nil { + propertyList := []map[string]interface{}{} + for _, propertyListItem := range model.PropertyList { + propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsLabelToMap(&propertyListItem) // #nosec G601 + if err != nil { + return modelMap, err + } + propertyList = append(propertyList, propertyListItemMap) + } + modelMap["property_list"] = propertyList + } + if model.RegionID != nil { + modelMap["region_id"] = *model.RegionID + } + if model.ResolutionIdString != nil { + modelMap["resolution_id_string"] = *model.ResolutionIdString + } + if model.ServiceInstanceID != nil { + modelMap["service_instance_id"] = *model.ServiceInstanceID + } + if model.Severity != nil { + modelMap["severity"] = *model.Severity + } + if model.Vaults != nil { + vaults := []map[string]interface{}{} + for _, vaultsItem := range model.Vaults { + vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsVaultToMap(&vaultsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + vaults = append(vaults, vaultsItemMap) + } + modelMap["vaults"] = vaults + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertCause != nil { + modelMap["alert_cause"] = *model.AlertCause + } + if model.AlertDescription != nil { + modelMap["alert_description"] = *model.AlertDescription + } + if model.AlertHelpText != nil { + modelMap["alert_help_text"] = *model.AlertHelpText + } + if model.AlertName != nil { + modelMap["alert_name"] = *model.AlertName + } + if model.AlertSummary != nil { + modelMap["alert_summary"] = *model.AlertSummary + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["key"] = *model.Key + modelMap["value"] = *model.Value + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.GlobalVaultID != nil { + modelMap["global_vault_id"] = *model.GlobalVaultID + } + if model.RegionID != nil { + modelMap["region_id"] = *model.RegionID + } + if model.RegionName != nil { + modelMap["region_name"] = *model.RegionName + } + if model.VaultName != nil { + modelMap["vault_name"] = *model.VaultName + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go new file mode 100644 index 0000000000..441988a643 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go @@ -0,0 +1,263 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionRead, + + Schema: map[string]*schema.Schema{ + "max_resolutions": &schema.Schema{ + Type: schema.TypeInt, + Required: true, + Description: "Specifies the max number of Resolutions to be returned, from the latest created to the earliest created.", + }, + "resolution_name": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies Alert Resolution Name to query.", + }, + "resolution_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies Alert Resolution id to query.", + }, + "alert_resolutions_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "List of alert resolutions.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "account_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies account id of the user who create the resolution.", + }, + "created_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies unix epoch timestamp (in microseconds) when the resolution is created.", + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the full description about the Resolution.", + }, + "external_key": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the external key assigned outside of helios, with the form of \"clusterid:resolutionid\".", + }, + "resolution_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the unique reslution id assigned in helios.", + }, + "resolution_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the unique name of the resolution.", + }, + "resolved_alerts": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alert_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Id of the alert.", + }, + "alert_id_str": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Alert Id with string format.", + }, + "alert_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Name of the alert being resolved.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Id of the cluster which the alert is associated.", + }, + "first_timestamp_usecs": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "First occurrence of the alert.", + }, + "resolved_time_usec": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + }, + "service_instance_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Id of the service instance which the alert is associated.", + }, + }, + }, + }, + "silence_minutes": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the time duration (in minutes) for silencing alerts. If unspecified or set zero, a silence rule will be created with default expiry time. No silence rule will be created if value < 0.", + }, + "tenant_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies tenant id of the user who create the resolution.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getHeliosAlertResolutionOptions := &backuprecoveryv1.GetHeliosAlertResolutionOptions{} + + getHeliosAlertResolutionOptions.SetMaxResolutions(int64(d.Get("max_resolutions").(int))) + if _, ok := d.GetOk("resolution_name"); ok { + getHeliosAlertResolutionOptions.SetResolutionName(d.Get("resolution_name").(string)) + } + if _, ok := d.GetOk("resolution_id"); ok { + getHeliosAlertResolutionOptions.SetResolutionID(d.Get("resolution_id").(string)) + } + + alertResolutionsList, _, err := heliosSreApiClient.GetHeliosAlertResolutionWithContext(context, getHeliosAlertResolutionOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertResolutionWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID(d)) + + if !core.IsNil(alertResolutionsList) { + alertResolutionsListItems := [][]map[string]interface{}{} + + for _, alertResolutionsListItem := range alertResolutionsList { + + alertResolutionsItems := []map[string]interface{}{} + + for _, alertResolutionsListItem := range alertResolutionsListItem.AlertResolutionsList { + + alertResolutionsItem, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResolutionToMap(&alertResolutionsListItem) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "alert_resolutions_list-to-map").GetDiag() + } + + alertResolutionsItems = append(alertResolutionsItems, alertResolutionsItem) + } + alertResolutionsListItems = append(alertResolutionsListItems, alertResolutionsItems) + } + + if err = d.Set("alert_resolutions_list", alertResolutionsList); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alert_resolutions_list: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "set-alert_resolutions_list").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResolutionToMap(model *backuprecoveryv1.AlertResolution) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AccountID != nil { + modelMap["account_id"] = *model.AccountID + } + if model.CreatedTimeUsecs != nil { + modelMap["created_time_usecs"] = flex.IntValue(model.CreatedTimeUsecs) + } + if model.Description != nil { + modelMap["description"] = *model.Description + } + if model.ExternalKey != nil { + modelMap["external_key"] = *model.ExternalKey + } + if model.ResolutionID != nil { + modelMap["resolution_id"] = *model.ResolutionID + } + if model.ResolutionName != nil { + modelMap["resolution_name"] = *model.ResolutionName + } + if model.ResolvedAlerts != nil { + resolvedAlerts := []map[string]interface{}{} + for _, resolvedAlertsItem := range model.ResolvedAlerts { + resolvedAlertsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionResolvedAlertInfoToMap(&resolvedAlertsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + resolvedAlerts = append(resolvedAlerts, resolvedAlertsItemMap) + } + modelMap["resolved_alerts"] = resolvedAlerts + } + if model.SilenceMinutes != nil { + modelMap["silence_minutes"] = flex.IntValue(model.SilenceMinutes) + } + if model.TenantID != nil { + modelMap["tenant_id"] = *model.TenantID + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionResolvedAlertInfoToMap(model *backuprecoveryv1.ResolvedAlertInfo) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertID != nil { + modelMap["alert_id"] = flex.IntValue(model.AlertID) + } + if model.AlertIdStr != nil { + modelMap["alert_id_str"] = *model.AlertIdStr + } + if model.AlertName != nil { + modelMap["alert_name"] = *model.AlertName + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.FirstTimestampUsecs != nil { + modelMap["first_timestamp_usecs"] = flex.IntValue(model.FirstTimestampUsecs) + } + if model.ResolvedTimeUsec != nil { + modelMap["resolved_time_usec"] = flex.IntValue(model.ResolvedTimeUsec) + } + if model.ServiceInstanceID != nil { + modelMap["service_instance_id"] = *model.ServiceInstanceID + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go new file mode 100644 index 0000000000..b011383125 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go @@ -0,0 +1,43 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.backup_recovery_manager_sre_get_helios_alerts_resolution_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.backup_recovery_manager_sre_get_helios_alerts_resolution_instance", "max_resolutions"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_helios_alerts_resolution" "backup_recovery_manager_sre_get_helios_alerts_resolution_instance" { + maxResolutions = 1 + resolutionName = "resolutionName" + resolutionId = "resolutionId" + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go new file mode 100644 index 0000000000..0a22506fe6 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go @@ -0,0 +1,558 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead, + + Schema: map[string]*schema.Schema{ + "start_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Required: true, + Description: "Specifies the start time Unix time epoch in microseconds from which the active alerts stats are computed.", + }, + "end_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Required: true, + Description: "Specifies the end time Unix time epoch in microseconds to which the active alerts stats are computed.", + }, + "cluster_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the list of cluster IDs.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + "region_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Filter by a list of region ids.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "exclude_stats_by_cluster": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Description: "Specifies if stats of active alerts per cluster needs to be excluded. If set to false (default value), stats of active alerts per cluster is included in the response. If set to true, only aggregated stats summary will be present in the response.", + }, + "alert_source": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies a list of alert origination source. If not specified, all alerts from all the sources are considered in the response.", + }, + "tenant_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies a list of tenants.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "aggregated_alerts_stats": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the active alert statistics details.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "num_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active critical Alerts excluding alerts that belong to other bucket.", + }, + "num_critical_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active critical alerts categories.", + }, + "num_data_service_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service Alerts.", + }, + "num_data_service_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service critical Alerts.", + }, + "num_data_service_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service info Alerts.", + }, + "num_data_service_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service warning Alerts.", + }, + "num_hardware_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware Alerts.", + }, + "num_hardware_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware critical Alerts.", + }, + "num_hardware_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware info Alerts.", + }, + "num_hardware_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware warning Alerts.", + }, + "num_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active info Alerts excluding alerts that belong to other bucket.", + }, + "num_info_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active info alerts categories.", + }, + "num_maintenance_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active Alerts of maintenance bucket.", + }, + "num_maintenance_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other critical Alerts.", + }, + "num_maintenance_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other info Alerts.", + }, + "num_maintenance_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other warning Alerts.", + }, + "num_software_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software Alerts.", + }, + "num_software_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software critical Alerts.", + }, + "num_software_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software info Alerts.", + }, + "num_software_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software warning Alerts.", + }, + "num_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active warning Alerts excluding alerts that belong to other bucket.", + }, + "num_warning_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active warning alerts categories.", + }, + }, + }, + }, + "aggregated_cluster_stats": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the cluster statistics based on active alerts.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "num_clusters_with_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of clusters with at least one critical alert.", + }, + "num_clusters_with_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of clusters with at least one warning category alert and no critical alerts.", + }, + "num_healthy_clusters": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of clusters with no warning or critical alerts.", + }, + }, + }, + }, + "stats_by_cluster": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the active Alerts stats by clusters.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "alerts_stats": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies the active alert statistics details.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "num_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active critical Alerts excluding alerts that belong to other bucket.", + }, + "num_critical_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active critical alerts categories.", + }, + "num_data_service_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service Alerts.", + }, + "num_data_service_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service critical Alerts.", + }, + "num_data_service_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service info Alerts.", + }, + "num_data_service_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active service warning Alerts.", + }, + "num_hardware_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware Alerts.", + }, + "num_hardware_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware critical Alerts.", + }, + "num_hardware_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware info Alerts.", + }, + "num_hardware_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active hardware warning Alerts.", + }, + "num_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active info Alerts excluding alerts that belong to other bucket.", + }, + "num_info_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active info alerts categories.", + }, + "num_maintenance_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active Alerts of maintenance bucket.", + }, + "num_maintenance_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other critical Alerts.", + }, + "num_maintenance_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other info Alerts.", + }, + "num_maintenance_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active other warning Alerts.", + }, + "num_software_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software Alerts.", + }, + "num_software_critical_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software critical Alerts.", + }, + "num_software_info_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software info Alerts.", + }, + "num_software_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active software warning Alerts.", + }, + "num_warning_alerts": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active warning Alerts excluding alerts that belong to other bucket.", + }, + "num_warning_alerts_categories": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the count of active warning alerts categories.", + }, + }, + }, + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies the Cluster Id.", + }, + "region_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the region id of cluster.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getHeliosAlertsStatsOptions := &backuprecoveryv1.GetHeliosAlertsStatsOptions{} + + getHeliosAlertsStatsOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + getHeliosAlertsStatsOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + if _, ok := d.GetOk("cluster_ids"); ok { + var clusterIds []int64 + for _, v := range d.Get("cluster_ids").([]interface{}) { + clusterIdsItem := int64(v.(int)) + clusterIds = append(clusterIds, clusterIdsItem) + } + getHeliosAlertsStatsOptions.SetClusterIds(clusterIds) + } + if _, ok := d.GetOk("region_ids"); ok { + var regionIds []string + for _, v := range d.Get("region_ids").([]interface{}) { + regionIdsItem := v.(string) + regionIds = append(regionIds, regionIdsItem) + } + getHeliosAlertsStatsOptions.SetRegionIds(regionIds) + } + if _, ok := d.GetOk("exclude_stats_by_cluster"); ok { + getHeliosAlertsStatsOptions.SetExcludeStatsByCluster(d.Get("exclude_stats_by_cluster").(bool)) + } + if _, ok := d.GetOk("alert_source"); ok { + getHeliosAlertsStatsOptions.SetAlertSource(d.Get("alert_source").(string)) + } + if _, ok := d.GetOk("tenant_ids"); ok { + var tenantIds []string + for _, v := range d.Get("tenant_ids").([]interface{}) { + tenantIdsItem := v.(string) + tenantIds = append(tenantIds, tenantIdsItem) + } + getHeliosAlertsStatsOptions.SetTenantIds(tenantIds) + } + + mcmActiveAlertsStats, _, err := heliosSreApiClient.GetHeliosAlertsStatsWithContext(context, getHeliosAlertsStatsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsStatsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID(d)) + + if !core.IsNil(mcmActiveAlertsStats.AggregatedAlertsStats) { + aggregatedAlertsStats := []map[string]interface{}{} + aggregatedAlertsStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(mcmActiveAlertsStats.AggregatedAlertsStats) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "aggregated_alerts_stats-to-map").GetDiag() + } + aggregatedAlertsStats = append(aggregatedAlertsStats, aggregatedAlertsStatsMap) + if err = d.Set("aggregated_alerts_stats", aggregatedAlertsStats); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_alerts_stats: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-aggregated_alerts_stats").GetDiag() + } + } + + if !core.IsNil(mcmActiveAlertsStats.AggregatedClusterStats) { + aggregatedClusterStats := []map[string]interface{}{} + aggregatedClusterStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsClusterAlertStatsToMap(mcmActiveAlertsStats.AggregatedClusterStats) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "aggregated_cluster_stats-to-map").GetDiag() + } + aggregatedClusterStats = append(aggregatedClusterStats, aggregatedClusterStatsMap) + if err = d.Set("aggregated_cluster_stats", aggregatedClusterStats); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_cluster_stats: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-aggregated_cluster_stats").GetDiag() + } + } + + if !core.IsNil(mcmActiveAlertsStats.StatsByCluster) { + statsByCluster := []map[string]interface{}{} + for _, statsByClusterItem := range mcmActiveAlertsStats.StatsByCluster { + statsByClusterItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsMcmActiveAlertsStatsByClusterToMap(&statsByClusterItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "stats_by_cluster-to-map").GetDiag() + } + statsByCluster = append(statsByCluster, statsByClusterItemMap) + } + if err = d.Set("stats_by_cluster", statsByCluster); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting stats_by_cluster: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-stats_by_cluster").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(model *backuprecoveryv1.ActiveAlertsStats) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.NumCriticalAlerts != nil { + modelMap["num_critical_alerts"] = flex.IntValue(model.NumCriticalAlerts) + } + if model.NumCriticalAlertsCategories != nil { + modelMap["num_critical_alerts_categories"] = flex.IntValue(model.NumCriticalAlertsCategories) + } + if model.NumDataServiceAlerts != nil { + modelMap["num_data_service_alerts"] = flex.IntValue(model.NumDataServiceAlerts) + } + if model.NumDataServiceCriticalAlerts != nil { + modelMap["num_data_service_critical_alerts"] = flex.IntValue(model.NumDataServiceCriticalAlerts) + } + if model.NumDataServiceInfoAlerts != nil { + modelMap["num_data_service_info_alerts"] = flex.IntValue(model.NumDataServiceInfoAlerts) + } + if model.NumDataServiceWarningAlerts != nil { + modelMap["num_data_service_warning_alerts"] = flex.IntValue(model.NumDataServiceWarningAlerts) + } + if model.NumHardwareAlerts != nil { + modelMap["num_hardware_alerts"] = flex.IntValue(model.NumHardwareAlerts) + } + if model.NumHardwareCriticalAlerts != nil { + modelMap["num_hardware_critical_alerts"] = flex.IntValue(model.NumHardwareCriticalAlerts) + } + if model.NumHardwareInfoAlerts != nil { + modelMap["num_hardware_info_alerts"] = flex.IntValue(model.NumHardwareInfoAlerts) + } + if model.NumHardwareWarningAlerts != nil { + modelMap["num_hardware_warning_alerts"] = flex.IntValue(model.NumHardwareWarningAlerts) + } + if model.NumInfoAlerts != nil { + modelMap["num_info_alerts"] = flex.IntValue(model.NumInfoAlerts) + } + if model.NumInfoAlertsCategories != nil { + modelMap["num_info_alerts_categories"] = flex.IntValue(model.NumInfoAlertsCategories) + } + if model.NumMaintenanceAlerts != nil { + modelMap["num_maintenance_alerts"] = flex.IntValue(model.NumMaintenanceAlerts) + } + if model.NumMaintenanceCriticalAlerts != nil { + modelMap["num_maintenance_critical_alerts"] = flex.IntValue(model.NumMaintenanceCriticalAlerts) + } + if model.NumMaintenanceInfoAlerts != nil { + modelMap["num_maintenance_info_alerts"] = flex.IntValue(model.NumMaintenanceInfoAlerts) + } + if model.NumMaintenanceWarningAlerts != nil { + modelMap["num_maintenance_warning_alerts"] = flex.IntValue(model.NumMaintenanceWarningAlerts) + } + if model.NumSoftwareAlerts != nil { + modelMap["num_software_alerts"] = flex.IntValue(model.NumSoftwareAlerts) + } + if model.NumSoftwareCriticalAlerts != nil { + modelMap["num_software_critical_alerts"] = flex.IntValue(model.NumSoftwareCriticalAlerts) + } + if model.NumSoftwareInfoAlerts != nil { + modelMap["num_software_info_alerts"] = flex.IntValue(model.NumSoftwareInfoAlerts) + } + if model.NumSoftwareWarningAlerts != nil { + modelMap["num_software_warning_alerts"] = flex.IntValue(model.NumSoftwareWarningAlerts) + } + if model.NumWarningAlerts != nil { + modelMap["num_warning_alerts"] = flex.IntValue(model.NumWarningAlerts) + } + if model.NumWarningAlertsCategories != nil { + modelMap["num_warning_alerts_categories"] = flex.IntValue(model.NumWarningAlertsCategories) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsClusterAlertStatsToMap(model *backuprecoveryv1.ClusterAlertStats) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.NumClustersWithCriticalAlerts != nil { + modelMap["num_clusters_with_critical_alerts"] = flex.IntValue(model.NumClustersWithCriticalAlerts) + } + if model.NumClustersWithWarningAlerts != nil { + modelMap["num_clusters_with_warning_alerts"] = flex.IntValue(model.NumClustersWithWarningAlerts) + } + if model.NumHealthyClusters != nil { + modelMap["num_healthy_clusters"] = flex.IntValue(model.NumHealthyClusters) + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsMcmActiveAlertsStatsByClusterToMap(model *backuprecoveryv1.McmActiveAlertsStatsByCluster) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.AlertsStats != nil { + alertsStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(model.AlertsStats) + if err != nil { + return modelMap, err + } + modelMap["alerts_stats"] = []map[string]interface{}{alertsStatsMap} + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.RegionID != nil { + modelMap["region_id"] = *model.RegionID + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go new file mode 100644 index 0000000000..40715fa4e8 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go @@ -0,0 +1,48 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "start_time_usecs"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "end_time_usecs"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_helios_alerts_stats" "backup_recovery_manager_sre_get_helios_alerts_stats_instance" { + startTimeUsecs = 1 + endTimeUsecs = 1 + clusterIds = [ 1 ] + regionIds = [ "regionIds" ] + excludeStatsByCluster = true + alertSource = "kCluster" + tenantIds = [ "tenantIds" ] + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go new file mode 100644 index 0000000000..ff6e2daab1 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go @@ -0,0 +1,184 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummary() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead, + + Schema: map[string]*schema.Schema{ + "cluster_identifiers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the list of cluster identifiers. Format is clusterId:clusterIncarnationId.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "start_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Filter by start time. Specify the start time as a Unix epoch Timestamp (in microseconds). By default it is current time minus a day.", + }, + "end_time_usecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Filter by end time. Specify the end time as a Unix epoch Timestamp (in microseconds). By default it is current time.", + }, + "states_list": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of alert states to filter alerts by. If not specified, only open alerts will be used to get summary.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "alerts_summary": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies a list of alerts summary grouped by category.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "category": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Category of alerts by which summary is grouped.", + }, + "critical_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of critical alerts.", + }, + "info_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of info alerts.", + }, + "total_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of total alerts.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Type/bucket that this alert category belongs to.", + }, + "warning_count": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies count of warning alerts.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getHeliosAlertsSummaryOptions := &backuprecoveryv1.GetHeliosAlertsSummaryOptions{} + + if _, ok := d.GetOk("cluster_identifiers"); ok { + var clusterIdentifiers []string + for _, v := range d.Get("cluster_identifiers").([]interface{}) { + clusterIdentifiersItem := v.(string) + clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) + } + getHeliosAlertsSummaryOptions.SetClusterIdentifiers(clusterIdentifiers) + } + if _, ok := d.GetOk("start_time_usecs"); ok { + getHeliosAlertsSummaryOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + } + if _, ok := d.GetOk("end_time_usecs"); ok { + getHeliosAlertsSummaryOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + } + if _, ok := d.GetOk("states_list"); ok { + var statesList []string + for _, v := range d.Get("states_list").([]interface{}) { + statesListItem := v.(string) + statesList = append(statesList, statesListItem) + } + getHeliosAlertsSummaryOptions.SetStatesList(statesList) + } + + alertsHeliosSummaryResponse, _, err := heliosSreApiClient.GetHeliosAlertsSummaryWithContext(context, getHeliosAlertsSummaryOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID(d)) + + if !core.IsNil(alertsHeliosSummaryResponse.AlertsSummary) { + alertsSummary := []map[string]interface{}{} + for _, alertsSummaryItem := range alertsHeliosSummaryResponse.AlertsSummary { + alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "alerts_summary-to-map").GetDiag() + } + alertsSummary = append(alertsSummary, alertsSummaryItemMap) + } + if err = d.Set("alerts_summary", alertsSummary); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "set-alerts_summary").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Category != nil { + modelMap["category"] = *model.Category + } + if model.CriticalCount != nil { + modelMap["critical_count"] = flex.IntValue(model.CriticalCount) + } + if model.InfoCount != nil { + modelMap["info_count"] = flex.IntValue(model.InfoCount) + } + if model.TotalCount != nil { + modelMap["total_count"] = flex.IntValue(model.TotalCount) + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.WarningCount != nil { + modelMap["warning_count"] = flex.IntValue(model.WarningCount) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go new file mode 100644 index 0000000000..4596b3f7cc --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go @@ -0,0 +1,43 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_summary.backup_recovery_manager_sre_get_helios_alerts_summary_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_helios_alerts_summary" "backup_recovery_manager_sre_get_helios_alerts_summary_instance" { + clusterIdentifiers = [ "clusterIdentifiers" ] + startTimeUsecs = 1 + endTimeUsecs = 1 + statesList = [ "kResolved" ] + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go new file mode 100644 index 0000000000..82c8eeccac --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go @@ -0,0 +1,56 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts.backup_recovery_manager_sre_get_helios_alerts_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts.backup_recovery_manager_sre_get_helios_alerts_instance", "alerts_list.#"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_helios_alerts" "backup_recovery_manager_sre_get_helios_alerts_instance" { + alertIdList = [ "alertIdList" ] + alertStateList = [ "alertStateList" ] + alertTypeList = [ 1 ] + alertSeverityList = [ "kCritical" ] + regionIds = [ "regionIds" ] + clusterIdentifiers = [ "clusterIdentifiers" ] + startDateUsecs = 1 + endDateUsecs = 1 + maxAlerts = 1 + alertCategoryList = [ "kDisk" ] + tenantIds = [ "tenantIds" ] + alertTypeBucketList = [ "kHardware" ] + alertPropertyKeyList = [ "alertPropertyKeyList" ] + alertPropertyValueList = [ "alertPropertyValueList" ] + alertName = "alertName" + serviceInstanceIds = [ "serviceInstanceIds" ] + } + `) +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go new file mode 100644 index 0000000000..37a5df675d --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go @@ -0,0 +1,75 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerSreGetUpgradesInfo() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoRead, + + Schema: map[string]*schema.Schema{ + "cluster_identifiers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Fetch upgrade progress details for a list of cluster identifiers in format clusterId:clusterIncarnationId.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_upgrades_info", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + clustersUpgradesInfoOptions := &backuprecoveryv1.ClustersUpgradesInfoOptions{} + + if _, ok := d.GetOk("cluster_identifiers"); ok { + var clusterIdentifiers []string + for _, v := range d.Get("cluster_identifiers").([]interface{}) { + clusterIdentifiersItem := v.(string) + clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) + } + clustersUpgradesInfoOptions.SetClusterIdentifiers(clusterIdentifiers) + } + + _, _, err = heliosSreApiClient.ClustersUpgradesInfoWithContext(context, clustersUpgradesInfoOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ClustersUpgradesInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_upgrades_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID(d)) + + return nil +} + +// dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go new file mode 100644 index 0000000000..b9d25ea5c0 --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go @@ -0,0 +1,40 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_upgrades_info.backup_recovery_manager_sre_get_upgrades_info_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceConfigBasic() string { + return fmt.Sprintf(` + data "ibm_backup_recovery_manager_sre_get_upgrades_info" "backup_recovery_manager_sre_get_upgrades_info_instance" { + clusterIdentifiers = [ "clusterIdentifiers" ] + } + `) +} From c281714f1c1701bb3398722a8733e8cc425db4ad Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Mon, 27 Oct 2025 18:15:39 +0530 Subject: [PATCH 05/15] remove reporting api support --- ...m_backup_recovery_manager_get_component.go | 622 --------- ..._recovery_manager_get_component_preview.go | 1234 ----------------- ...very_manager_get_component_preview_test.go | 514 ------- ...kup_recovery_manager_get_component_test.go | 361 ----- ..._backup_recovery_manager_get_components.go | 637 --------- ...up_recovery_manager_get_components_test.go | 510 ------- ..._ibm_backup_recovery_manager_get_report.go | 129 -- ...kup_recovery_manager_get_report_preview.go | 1050 -------------- ...ecovery_manager_get_report_preview_test.go | 514 ------- ...backup_recovery_manager_get_report_test.go | 41 - ...backup_recovery_manager_get_report_type.go | 110 -- ...p_recovery_manager_get_report_type_test.go | 63 - ...ibm_backup_recovery_manager_get_reports.go | 166 --- ...ackup_recovery_manager_get_reports_test.go | 71 - ...m_backup_recovery_manager_get_resources.go | 405 ------ ...kup_recovery_manager_get_resources_test.go | 171 --- 16 files changed, 6598 deletions(-) delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go deleted file mode 100644 index 69b016235c..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component.go +++ /dev/null @@ -1,622 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -import ( - "context" - "fmt" - "log" - - "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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetComponent() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentRead, - - Schema: map[string]*schema.Schema{ - "component_id": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the id of the report component.", - }, - "aggs": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the aggregation related information that needs to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregated_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of aggregation properties to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregation_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the aggregation type.", - }, - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute name.", - }, - "label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", - }, - }, - }, - }, - "grouped_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of attributes to be grouped in the aggregation.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "xlsx_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize a component in excel report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "custom_label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", - }, - "format": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - "data": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the data returned after evaluating the component.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Component.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "limit": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the parameters to limit the resulting dataset.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "from": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", - }, - "size": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the number of objects to be returned from the offset specified.", - }, - }, - }, - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Component.", - }, - "report_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the report type on top of which this Component is created from.", - }, - "sort": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "desc": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether the sorting order should be descending. Default value is false.", - }, - }, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetComponentRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosReportingServiceApIsClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getComponentByIdOptions := &backuprecoveryv1.GetComponentByIdOptions{} - - getComponentByIdOptions.SetID(d.Get("component_id").(string)) - - component, _, err := heliosReportingServiceApIsClient.GetComponentByIDWithContext(context, getComponentByIdOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentByIDWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_component", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(*component.ID) - - if !core.IsNil(component.Aggs) { - aggs := []map[string]interface{}{} - aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(component.Aggs) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "aggs-to-map").GetDiag() - } - aggs = append(aggs, aggsMap) - if err = d.Set("aggs", aggs); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggs: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-aggs").GetDiag() - } - } - - if !core.IsNil(component.Config) { - config := []map[string]interface{}{} - configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(component.Config) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "config-to-map").GetDiag() - } - config = append(config, configMap) - if err = d.Set("config", config); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting config: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-config").GetDiag() - } - } - - if !core.IsNil(component.Data) { - data := []map[string]interface{}{} - for _, dataItem := range component.Data { - data = append(data, dataItem) - } - if err = d.Set("data", data); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting data: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-data").GetDiag() - } - } - - if !core.IsNil(component.Description) { - if err = d.Set("description", component.Description); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-description").GetDiag() - } - } - - if !core.IsNil(component.Filters) { - filters := []map[string]interface{}{} - for _, filtersItem := range component.Filters { - filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(&filtersItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "filters-to-map").GetDiag() - } - filters = append(filters, filtersItemMap) - } - if err = d.Set("filters", filters); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting filters: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-filters").GetDiag() - } - } - - if !core.IsNil(component.Limit) { - limit := []map[string]interface{}{} - limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(component.Limit) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "limit-to-map").GetDiag() - } - limit = append(limit, limitMap) - if err = d.Set("limit", limit); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting limit: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-limit").GetDiag() - } - } - - if !core.IsNil(component.Name) { - if err = d.Set("name", component.Name); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-name").GetDiag() - } - } - - if !core.IsNil(component.ReportType) { - if err = d.Set("report_type", component.ReportType); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting report_type: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-report_type").GetDiag() - } - } - - if !core.IsNil(component.Sort) { - sort := []map[string]interface{}{} - for _, sortItem := range component.Sort { - sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(&sortItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component", "read", "sort-to-map").GetDiag() - } - sort = append(sort, sortItemMap) - } - if err = d.Set("sort", sort); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sort: %s", err), "(Data) ibm_backup_recovery_manager_get_component", "read", "set-sort").GetDiag() - } - } - - return nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AggregatedAttributes != nil { - aggregatedAttributes := []map[string]interface{}{} - for _, aggregatedAttributesItem := range model.AggregatedAttributes { - aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 - if err != nil { - return modelMap, err - } - aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) - } - modelMap["aggregated_attributes"] = aggregatedAttributes - } - if model.GroupedAttributes != nil { - modelMap["grouped_attributes"] = model.GroupedAttributes - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["aggregation_type"] = *model.AggregationType - modelMap["attribute"] = *model.Attribute - if model.Label != nil { - modelMap["label"] = *model.Label - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.XlsxParams != nil { - xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model.XlsxParams) - if err != nil { - return modelMap, err - } - modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AttributeConfig != nil { - attributeConfig := []map[string]interface{}{} - for _, attributeConfigItem := range model.AttributeConfig { - attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 - if err != nil { - return modelMap, err - } - attributeConfig = append(attributeConfig, attributeConfigItemMap) - } - modelMap["attribute_config"] = attributeConfig - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_name"] = *model.AttributeName - if model.CustomLabel != nil { - modelMap["custom_label"] = *model.CustomLabel - } - if model.Format != nil { - modelMap["format"] = *model.Format - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.From != nil { - modelMap["from"] = flex.IntValue(model.From) - } - modelMap["size"] = flex.IntValue(model.Size) - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - if model.Desc != nil { - modelMap["desc"] = *model.Desc - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go deleted file mode 100644 index 6e58f77a3a..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview.go +++ /dev/null @@ -1,1234 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery - -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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetComponentPreview() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentPreviewRead, - - Schema: map[string]*schema.Schema{ - "component_id": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the id of the component.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies list of global filters that are applicable to given components in the report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "sort": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "desc": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether the sorting order should be descending. Default value is false.", - }, - }, - }, - }, - "timezone": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", - }, - "component": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies a Report Component.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggs": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the aggregation related information that needs to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregated_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of aggregation properties to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregation_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the aggregation type.", - }, - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute name.", - }, - "label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", - }, - }, - }, - }, - "grouped_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of attributes to be grouped in the aggregation.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "xlsx_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize a component in excel report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "custom_label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", - }, - "format": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - "data": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the data returned after evaluating the component.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Component.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Component.", - }, - "limit": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the parameters to limit the resulting dataset.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "from": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", - }, - "size": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the number of objects to be returned from the offset specified.", - }, - }, - }, - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Component.", - }, - "report_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the report type on top of which this Component is created from.", - }, - "sort": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "desc": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether the sorting order should be descending. Default value is false.", - }, - }, - }, - }, - }, - }, - }, - "generated_timestamp_usecs": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the epoch timestamp in UTC in microseconds.", - }, - "last_refresh_timestamp_usecs": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the last refresh timestamp of data used to evaluate the component. If this parameter is not returned, then 'generatedTimestampUsecs' can be used for last refreshed timestamp of the data. This is epoch timestamp in UTC in microseconds.", - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetComponentPreviewRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getComponentPreviewOptions := &backuprecoveryv1.GetComponentPreviewOptions{} - - getComponentPreviewOptions.SetID(d.Get("component_id").(string)) - - if _, ok := d.GetOk("filters"); ok { - var filters []backuprecoveryv1.AttributeFilter - for _, v := range d.Get("filters").([]interface{}) { - value := v.(map[string]interface{}) - filtersItem, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeFilter(value) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "parse-filters").GetDiag() - } - filters = append(filters, *filtersItem) - } - getComponentPreviewOptions.SetFilters(filters) - } - if _, ok := d.GetOk("limit"); ok { - limitModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToLimitParams(d.Get("limit.0").(map[string]interface{})) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_get_component_preview", "read", "parse-limit").GetDiag() - } - getComponentPreviewOptions.SetLimit(limitModel) - } - if _, ok := d.GetOk("sort"); ok { - var sort []backuprecoveryv1.AttributeSort - for _, v := range d.Get("sort").([]interface{}) { - value := v.(map[string]interface{}) - sortItem, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeSort(value) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "parse-sort").GetDiag() - } - sort = append(sort, *sortItem) - } - getComponentPreviewOptions.SetSort(sort) - } - if _, ok := d.GetOk("timezone"); ok { - getComponentPreviewOptions.SetTimezone(d.Get("timezone").(string)) - } - - componentPreview, _, err := backupRecoveryClient.GetComponentPreviewWithContext(context, getComponentPreviewOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentPreviewWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_component_preview", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerGetComponentPreviewID(d)) - - if !core.IsNil(componentPreview.Component) { - component := []map[string]interface{}{} - componentMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(componentPreview.Component) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "component-to-map").GetDiag() - } - component = append(component, componentMap) - if err = d.Set("component", component); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting component: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-component").GetDiag() - } - } - - if !core.IsNil(componentPreview.GeneratedTimestampUsecs) { - if err = d.Set("generated_timestamp_usecs", flex.IntValue(componentPreview.GeneratedTimestampUsecs)); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting generated_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-generated_timestamp_usecs").GetDiag() - } - } - - if !core.IsNil(componentPreview.LastRefreshTimestampUsecs) { - if err = d.Set("last_refresh_timestamp_usecs", flex.IntValue(componentPreview.LastRefreshTimestampUsecs)); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting last_refresh_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_component_preview", "read", "set-last_refresh_timestamp_usecs").GetDiag() - } - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerGetComponentPreviewID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerGetComponentPreviewID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Aggs != nil { - aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model.Aggs) - if err != nil { - return modelMap, err - } - modelMap["aggs"] = []map[string]interface{}{aggsMap} - } - if model.Config != nil { - configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model.Config) - if err != nil { - return modelMap, err - } - modelMap["config"] = []map[string]interface{}{configMap} - } - if model.Data != nil { - modelMap["data"] = model.Data - } - if model.Description != nil { - modelMap["description"] = *model.Description - } - if model.Filters != nil { - filters := []map[string]interface{}{} - for _, filtersItem := range model.Filters { - filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 - if err != nil { - return modelMap, err - } - filters = append(filters, filtersItemMap) - } - modelMap["filters"] = filters - } - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.Limit != nil { - limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model.Limit) - if err != nil { - return modelMap, err - } - modelMap["limit"] = []map[string]interface{}{limitMap} - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.ReportType != nil { - modelMap["report_type"] = *model.ReportType - } - if model.Sort != nil { - sort := []map[string]interface{}{} - for _, sortItem := range model.Sort { - sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(&sortItem) // #nosec G601 - if err != nil { - return modelMap, err - } - sort = append(sort, sortItemMap) - } - modelMap["sort"] = sort - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AggregatedAttributes != nil { - aggregatedAttributes := []map[string]interface{}{} - for _, aggregatedAttributesItem := range model.AggregatedAttributes { - aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 - if err != nil { - return modelMap, err - } - aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) - } - modelMap["aggregated_attributes"] = aggregatedAttributes - } - if model.GroupedAttributes != nil { - modelMap["grouped_attributes"] = model.GroupedAttributes - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["aggregation_type"] = *model.AggregationType - modelMap["attribute"] = *model.Attribute - if model.Label != nil { - modelMap["label"] = *model.Label - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.XlsxParams != nil { - xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) - if err != nil { - return modelMap, err - } - modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AttributeConfig != nil { - attributeConfig := []map[string]interface{}{} - for _, attributeConfigItem := range model.AttributeConfig { - attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 - if err != nil { - return modelMap, err - } - attributeConfig = append(attributeConfig, attributeConfigItemMap) - } - modelMap["attribute_config"] = attributeConfig - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_name"] = *model.AttributeName - if model.CustomLabel != nil { - modelMap["custom_label"] = *model.CustomLabel - } - if model.Format != nil { - modelMap["format"] = *model.Format - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.From != nil { - modelMap["from"] = flex.IntValue(model.From) - } - modelMap["size"] = flex.IntValue(model.Size) - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - if model.Desc != nil { - modelMap["desc"] = *model.Desc - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { - model := &backuprecoveryv1.AttributeFilter{} - model.Attribute = core.StringPtr(modelMap["attribute"].(string)) - model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) - if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { - InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.InFilterParams = InFilterParamsModel - } - if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { - RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.RangeFilterParams = RangeFilterParamsModel - } - if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { - SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.SystemsFilterParams = SystemsFilterParamsModel - } - if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { - TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.TimeRangeFilterParams = TimeRangeFilterParamsModel - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { - model := &backuprecoveryv1.InFilterParams{} - model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) - if modelMap["attribute_labels"] != nil { - attributeLabels := []string{} - for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { - attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) - } - model.AttributeLabels = attributeLabels - } - if modelMap["bool_filter_values"] != nil { - boolFilterValues := []bool{} - for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { - boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) - } - model.BoolFilterValues = boolFilterValues - } - if modelMap["int32_filter_values"] != nil { - int32FilterValues := []int64{} - for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { - int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) - } - model.Int32FilterValues = int32FilterValues - } - if modelMap["int64_filter_values"] != nil { - int64FilterValues := []int64{} - for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { - int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) - } - model.Int64FilterValues = int64FilterValues - } - if modelMap["string_filter_values"] != nil { - stringFilterValues := []string{} - for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { - stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) - } - model.StringFilterValues = stringFilterValues - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { - model := &backuprecoveryv1.RangeFilterParams{} - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { - model := &backuprecoveryv1.SystemsFilterParams{} - systemIds := []string{} - for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { - systemIds = append(systemIds, systemIdsItem.(string)) - } - model.SystemIds = systemIds - if modelMap["system_names"] != nil { - systemNames := []string{} - for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { - systemNames = append(systemNames, systemNamesItem.(string)) - } - model.SystemNames = systemNames - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { - model := &backuprecoveryv1.TimeRangeFilterParams{} - if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { - model.DateRange = core.StringPtr(modelMap["date_range"].(string)) - } - if modelMap["duration_hours"] != nil { - model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) - } - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToLimitParams(modelMap map[string]interface{}) (*backuprecoveryv1.LimitParams, error) { - model := &backuprecoveryv1.LimitParams{} - if modelMap["from"] != nil { - model.From = core.Int64Ptr(int64(modelMap["from"].(int))) - } - model.Size = core.Int64Ptr(int64(modelMap["size"].(int))) - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewMapToAttributeSort(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeSort, error) { - model := &backuprecoveryv1.AttributeSort{} - model.Attribute = core.StringPtr(modelMap["attribute"].(string)) - if modelMap["desc"] != nil { - model.Desc = core.BoolPtr(modelMap["desc"].(bool)) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Aggs != nil { - aggsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model.Aggs) - if err != nil { - return modelMap, err - } - modelMap["aggs"] = []map[string]interface{}{aggsMap} - } - if model.Config != nil { - configMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model.Config) - if err != nil { - return modelMap, err - } - modelMap["config"] = []map[string]interface{}{configMap} - } - if model.Data != nil { - modelMap["data"] = model.Data - } - if model.Description != nil { - modelMap["description"] = *model.Description - } - if model.Filters != nil { - filters := []map[string]interface{}{} - for _, filtersItem := range model.Filters { - filtersItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 - if err != nil { - return modelMap, err - } - filters = append(filters, filtersItemMap) - } - modelMap["filters"] = filters - } - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.Limit != nil { - limitMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model.Limit) - if err != nil { - return modelMap, err - } - modelMap["limit"] = []map[string]interface{}{limitMap} - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.ReportType != nil { - modelMap["report_type"] = *model.ReportType - } - if model.Sort != nil { - sort := []map[string]interface{}{} - for _, sortItem := range model.Sort { - sortItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(&sortItem) // #nosec G601 - if err != nil { - return modelMap, err - } - sort = append(sort, sortItemMap) - } - modelMap["sort"] = sort - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AggregatedAttributes != nil { - aggregatedAttributes := []map[string]interface{}{} - for _, aggregatedAttributesItem := range model.AggregatedAttributes { - aggregatedAttributesItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 - if err != nil { - return modelMap, err - } - aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) - } - modelMap["aggregated_attributes"] = aggregatedAttributes - } - if model.GroupedAttributes != nil { - modelMap["grouped_attributes"] = model.GroupedAttributes - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["aggregation_type"] = *model.AggregationType - modelMap["attribute"] = *model.Attribute - if model.Label != nil { - modelMap["label"] = *model.Label - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.XlsxParams != nil { - xlsxParamsMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) - if err != nil { - return modelMap, err - } - modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AttributeConfig != nil { - attributeConfig := []map[string]interface{}{} - for _, attributeConfigItem := range model.AttributeConfig { - attributeConfigItemMap, err := ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 - if err != nil { - return modelMap, err - } - attributeConfig = append(attributeConfig, attributeConfigItemMap) - } - modelMap["attribute_config"] = attributeConfig - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_name"] = *model.AttributeName - if model.CustomLabel != nil { - modelMap["custom_label"] = *model.CustomLabel - } - if model.Format != nil { - modelMap["format"] = *model.Format - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.From != nil { - modelMap["from"] = flex.IntValue(model.From) - } - modelMap["size"] = flex.IntValue(model.Size) - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - if model.Desc != nil { - modelMap["desc"] = *model.Desc - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go deleted file mode 100644 index 90068be409..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_preview_test.go +++ /dev/null @@ -1,514 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetComponentPreviewDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetComponentPreviewDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component_preview.backup_recovery_manager_get_component_preview_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component_preview.backup_recovery_manager_get_component_preview_instance", "backup_recovery_manager_get_component_preview_id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetComponentPreviewDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_component_preview" "backup_recovery_manager_get_component_preview_instance" { - id = "id" - filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] - sort = [ { attribute="attribute", desc=true } ] - timezone = "timezone" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - attributeAggregationsModel := make(map[string]interface{}) - attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - attributeAggregationsModel["grouped_attributes"] = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := make(map[string]interface{}) - customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - attributeFilterModel := make(map[string]interface{}) - attributeFilterModel["attribute"] = "testString" - attributeFilterModel["filter_type"] = "In" - attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - limitParamsModel := make(map[string]interface{}) - limitParamsModel["from"] = int(38) - limitParamsModel["size"] = int(1) - - attributeSortModel := make(map[string]interface{}) - attributeSortModel["attribute"] = "testString" - attributeSortModel["desc"] = true - - model := make(map[string]interface{}) - model["aggs"] = []map[string]interface{}{attributeAggregationsModel} - model["config"] = []map[string]interface{}{customConfigParamsModel} - model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model["description"] = "testString" - model["filters"] = []map[string]interface{}{attributeFilterModel} - model["id"] = "testString" - model["limit"] = []map[string]interface{}{limitParamsModel} - model["name"] = "testString" - model["report_type"] = "Failures" - model["sort"] = []map[string]interface{}{attributeSortModel} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) - attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - attributeAggregationsModel.GroupedAttributes = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) - customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - attributeFilterModel := new(backuprecoveryv1.AttributeFilter) - attributeFilterModel.Attribute = core.StringPtr("testString") - attributeFilterModel.FilterType = core.StringPtr("In") - attributeFilterModel.InFilterParams = inFilterParamsModel - attributeFilterModel.RangeFilterParams = rangeFilterParamsModel - attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel - attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel - - limitParamsModel := new(backuprecoveryv1.LimitParams) - limitParamsModel.From = core.Int64Ptr(int64(38)) - limitParamsModel.Size = core.Int64Ptr(int64(1)) - - attributeSortModel := new(backuprecoveryv1.AttributeSort) - attributeSortModel.Attribute = core.StringPtr("testString") - attributeSortModel.Desc = core.BoolPtr(true) - - model := new(backuprecoveryv1.Component) - model.Aggs = attributeAggregationsModel - model.Config = customConfigParamsModel - model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model.Description = core.StringPtr("testString") - model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} - model.ID = core.StringPtr("testString") - model.Limit = limitParamsModel - model.Name = core.StringPtr("testString") - model.ReportType = core.StringPtr("Failures") - model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewComponentToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - model := make(map[string]interface{}) - model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - model["grouped_attributes"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - model := new(backuprecoveryv1.AttributeAggregations) - model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - model.GroupedAttributes = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeAggregationsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["aggregation_type"] = "sum" - model["attribute"] = "testString" - model["label"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AggregatedAttributesParams) - model.AggregationType = core.StringPtr("sum") - model.Attribute = core.StringPtr("testString") - model.Label = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAggregatedAttributesParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - model := make(map[string]interface{}) - model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - model := new(backuprecoveryv1.CustomConfigParams) - model.XlsxParams = xlsxCustomConfigParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - model := make(map[string]interface{}) - model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - model := new(backuprecoveryv1.XlsxCustomConfigParams) - model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_name"] = "testString" - model["custom_label"] = "testString" - model["format"] = "Timestamp" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - model.AttributeName = core.StringPtr("testString") - model.CustomLabel = core.StringPtr("testString") - model.Format = core.StringPtr("Timestamp") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewXlsxAttributeCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["filter_type"] = "In" - model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - assert.Equal(t, result, model) - } - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - model := new(backuprecoveryv1.AttributeFilter) - model.Attribute = core.StringPtr("testString") - model.FilterType = core.StringPtr("In") - model.InFilterParams = inFilterParamsModel - model.RangeFilterParams = rangeFilterParamsModel - model.SystemsFilterParams = systemsFilterParamsModel - model.TimeRangeFilterParams = timeRangeFilterParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeFilterToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_data_type"] = "Bool" - model["attribute_labels"] = []string{"testString"} - model["bool_filter_values"] = []bool{true} - model["int32_filter_values"] = []int64{int64(38)} - model["int64_filter_values"] = []int64{int64(26)} - model["string_filter_values"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.InFilterParams) - model.AttributeDataType = core.StringPtr("Bool") - model.AttributeLabels = []string{"testString"} - model.BoolFilterValues = []bool{true} - model.Int32FilterValues = []int64{int64(38)} - model.Int64FilterValues = []int64{int64(26)} - model.StringFilterValues = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewInFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.RangeFilterParams) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["system_ids"] = []string{"testString"} - model["system_names"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.SystemsFilterParams) - model.SystemIds = []string{"testString"} - model.SystemNames = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewSystemsFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["date_range"] = "Last1Hour" - model["duration_hours"] = int(26) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.TimeRangeFilterParams) - model.DateRange = core.StringPtr("Last1Hour") - model.DurationHours = core.Int64Ptr(int64(26)) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewTimeRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["from"] = int(38) - model["size"] = int(1) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.LimitParams) - model.From = core.Int64Ptr(int64(38)) - model.Size = core.Int64Ptr(int64(1)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewLimitParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["desc"] = true - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AttributeSort) - model.Attribute = core.StringPtr("testString") - model.Desc = core.BoolPtr(true) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentPreviewAttributeSortToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go deleted file mode 100644 index 6437f043be..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_component_test.go +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetComponentDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetComponentDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component.backup_recovery_manager_get_component_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_component.backup_recovery_manager_get_component_instance", "backup_recovery_manager_get_component_id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetComponentDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_component" "backup_recovery_manager_get_component_instance" { - id = "id" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - model := make(map[string]interface{}) - model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - model["grouped_attributes"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - model := new(backuprecoveryv1.AttributeAggregations) - model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - model.GroupedAttributes = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeAggregationsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["aggregation_type"] = "sum" - model["attribute"] = "testString" - model["label"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AggregatedAttributesParams) - model.AggregationType = core.StringPtr("sum") - model.Attribute = core.StringPtr("testString") - model.Label = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAggregatedAttributesParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - model := make(map[string]interface{}) - model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - model := new(backuprecoveryv1.CustomConfigParams) - model.XlsxParams = xlsxCustomConfigParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - model := make(map[string]interface{}) - model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - model := new(backuprecoveryv1.XlsxCustomConfigParams) - model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentXlsxCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_name"] = "testString" - model["custom_label"] = "testString" - model["format"] = "Timestamp" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - model.AttributeName = core.StringPtr("testString") - model.CustomLabel = core.StringPtr("testString") - model.Format = core.StringPtr("Timestamp") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentXlsxAttributeCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["filter_type"] = "In" - model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - assert.Equal(t, result, model) - } - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - model := new(backuprecoveryv1.AttributeFilter) - model.Attribute = core.StringPtr("testString") - model.FilterType = core.StringPtr("In") - model.InFilterParams = inFilterParamsModel - model.RangeFilterParams = rangeFilterParamsModel - model.SystemsFilterParams = systemsFilterParamsModel - model.TimeRangeFilterParams = timeRangeFilterParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeFilterToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_data_type"] = "Bool" - model["attribute_labels"] = []string{"testString"} - model["bool_filter_values"] = []bool{true} - model["int32_filter_values"] = []int64{int64(38)} - model["int64_filter_values"] = []int64{int64(26)} - model["string_filter_values"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.InFilterParams) - model.AttributeDataType = core.StringPtr("Bool") - model.AttributeLabels = []string{"testString"} - model.BoolFilterValues = []bool{true} - model.Int32FilterValues = []int64{int64(38)} - model.Int64FilterValues = []int64{int64(26)} - model.StringFilterValues = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentInFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.RangeFilterParams) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["system_ids"] = []string{"testString"} - model["system_names"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.SystemsFilterParams) - model.SystemIds = []string{"testString"} - model.SystemNames = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentSystemsFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["date_range"] = "Last1Hour" - model["duration_hours"] = int(26) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.TimeRangeFilterParams) - model.DateRange = core.StringPtr("Last1Hour") - model.DurationHours = core.Int64Ptr(int64(26)) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentTimeRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["from"] = int(38) - model["size"] = int(1) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.LimitParams) - model.From = core.Int64Ptr(int64(38)) - model.Size = core.Int64Ptr(int64(1)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentLimitParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["desc"] = true - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AttributeSort) - model.Attribute = core.StringPtr("testString") - model.Desc = core.BoolPtr(true) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentAttributeSortToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go deleted file mode 100644 index fa613cf514..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components.go +++ /dev/null @@ -1,637 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetComponents() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetComponentsRead, - - Schema: map[string]*schema.Schema{ - "ids": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies the ids of the report component to fetch.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "components": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of components.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggs": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the aggregation related information that needs to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregated_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of aggregation properties to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregation_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the aggregation type.", - }, - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute name.", - }, - "label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", - }, - }, - }, - }, - "grouped_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of attributes to be grouped in the aggregation.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "xlsx_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize a component in excel report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "custom_label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", - }, - "format": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - "data": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the data returned after evaluating the component.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Component.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Component.", - }, - "limit": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the parameters to limit the resulting dataset.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "from": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", - }, - "size": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the number of objects to be returned from the offset specified.", - }, - }, - }, - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Component.", - }, - "report_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the report type on top of which this Component is created from.", - }, - "sort": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "desc": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether the sorting order should be descending. Default value is false.", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetComponentsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosReportingServiceApIsClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_components", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getComponentsOptions := &backuprecoveryv1.GetComponentsOptions{} - - if _, ok := d.GetOk("ids"); ok { - var ids []string - for _, v := range d.Get("ids").([]interface{}) { - idsItem := v.(string) - ids = append(ids, idsItem) - } - getComponentsOptions.SetIds(ids) - } - - components, _, err := heliosReportingServiceApIsClient.GetComponentsWithContext(context, getComponentsOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetComponentsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_components", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerGetComponentsID(d)) - - if !core.IsNil(components.Components) { - componentItems := []map[string]interface{}{} - for _, componentsItem := range components.Components { - componentsItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(&componentsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_components", "read", "components-to-map").GetDiag() - } - componentItems = append(componentItems, componentsItemMap) - } - if err = d.Set("components", componentItems); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting components: %s", err), "(Data) ibm_backup_recovery_manager_get_components", "read", "set-components").GetDiag() - } - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerGetComponentsID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerGetComponentsID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Aggs != nil { - aggsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model.Aggs) - if err != nil { - return modelMap, err - } - modelMap["aggs"] = []map[string]interface{}{aggsMap} - } - if model.Config != nil { - configMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model.Config) - if err != nil { - return modelMap, err - } - modelMap["config"] = []map[string]interface{}{configMap} - } - if model.Data != nil { - modelMap["data"] = model.Data - } - if model.Description != nil { - modelMap["description"] = *model.Description - } - if model.Filters != nil { - filters := []map[string]interface{}{} - for _, filtersItem := range model.Filters { - filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(&filtersItem) // #nosec G601 - if err != nil { - return modelMap, err - } - filters = append(filters, filtersItemMap) - } - modelMap["filters"] = filters - } - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.Limit != nil { - limitMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model.Limit) - if err != nil { - return modelMap, err - } - modelMap["limit"] = []map[string]interface{}{limitMap} - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.ReportType != nil { - modelMap["report_type"] = *model.ReportType - } - if model.Sort != nil { - sort := []map[string]interface{}{} - for _, sortItem := range model.Sort { - sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(&sortItem) // #nosec G601 - if err != nil { - return modelMap, err - } - sort = append(sort, sortItemMap) - } - modelMap["sort"] = sort - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AggregatedAttributes != nil { - aggregatedAttributes := []map[string]interface{}{} - for _, aggregatedAttributesItem := range model.AggregatedAttributes { - aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 - if err != nil { - return modelMap, err - } - aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) - } - modelMap["aggregated_attributes"] = aggregatedAttributes - } - if model.GroupedAttributes != nil { - modelMap["grouped_attributes"] = model.GroupedAttributes - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["aggregation_type"] = *model.AggregationType - modelMap["attribute"] = *model.Attribute - if model.Label != nil { - modelMap["label"] = *model.Label - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.XlsxParams != nil { - xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model.XlsxParams) - if err != nil { - return modelMap, err - } - modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AttributeConfig != nil { - attributeConfig := []map[string]interface{}{} - for _, attributeConfigItem := range model.AttributeConfig { - attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 - if err != nil { - return modelMap, err - } - attributeConfig = append(attributeConfig, attributeConfigItemMap) - } - modelMap["attribute_config"] = attributeConfig - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_name"] = *model.AttributeName - if model.CustomLabel != nil { - modelMap["custom_label"] = *model.CustomLabel - } - if model.Format != nil { - modelMap["format"] = *model.Format - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.From != nil { - modelMap["from"] = flex.IntValue(model.From) - } - modelMap["size"] = flex.IntValue(model.Size) - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - if model.Desc != nil { - modelMap["desc"] = *model.Desc - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go deleted file mode 100644 index 772fa9ff43..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_components_test.go +++ /dev/null @@ -1,510 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetComponentsDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetComponentsDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_components.backup_recovery_manager_get_components_instance", "id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetComponentsDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_components" "backup_recovery_manager_get_components_instance" { - ids = [ "ids" ] - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - attributeAggregationsModel := make(map[string]interface{}) - attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - attributeAggregationsModel["grouped_attributes"] = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := make(map[string]interface{}) - customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - attributeFilterModel := make(map[string]interface{}) - attributeFilterModel["attribute"] = "testString" - attributeFilterModel["filter_type"] = "In" - attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - limitParamsModel := make(map[string]interface{}) - limitParamsModel["from"] = int(38) - limitParamsModel["size"] = int(1) - - attributeSortModel := make(map[string]interface{}) - attributeSortModel["attribute"] = "testString" - attributeSortModel["desc"] = true - - model := make(map[string]interface{}) - model["aggs"] = []map[string]interface{}{attributeAggregationsModel} - model["config"] = []map[string]interface{}{customConfigParamsModel} - model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model["description"] = "testString" - model["filters"] = []map[string]interface{}{attributeFilterModel} - model["id"] = "testString" - model["limit"] = []map[string]interface{}{limitParamsModel} - model["name"] = "testString" - model["report_type"] = "Failures" - model["sort"] = []map[string]interface{}{attributeSortModel} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) - attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - attributeAggregationsModel.GroupedAttributes = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) - customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - attributeFilterModel := new(backuprecoveryv1.AttributeFilter) - attributeFilterModel.Attribute = core.StringPtr("testString") - attributeFilterModel.FilterType = core.StringPtr("In") - attributeFilterModel.InFilterParams = inFilterParamsModel - attributeFilterModel.RangeFilterParams = rangeFilterParamsModel - attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel - attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel - - limitParamsModel := new(backuprecoveryv1.LimitParams) - limitParamsModel.From = core.Int64Ptr(int64(38)) - limitParamsModel.Size = core.Int64Ptr(int64(1)) - - attributeSortModel := new(backuprecoveryv1.AttributeSort) - attributeSortModel.Attribute = core.StringPtr("testString") - attributeSortModel.Desc = core.BoolPtr(true) - - model := new(backuprecoveryv1.Component) - model.Aggs = attributeAggregationsModel - model.Config = customConfigParamsModel - model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model.Description = core.StringPtr("testString") - model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} - model.ID = core.StringPtr("testString") - model.Limit = limitParamsModel - model.Name = core.StringPtr("testString") - model.ReportType = core.StringPtr("Failures") - model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsComponentToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - model := make(map[string]interface{}) - model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - model["grouped_attributes"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - model := new(backuprecoveryv1.AttributeAggregations) - model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - model.GroupedAttributes = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeAggregationsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["aggregation_type"] = "sum" - model["attribute"] = "testString" - model["label"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AggregatedAttributesParams) - model.AggregationType = core.StringPtr("sum") - model.Attribute = core.StringPtr("testString") - model.Label = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAggregatedAttributesParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - model := make(map[string]interface{}) - model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - model := new(backuprecoveryv1.CustomConfigParams) - model.XlsxParams = xlsxCustomConfigParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - model := make(map[string]interface{}) - model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - model := new(backuprecoveryv1.XlsxCustomConfigParams) - model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsXlsxCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_name"] = "testString" - model["custom_label"] = "testString" - model["format"] = "Timestamp" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - model.AttributeName = core.StringPtr("testString") - model.CustomLabel = core.StringPtr("testString") - model.Format = core.StringPtr("Timestamp") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsXlsxAttributeCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["filter_type"] = "In" - model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - assert.Equal(t, result, model) - } - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - model := new(backuprecoveryv1.AttributeFilter) - model.Attribute = core.StringPtr("testString") - model.FilterType = core.StringPtr("In") - model.InFilterParams = inFilterParamsModel - model.RangeFilterParams = rangeFilterParamsModel - model.SystemsFilterParams = systemsFilterParamsModel - model.TimeRangeFilterParams = timeRangeFilterParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeFilterToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_data_type"] = "Bool" - model["attribute_labels"] = []string{"testString"} - model["bool_filter_values"] = []bool{true} - model["int32_filter_values"] = []int64{int64(38)} - model["int64_filter_values"] = []int64{int64(26)} - model["string_filter_values"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.InFilterParams) - model.AttributeDataType = core.StringPtr("Bool") - model.AttributeLabels = []string{"testString"} - model.BoolFilterValues = []bool{true} - model.Int32FilterValues = []int64{int64(38)} - model.Int64FilterValues = []int64{int64(26)} - model.StringFilterValues = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsInFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.RangeFilterParams) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["system_ids"] = []string{"testString"} - model["system_names"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.SystemsFilterParams) - model.SystemIds = []string{"testString"} - model.SystemNames = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsSystemsFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["date_range"] = "Last1Hour" - model["duration_hours"] = int(26) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.TimeRangeFilterParams) - model.DateRange = core.StringPtr("Last1Hour") - model.DurationHours = core.Int64Ptr(int64(26)) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsTimeRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["from"] = int(38) - model["size"] = int(1) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.LimitParams) - model.From = core.Int64Ptr(int64(38)) - model.Size = core.Int64Ptr(int64(1)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsLimitParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["desc"] = true - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AttributeSort) - model.Attribute = core.StringPtr("testString") - model.Desc = core.BoolPtr(true) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponentsAttributeSortToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go deleted file mode 100644 index 50cb725901..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery - -import ( - "context" - "fmt" - "log" - - "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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetReport() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetReportRead, - - Schema: map[string]*schema.Schema{ - "report_id": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the id of the report.", - }, - "category": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies categoty of the Report.", - }, - "component_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of component ids in the Report.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Report.", - }, - "supported_user_contexts": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies all the supported user contexts for this report.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "title": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the title of the report.", - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetReportRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getReportByIdOptions := &backuprecoveryv1.GetReportByIdOptions{} - - getReportByIdOptions.SetID(d.Get("report_id").(string)) - - report, _, err := backupRecoveryClient.GetReportByIDWithContext(context, getReportByIdOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportByIDWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(*report.ID) - - if !core.IsNil(report.Category) { - if err = d.Set("category", report.Category); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting category: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-category").GetDiag() - } - } - - if !core.IsNil(report.ComponentIds) { - componentIds := []interface{}{} - for _, componentIdsItem := range report.ComponentIds { - componentIds = append(componentIds, componentIdsItem) - } - if err = d.Set("component_ids", componentIds); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting component_ids: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-component_ids").GetDiag() - } - } - - if !core.IsNil(report.Description) { - if err = d.Set("description", report.Description); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-description").GetDiag() - } - } - - if !core.IsNil(report.SupportedUserContexts) { - supportedUserContexts := []interface{}{} - for _, supportedUserContextsItem := range report.SupportedUserContexts { - supportedUserContexts = append(supportedUserContexts, supportedUserContextsItem) - } - if err = d.Set("supported_user_contexts", supportedUserContexts); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting supported_user_contexts: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-supported_user_contexts").GetDiag() - } - } - - if !core.IsNil(report.Title) { - if err = d.Set("title", report.Title); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting title: %s", err), "(Data) ibm_backup_recovery_manager_get_report", "read", "set-title").GetDiag() - } - } - - return nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go deleted file mode 100644 index ff55e38eae..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview.go +++ /dev/null @@ -1,1050 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -import ( - "context" - "fmt" - "log" - - "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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetReportPreview() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetReportPreviewRead, - - Schema: map[string]*schema.Schema{ - "report_id": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the id of the report.", - }, - "component_ids": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies list of components ids to be evaluated for the given report. If not specified, then all the components are evaluated.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies list of global filters that are applicable to given components in the report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "timezone": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", - }, - "components": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the component params and data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggs": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the aggregation related information that needs to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregated_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of aggregation properties to be applied on the attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "aggregation_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the aggregation type.", - }, - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute name.", - }, - "label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the label to be generated for this aggregated attribute. If not specified, then by default label of the column in the output will be combination of aggregation type and attribute.", - }, - }, - }, - }, - "grouped_attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of attributes to be grouped in the aggregation.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize and format the columns in the report artifacts like excel, pdf etc.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "xlsx_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the configuration parameters to customize a component in excel report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_config": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies customized configuration for the attributes in the report. If not specified, all the attributes will be sent as-is to the report without any formatting.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "custom_label": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom label for attribute to appear in the xlsx report. If not specified, default attribute name will be used.", - }, - "format": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies a custom format for attribute to appear in the xlsx report. If not specified, the attribute value is sent as-is.", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - "data": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the data returned after evaluating the component.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Component.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on specific report type attributes in order to compose this component.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Component.", - }, - "limit": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the parameters to limit the resulting dataset.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "from": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the offset to which resulting data will be skipped before applying the size parameter. For example if dataset size is 10 objects, from=2 and size=5, then from 10 objects only 5 objects are returned starting from offset 2 i.e., 2 to 7. If not specified, then none of the objects are skipped.", - }, - "size": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the number of objects to be returned from the offset specified.", - }, - }, - }, - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Component.", - }, - "report_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the report type on top of which this Component is created from.", - }, - "sort": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the sorting (ordering) parameters to be applied to the resulting data.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the attribute.", - }, - "desc": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether the sorting order should be descending. Default value is false.", - }, - }, - }, - }, - }, - }, - }, - "generated_timestamp_usecs": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the epoch timestamp in UTC in microseconds.", - }, - "last_refresh_timestamp_usecs": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the last refresh timestamp of data used to evaluate the component. If this parameter is not returned, then 'generatedTimestampUsecs' can be used for last refreshed timestamp of the data. This is epoch timestamp in UTC in microseconds.", - }, - "title": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the title of the report.", - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetReportPreviewRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getReportPreviewOptions := &backuprecoveryv1.GetReportPreviewOptions{} - - getReportPreviewOptions.SetID(d.Get("report_id").(string)) - if _, ok := d.GetOk("component_ids"); ok { - var componentIds []string - for _, v := range d.Get("component_ids").([]interface{}) { - componentIdsItem := v.(string) - componentIds = append(componentIds, componentIdsItem) - } - getReportPreviewOptions.SetComponentIds(componentIds) - } - if _, ok := d.GetOk("filters"); ok { - var filters []backuprecoveryv1.AttributeFilter - for _, v := range d.Get("filters").([]interface{}) { - value := v.(map[string]interface{}) - filtersItem, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToAttributeFilter(value) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_get_report_preview", "read", "parse-filters").GetDiag() - } - filters = append(filters, *filtersItem) - } - getReportPreviewOptions.SetFilters(filters) - } - if _, ok := d.GetOk("timezone"); ok { - getReportPreviewOptions.SetTimezone(d.Get("timezone").(string)) - } - - reportPreview, _, err := backupRecoveryClient.GetReportPreviewWithContext(context, getReportPreviewOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportPreviewWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report_preview", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(*reportPreview.ID) - - if !core.IsNil(reportPreview.Components) { - components := []map[string]interface{}{} - for _, componentsItem := range reportPreview.Components { - componentsItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(&componentsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "components-to-map").GetDiag() - } - components = append(components, componentsItemMap) - } - if err = d.Set("components", components); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting components: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-components").GetDiag() - } - } - - if !core.IsNil(reportPreview.GeneratedTimestampUsecs) { - if err = d.Set("generated_timestamp_usecs", flex.IntValue(reportPreview.GeneratedTimestampUsecs)); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting generated_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-generated_timestamp_usecs").GetDiag() - } - } - - if !core.IsNil(reportPreview.LastRefreshTimestampUsecs) { - if err = d.Set("last_refresh_timestamp_usecs", flex.IntValue(reportPreview.LastRefreshTimestampUsecs)); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting last_refresh_timestamp_usecs: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-last_refresh_timestamp_usecs").GetDiag() - } - } - - if !core.IsNil(reportPreview.Title) { - if err = d.Set("title", reportPreview.Title); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting title: %s", err), "(Data) ibm_backup_recovery_manager_get_report_preview", "read", "set-title").GetDiag() - } - } - - return nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(model *backuprecoveryv1.Component) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Aggs != nil { - aggsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model.Aggs) - if err != nil { - return modelMap, err - } - modelMap["aggs"] = []map[string]interface{}{aggsMap} - } - if model.Config != nil { - configMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model.Config) - if err != nil { - return modelMap, err - } - modelMap["config"] = []map[string]interface{}{configMap} - } - if model.Data != nil { - modelMap["data"] = model.Data - } - if model.Description != nil { - modelMap["description"] = *model.Description - } - if model.Filters != nil { - filters := []map[string]interface{}{} - for _, filtersItem := range model.Filters { - filtersItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(&filtersItem) // #nosec G601 - if err != nil { - return modelMap, err - } - filters = append(filters, filtersItemMap) - } - modelMap["filters"] = filters - } - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.Limit != nil { - limitMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model.Limit) - if err != nil { - return modelMap, err - } - modelMap["limit"] = []map[string]interface{}{limitMap} - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.ReportType != nil { - modelMap["report_type"] = *model.ReportType - } - if model.Sort != nil { - sort := []map[string]interface{}{} - for _, sortItem := range model.Sort { - sortItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(&sortItem) // #nosec G601 - if err != nil { - return modelMap, err - } - sort = append(sort, sortItemMap) - } - modelMap["sort"] = sort - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model *backuprecoveryv1.AttributeAggregations) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AggregatedAttributes != nil { - aggregatedAttributes := []map[string]interface{}{} - for _, aggregatedAttributesItem := range model.AggregatedAttributes { - aggregatedAttributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(&aggregatedAttributesItem) // #nosec G601 - if err != nil { - return modelMap, err - } - aggregatedAttributes = append(aggregatedAttributes, aggregatedAttributesItemMap) - } - modelMap["aggregated_attributes"] = aggregatedAttributes - } - if model.GroupedAttributes != nil { - modelMap["grouped_attributes"] = model.GroupedAttributes - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(model *backuprecoveryv1.AggregatedAttributesParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["aggregation_type"] = *model.AggregationType - modelMap["attribute"] = *model.Attribute - if model.Label != nil { - modelMap["label"] = *model.Label - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model *backuprecoveryv1.CustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.XlsxParams != nil { - xlsxParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model.XlsxParams) - if err != nil { - return modelMap, err - } - modelMap["xlsx_params"] = []map[string]interface{}{xlsxParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model *backuprecoveryv1.XlsxCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.AttributeConfig != nil { - attributeConfig := []map[string]interface{}{} - for _, attributeConfigItem := range model.AttributeConfig { - attributeConfigItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(&attributeConfigItem) // #nosec G601 - if err != nil { - return modelMap, err - } - attributeConfig = append(attributeConfig, attributeConfigItemMap) - } - modelMap["attribute_config"] = attributeConfig - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(model *backuprecoveryv1.XlsxAttributeCustomConfigParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_name"] = *model.AttributeName - if model.CustomLabel != nil { - modelMap["custom_label"] = *model.CustomLabel - } - if model.Format != nil { - modelMap["format"] = *model.Format - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model *backuprecoveryv1.LimitParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.From != nil { - modelMap["from"] = flex.IntValue(model.From) - } - modelMap["size"] = flex.IntValue(model.Size) - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(model *backuprecoveryv1.AttributeSort) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - if model.Desc != nil { - modelMap["desc"] = *model.Desc - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { - model := &backuprecoveryv1.AttributeFilter{} - model.Attribute = core.StringPtr(modelMap["attribute"].(string)) - model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) - if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { - InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.InFilterParams = InFilterParamsModel - } - if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { - RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.RangeFilterParams = RangeFilterParamsModel - } - if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { - SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.SystemsFilterParams = SystemsFilterParamsModel - } - if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { - TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerGetReportPreviewMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.TimeRangeFilterParams = TimeRangeFilterParamsModel - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { - model := &backuprecoveryv1.InFilterParams{} - model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) - if modelMap["attribute_labels"] != nil { - attributeLabels := []string{} - for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { - attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) - } - model.AttributeLabels = attributeLabels - } - if modelMap["bool_filter_values"] != nil { - boolFilterValues := []bool{} - for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { - boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) - } - model.BoolFilterValues = boolFilterValues - } - if modelMap["int32_filter_values"] != nil { - int32FilterValues := []int64{} - for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { - int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) - } - model.Int32FilterValues = int32FilterValues - } - if modelMap["int64_filter_values"] != nil { - int64FilterValues := []int64{} - for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { - int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) - } - model.Int64FilterValues = int64FilterValues - } - if modelMap["string_filter_values"] != nil { - stringFilterValues := []string{} - for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { - stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) - } - model.StringFilterValues = stringFilterValues - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { - model := &backuprecoveryv1.RangeFilterParams{} - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { - model := &backuprecoveryv1.SystemsFilterParams{} - systemIds := []string{} - for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { - systemIds = append(systemIds, systemIdsItem.(string)) - } - model.SystemIds = systemIds - if modelMap["system_names"] != nil { - systemNames := []string{} - for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { - systemNames = append(systemNames, systemNamesItem.(string)) - } - model.SystemNames = systemNames - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { - model := &backuprecoveryv1.TimeRangeFilterParams{} - if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { - model.DateRange = core.StringPtr(modelMap["date_range"].(string)) - } - if modelMap["duration_hours"] != nil { - model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) - } - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go deleted file mode 100644 index ce6feacb8f..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_preview_test.go +++ /dev/null @@ -1,514 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetReportPreviewDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetReportPreviewDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_preview.backup_recovery_manager_get_report_preview_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_preview.backup_recovery_manager_get_report_preview_instance", "backup_recovery_manager_get_report_preview_id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetReportPreviewDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_report_preview" "backup_recovery_manager_get_report_preview_instance" { - id = "id" - componentIds = [ "componentIds" ] - filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] - timezone = "timezone" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - attributeAggregationsModel := make(map[string]interface{}) - attributeAggregationsModel["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - attributeAggregationsModel["grouped_attributes"] = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := make(map[string]interface{}) - customConfigParamsModel["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - attributeFilterModel := make(map[string]interface{}) - attributeFilterModel["attribute"] = "testString" - attributeFilterModel["filter_type"] = "In" - attributeFilterModel["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - attributeFilterModel["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - attributeFilterModel["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - attributeFilterModel["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - limitParamsModel := make(map[string]interface{}) - limitParamsModel["from"] = int(38) - limitParamsModel["size"] = int(1) - - attributeSortModel := make(map[string]interface{}) - attributeSortModel["attribute"] = "testString" - attributeSortModel["desc"] = true - - model := make(map[string]interface{}) - model["aggs"] = []map[string]interface{}{attributeAggregationsModel} - model["config"] = []map[string]interface{}{customConfigParamsModel} - model["data"] = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model["description"] = "testString" - model["filters"] = []map[string]interface{}{attributeFilterModel} - model["id"] = "testString" - model["limit"] = []map[string]interface{}{limitParamsModel} - model["name"] = "testString" - model["report_type"] = "Failures" - model["sort"] = []map[string]interface{}{attributeSortModel} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - attributeAggregationsModel := new(backuprecoveryv1.AttributeAggregations) - attributeAggregationsModel.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - attributeAggregationsModel.GroupedAttributes = []string{"testString"} - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - customConfigParamsModel := new(backuprecoveryv1.CustomConfigParams) - customConfigParamsModel.XlsxParams = xlsxCustomConfigParamsModel - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - attributeFilterModel := new(backuprecoveryv1.AttributeFilter) - attributeFilterModel.Attribute = core.StringPtr("testString") - attributeFilterModel.FilterType = core.StringPtr("In") - attributeFilterModel.InFilterParams = inFilterParamsModel - attributeFilterModel.RangeFilterParams = rangeFilterParamsModel - attributeFilterModel.SystemsFilterParams = systemsFilterParamsModel - attributeFilterModel.TimeRangeFilterParams = timeRangeFilterParamsModel - - limitParamsModel := new(backuprecoveryv1.LimitParams) - limitParamsModel.From = core.Int64Ptr(int64(38)) - limitParamsModel.Size = core.Int64Ptr(int64(1)) - - attributeSortModel := new(backuprecoveryv1.AttributeSort) - attributeSortModel.Attribute = core.StringPtr("testString") - attributeSortModel.Desc = core.BoolPtr(true) - - model := new(backuprecoveryv1.Component) - model.Aggs = attributeAggregationsModel - model.Config = customConfigParamsModel - model.Data = []map[string]interface{}{map[string]interface{}{"anyKey": "anyValue"}} - model.Description = core.StringPtr("testString") - model.Filters = []backuprecoveryv1.AttributeFilter{*attributeFilterModel} - model.ID = core.StringPtr("testString") - model.Limit = limitParamsModel - model.Name = core.StringPtr("testString") - model.ReportType = core.StringPtr("Failures") - model.Sort = []backuprecoveryv1.AttributeSort{*attributeSortModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewComponentToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - aggregatedAttributesParamsModel := make(map[string]interface{}) - aggregatedAttributesParamsModel["aggregation_type"] = "sum" - aggregatedAttributesParamsModel["attribute"] = "testString" - aggregatedAttributesParamsModel["label"] = "testString" - - model := make(map[string]interface{}) - model["aggregated_attributes"] = []map[string]interface{}{aggregatedAttributesParamsModel} - model["grouped_attributes"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - aggregatedAttributesParamsModel := new(backuprecoveryv1.AggregatedAttributesParams) - aggregatedAttributesParamsModel.AggregationType = core.StringPtr("sum") - aggregatedAttributesParamsModel.Attribute = core.StringPtr("testString") - aggregatedAttributesParamsModel.Label = core.StringPtr("testString") - - model := new(backuprecoveryv1.AttributeAggregations) - model.AggregatedAttributes = []backuprecoveryv1.AggregatedAttributesParams{*aggregatedAttributesParamsModel} - model.GroupedAttributes = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeAggregationsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["aggregation_type"] = "sum" - model["attribute"] = "testString" - model["label"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AggregatedAttributesParams) - model.AggregationType = core.StringPtr("sum") - model.Attribute = core.StringPtr("testString") - model.Label = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAggregatedAttributesParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - xlsxCustomConfigParamsModel := make(map[string]interface{}) - xlsxCustomConfigParamsModel["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - model := make(map[string]interface{}) - model["xlsx_params"] = []map[string]interface{}{xlsxCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - xlsxCustomConfigParamsModel := new(backuprecoveryv1.XlsxCustomConfigParams) - xlsxCustomConfigParamsModel.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - model := new(backuprecoveryv1.CustomConfigParams) - model.XlsxParams = xlsxCustomConfigParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - xlsxAttributeCustomConfigParamsModel := make(map[string]interface{}) - xlsxAttributeCustomConfigParamsModel["attribute_name"] = "testString" - xlsxAttributeCustomConfigParamsModel["custom_label"] = "testString" - xlsxAttributeCustomConfigParamsModel["format"] = "Timestamp" - - model := make(map[string]interface{}) - model["attribute_config"] = []map[string]interface{}{xlsxAttributeCustomConfigParamsModel} - - assert.Equal(t, result, model) - } - - xlsxAttributeCustomConfigParamsModel := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - xlsxAttributeCustomConfigParamsModel.AttributeName = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.CustomLabel = core.StringPtr("testString") - xlsxAttributeCustomConfigParamsModel.Format = core.StringPtr("Timestamp") - - model := new(backuprecoveryv1.XlsxCustomConfigParams) - model.AttributeConfig = []backuprecoveryv1.XlsxAttributeCustomConfigParams{*xlsxAttributeCustomConfigParamsModel} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_name"] = "testString" - model["custom_label"] = "testString" - model["format"] = "Timestamp" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.XlsxAttributeCustomConfigParams) - model.AttributeName = core.StringPtr("testString") - model.CustomLabel = core.StringPtr("testString") - model.Format = core.StringPtr("Timestamp") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewXlsxAttributeCustomConfigParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - inFilterParamsModel := make(map[string]interface{}) - inFilterParamsModel["attribute_data_type"] = "Bool" - inFilterParamsModel["attribute_labels"] = []string{"testString"} - inFilterParamsModel["bool_filter_values"] = []bool{true} - inFilterParamsModel["int32_filter_values"] = []int64{int64(38)} - inFilterParamsModel["int64_filter_values"] = []int64{int64(26)} - inFilterParamsModel["string_filter_values"] = []string{"testString"} - - rangeFilterParamsModel := make(map[string]interface{}) - rangeFilterParamsModel["lower_bound"] = int(26) - rangeFilterParamsModel["upper_bound"] = int(26) - - systemsFilterParamsModel := make(map[string]interface{}) - systemsFilterParamsModel["system_ids"] = []string{"testString"} - systemsFilterParamsModel["system_names"] = []string{"testString"} - - timeRangeFilterParamsModel := make(map[string]interface{}) - timeRangeFilterParamsModel["date_range"] = "Last1Hour" - timeRangeFilterParamsModel["duration_hours"] = int(26) - timeRangeFilterParamsModel["lower_bound"] = int(26) - timeRangeFilterParamsModel["upper_bound"] = int(26) - - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["filter_type"] = "In" - model["in_filter_params"] = []map[string]interface{}{inFilterParamsModel} - model["range_filter_params"] = []map[string]interface{}{rangeFilterParamsModel} - model["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsModel} - model["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsModel} - - assert.Equal(t, result, model) - } - - inFilterParamsModel := new(backuprecoveryv1.InFilterParams) - inFilterParamsModel.AttributeDataType = core.StringPtr("Bool") - inFilterParamsModel.AttributeLabels = []string{"testString"} - inFilterParamsModel.BoolFilterValues = []bool{true} - inFilterParamsModel.Int32FilterValues = []int64{int64(38)} - inFilterParamsModel.Int64FilterValues = []int64{int64(26)} - inFilterParamsModel.StringFilterValues = []string{"testString"} - - rangeFilterParamsModel := new(backuprecoveryv1.RangeFilterParams) - rangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - rangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - systemsFilterParamsModel := new(backuprecoveryv1.SystemsFilterParams) - systemsFilterParamsModel.SystemIds = []string{"testString"} - systemsFilterParamsModel.SystemNames = []string{"testString"} - - timeRangeFilterParamsModel := new(backuprecoveryv1.TimeRangeFilterParams) - timeRangeFilterParamsModel.DateRange = core.StringPtr("Last1Hour") - timeRangeFilterParamsModel.DurationHours = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.LowerBound = core.Int64Ptr(int64(26)) - timeRangeFilterParamsModel.UpperBound = core.Int64Ptr(int64(26)) - - model := new(backuprecoveryv1.AttributeFilter) - model.Attribute = core.StringPtr("testString") - model.FilterType = core.StringPtr("In") - model.InFilterParams = inFilterParamsModel - model.RangeFilterParams = rangeFilterParamsModel - model.SystemsFilterParams = systemsFilterParamsModel - model.TimeRangeFilterParams = timeRangeFilterParamsModel - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeFilterToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute_data_type"] = "Bool" - model["attribute_labels"] = []string{"testString"} - model["bool_filter_values"] = []bool{true} - model["int32_filter_values"] = []int64{int64(38)} - model["int64_filter_values"] = []int64{int64(26)} - model["string_filter_values"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.InFilterParams) - model.AttributeDataType = core.StringPtr("Bool") - model.AttributeLabels = []string{"testString"} - model.BoolFilterValues = []bool{true} - model.Int32FilterValues = []int64{int64(38)} - model.Int64FilterValues = []int64{int64(26)} - model.StringFilterValues = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewInFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.RangeFilterParams) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["system_ids"] = []string{"testString"} - model["system_names"] = []string{"testString"} - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.SystemsFilterParams) - model.SystemIds = []string{"testString"} - model.SystemNames = []string{"testString"} - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewSystemsFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["date_range"] = "Last1Hour" - model["duration_hours"] = int(26) - model["lower_bound"] = int(26) - model["upper_bound"] = int(26) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.TimeRangeFilterParams) - model.DateRange = core.StringPtr("Last1Hour") - model.DurationHours = core.Int64Ptr(int64(26)) - model.LowerBound = core.Int64Ptr(int64(26)) - model.UpperBound = core.Int64Ptr(int64(26)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewTimeRangeFilterParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["from"] = int(38) - model["size"] = int(1) - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.LimitParams) - model.From = core.Int64Ptr(int64(38)) - model.Size = core.Int64Ptr(int64(1)) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewLimitParamsToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["attribute"] = "testString" - model["desc"] = true - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.AttributeSort) - model.Attribute = core.StringPtr("testString") - model.Desc = core.BoolPtr(true) - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreviewAttributeSortToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go deleted file mode 100644 index 467762677d..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_test.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" -) - -func TestAccIbmBackupRecoveryManagerGetReportDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetReportDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report.backup_recovery_manager_get_report_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report.backup_recovery_manager_get_report_instance", "backup_recovery_manager_get_report_id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetReportDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_report" "backup_recovery_manager_get_report_instance" { - id = "id" - } - `) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go deleted file mode 100644 index 8eb7d681d0..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery - -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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetReportType() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetReportTypeRead, - - Schema: map[string]*schema.Schema{ - "report_type": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the report type.", - }, - "attributes": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the attribute name.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute name.", - }, - }, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetReportTypeRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getReportTypeOptions := &backuprecoveryv1.GetReportTypeOptions{} - - getReportTypeOptions.SetReportType(d.Get("report_type").(string)) - - reportTypeAttributes, _, err := backupRecoveryClient.GetReportTypeWithContext(context, getReportTypeOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportTypeWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_report_type", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerGetReportTypeID(d)) - - if !core.IsNil(reportTypeAttributes.Attributes) { - attributes := []map[string]interface{}{} - for _, attributesItem := range reportTypeAttributes.Attributes { - attributesItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(&attributesItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "attributes-to-map").GetDiag() - } - attributes = append(attributes, attributesItemMap) - } - if err = d.Set("attributes", attributes); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting attributes: %s", err), "(Data) ibm_backup_recovery_manager_get_report_type", "read", "set-attributes").GetDiag() - } - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerGetReportTypeID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerGetReportTypeID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(model *backuprecoveryv1.ReportTypeAttribute) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DataType != nil { - modelMap["data_type"] = *model.DataType - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go deleted file mode 100644 index 47ce66a942..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_report_type_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetReportTypeDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetReportTypeDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_type.backup_recovery_manager_get_report_type_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_report_type.backup_recovery_manager_get_report_type_instance", "report_type"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetReportTypeDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_report_type" "backup_recovery_manager_get_report_type_instance" { - reportType = "Failures" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["data_type"] = "Bool" - model["name"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.ReportTypeAttribute) - model.DataType = core.StringPtr("Bool") - model.Name = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportTypeReportTypeAttributeToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go deleted file mode 100644 index cd444858d9..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery - -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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetReports() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetReportsRead, - - Schema: map[string]*schema.Schema{ - "ids": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies the ids of reports to fetch.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "user_context": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "Specifies the user context to filter reports.", - }, - "reports": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of reports.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "category": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies categoty of the Report.", - }, - "component_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of component ids in the Report.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "description": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies description of the Report.", - }, - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the report.", - }, - "supported_user_contexts": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies all the supported user contexts for this report.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "title": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the title of the report.", - }, - }, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetReportsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_reports", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getReportsOptions := &backuprecoveryv1.GetReportsOptions{} - - if _, ok := d.GetOk("ids"); ok { - var ids []string - for _, v := range d.Get("ids").([]interface{}) { - idsItem := v.(string) - ids = append(ids, idsItem) - } - getReportsOptions.SetIds(ids) - } - if _, ok := d.GetOk("user_context"); ok { - getReportsOptions.SetUserContext(d.Get("user_context").(string)) - } - - reports, _, err := backupRecoveryClient.GetReportsWithContext(context, getReportsOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetReportsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_reports", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerGetReportsID(d)) - - if !core.IsNil(reports.Reports) { - reportsMap := []map[string]interface{}{} - for _, reportsItem := range reports.Reports { - reportsItemMap, err := DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(&reportsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_reports", "read", "reports-to-map").GetDiag() - } - reportsMap = append(reportsMap, reportsItemMap) - } - if err = d.Set("reports", reportsMap); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting reports: %s", err), "(Data) ibm_backup_recovery_manager_get_reports", "read", "set-reports").GetDiag() - } - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerGetReportsID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerGetReportsID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(model *backuprecoveryv1.Report) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Category != nil { - modelMap["category"] = *model.Category - } - if model.ComponentIds != nil { - modelMap["component_ids"] = model.ComponentIds - } - if model.Description != nil { - modelMap["description"] = *model.Description - } - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.SupportedUserContexts != nil { - modelMap["supported_user_contexts"] = model.SupportedUserContexts - } - if model.Title != nil { - modelMap["title"] = *model.Title - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go deleted file mode 100644 index c448ca82fb..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_reports_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetReportsDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetReportsDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_reports.backup_recovery_manager_get_reports_instance", "id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetReportsDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_reports" "backup_recovery_manager_get_reports_instance" { - ids = [ "ids" ] - userContext = "IBMBaaS" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetReportsReportToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["category"] = "Protection" - model["component_ids"] = []string{"testString"} - model["description"] = "testString" - model["id"] = "testString" - model["supported_user_contexts"] = []string{"IBMBaaS"} - model["title"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.Report) - model.Category = core.StringPtr("Protection") - model.ComponentIds = []string{"testString"} - model.Description = core.StringPtr("testString") - model.ID = core.StringPtr("testString") - model.SupportedUserContexts = []string{"IBMBaaS"} - model.Title = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportsReportToMap(model) - assert.Nil(t, err) - checkResult(result) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go deleted file mode 100644 index 42299a557b..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources.go +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -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.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerGetResources() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerGetResourcesRead, - - Schema: map[string]*schema.Schema{ - "resource_type": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the type of the resource.", - }, - "external_targets": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of External Targets.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the External target.", - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the External target.", - }, - "system_id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the System.", - }, - "system_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the System.", - }, - "target_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the External target.", - }, - }, - }, - }, - "message_code_mappings": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of Message codes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "message_code": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the message code.", - }, - "message_guid": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the message GUID.", - }, - }, - }, - }, - "policies": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of Protection Groups.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Protection Policy.", - }, - "is_global_policy": &schema.Schema{ - Type: schema.TypeBool, - Computed: true, - Description: "Specifies whether this is a Global Policy.", - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Protection Policy.", - }, - "system_id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the System.", - }, - "system_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the System.", - }, - }, - }, - }, - "protection_groups": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of Protection Groups.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Protection Group.", - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Protection Group.", - }, - "system_id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the System.", - }, - "system_name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the System.", - }, - }, - }, - }, - "sources": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of Registered sources.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "environments": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of all environments discovered as part of this source.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the registered source.", - }, - "uuid": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the unique identifier of registered source.", - }, - }, - }, - }, - "tenants": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the list of Tenants.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the id of the Tenant.", - }, - "name": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the name of the Tenant.", - }, - }, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerGetResourcesRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - getResourcesOptions := &backuprecoveryv1.GetResourcesOptions{} - - getResourcesOptions.SetResourceType(d.Get("resource_type").(string)) - - resources, _, err := backupRecoveryClient.GetResourcesWithContext(context, getResourcesOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetResourcesWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_resources", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerGetResourcesID(d)) - - if !core.IsNil(resources.ExternalTargets) { - externalTargets := []map[string]interface{}{} - for _, externalTargetsItem := range resources.ExternalTargets { - externalTargetsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(&externalTargetsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "external_targets-to-map").GetDiag() - } - externalTargets = append(externalTargets, externalTargetsItemMap) - } - if err = d.Set("external_targets", externalTargets); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting external_targets: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-external_targets").GetDiag() - } - } - - if !core.IsNil(resources.MessageCodeMappings) { - messageCodeMappings := []map[string]interface{}{} - for _, messageCodeMappingsItem := range resources.MessageCodeMappings { - messageCodeMappingsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(&messageCodeMappingsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "message_code_mappings-to-map").GetDiag() - } - messageCodeMappings = append(messageCodeMappings, messageCodeMappingsItemMap) - } - if err = d.Set("message_code_mappings", messageCodeMappings); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting message_code_mappings: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-message_code_mappings").GetDiag() - } - } - - if !core.IsNil(resources.Policies) { - policies := []map[string]interface{}{} - for _, policiesItem := range resources.Policies { - policiesItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(&policiesItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "policies-to-map").GetDiag() - } - policies = append(policies, policiesItemMap) - } - if err = d.Set("policies", policies); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting policies: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-policies").GetDiag() - } - } - - if !core.IsNil(resources.ProtectionGroups) { - protectionGroups := []map[string]interface{}{} - for _, protectionGroupsItem := range resources.ProtectionGroups { - protectionGroupsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(&protectionGroupsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "protection_groups-to-map").GetDiag() - } - protectionGroups = append(protectionGroups, protectionGroupsItemMap) - } - if err = d.Set("protection_groups", protectionGroups); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting protection_groups: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-protection_groups").GetDiag() - } - } - - if !core.IsNil(resources.Sources) { - sources := []map[string]interface{}{} - for _, sourcesItem := range resources.Sources { - sourcesItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(&sourcesItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "sources-to-map").GetDiag() - } - sources = append(sources, sourcesItemMap) - } - if err = d.Set("sources", sources); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sources: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-sources").GetDiag() - } - } - - if !core.IsNil(resources.Tenants) { - tenants := []map[string]interface{}{} - for _, tenantsItem := range resources.Tenants { - tenantsItemMap, err := DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(&tenantsItem) // #nosec G601 - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_resources", "read", "tenants-to-map").GetDiag() - } - tenants = append(tenants, tenantsItemMap) - } - if err = d.Set("tenants", tenants); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting tenants: %s", err), "(Data) ibm_backup_recovery_manager_get_resources", "read", "set-tenants").GetDiag() - } - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerGetResourcesID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerGetResourcesID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(model *backuprecoveryv1.ExternalTarget) (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 - } - if model.SystemID != nil { - modelMap["system_id"] = *model.SystemID - } - if model.SystemName != nil { - modelMap["system_name"] = *model.SystemName - } - if model.TargetType != nil { - modelMap["target_type"] = *model.TargetType - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(model *backuprecoveryv1.MessageCodeMapping) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.MessageCode != nil { - modelMap["message_code"] = *model.MessageCode - } - if model.MessageGuid != nil { - modelMap["message_guid"] = *model.MessageGuid - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(model *backuprecoveryv1.Policy) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.IsGlobalPolicy != nil { - modelMap["is_global_policy"] = *model.IsGlobalPolicy - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.SystemID != nil { - modelMap["system_id"] = *model.SystemID - } - if model.SystemName != nil { - modelMap["system_name"] = *model.SystemName - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(model *backuprecoveryv1.ProtectionGroup) (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 - } - if model.SystemID != nil { - modelMap["system_id"] = *model.SystemID - } - if model.SystemName != nil { - modelMap["system_name"] = *model.SystemName - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(model *backuprecoveryv1.RegisteredSource) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Environments != nil { - modelMap["environments"] = model.Environments - } - if model.Name != nil { - modelMap["name"] = *model.Name - } - if model.UUID != nil { - modelMap["uuid"] = *model.UUID - } - return modelMap, nil -} - -func DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(model *backuprecoveryv1.Tenant) (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 -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go deleted file mode 100644 index b336b6e20e..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_resources_test.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" - "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/backuprecovery" - "github.com/IBM/go-sdk-core/v5/core" - "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" - "github.com/stretchr/testify/assert" -) - -func TestAccIbmBackupRecoveryManagerGetResourcesDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerGetResourcesDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_resources.backup_recovery_manager_get_resources_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_resources.backup_recovery_manager_get_resources_instance", "resource_type"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerGetResourcesDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_get_resources" "backup_recovery_manager_get_resources_instance" { - resourceType = "Policies" - } - `) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["id"] = "testString" - model["name"] = "testString" - model["system_id"] = "testString" - model["system_name"] = "testString" - model["target_type"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.ExternalTarget) - model.ID = core.StringPtr("testString") - model.Name = core.StringPtr("testString") - model.SystemID = core.StringPtr("testString") - model.SystemName = core.StringPtr("testString") - model.TargetType = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesExternalTargetToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["message_code"] = "testString" - model["message_guid"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.MessageCodeMapping) - model.MessageCode = core.StringPtr("testString") - model.MessageGuid = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesMessageCodeMappingToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["id"] = "testString" - model["is_global_policy"] = true - model["name"] = "testString" - model["system_id"] = "testString" - model["system_name"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.Policy) - model.ID = core.StringPtr("testString") - model.IsGlobalPolicy = core.BoolPtr(true) - model.Name = core.StringPtr("testString") - model.SystemID = core.StringPtr("testString") - model.SystemName = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesPolicyToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["id"] = "testString" - model["name"] = "testString" - model["system_id"] = "testString" - model["system_name"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.ProtectionGroup) - model.ID = core.StringPtr("testString") - model.Name = core.StringPtr("testString") - model.SystemID = core.StringPtr("testString") - model.SystemName = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesProtectionGroupToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["environments"] = []string{"testString"} - model["name"] = "testString" - model["uuid"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.RegisteredSource) - model.Environments = []string{"testString"} - model.Name = core.StringPtr("testString") - model.UUID = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesRegisteredSourceToMap(model) - assert.Nil(t, err) - checkResult(result) -} - -func TestDataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(t *testing.T) { - checkResult := func(result map[string]interface{}) { - model := make(map[string]interface{}) - model["id"] = "testString" - model["name"] = "testString" - - assert.Equal(t, result, model) - } - - model := new(backuprecoveryv1.Tenant) - model.ID = core.StringPtr("testString") - model.Name = core.StringPtr("testString") - - result, err := backuprecovery.DataSourceIbmBackupRecoveryManagerGetResourcesTenantToMap(model) - assert.Nil(t, err) - checkResult(result) -} From 914c4ad6213601f594ac3fd5b46dfc9a70cc8e18 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Fri, 31 Oct 2025 17:26:10 +0530 Subject: [PATCH 06/15] update code --- ibm/conns/config.go | 47 +- ibm/provider/provider.go | 75 ++- ...m_backup_recovery_manager_export_report.go | 502 ------------------ ...kup_recovery_manager_export_report_test.go | 46 -- ...ibm_backup_recovery_manager_get_alerts.go} | 46 +- ...recovery_manager_get_alerts_resolution.go} | 64 +-- ...ery_manager_get_alerts_resolution_test.go} | 12 +- ...ckup_recovery_manager_get_alerts_stats.go} | 78 +-- ...recovery_manager_get_alerts_stats_test.go} | 15 +- ...up_recovery_manager_get_alerts_summary.go} | 28 +- ...covery_manager_get_alerts_summary_test.go} | 10 +- ...ackup_recovery_manager_get_alerts_test.go} | 12 +- ...ckup_recovery_manager_get_cluster_info.go} | 50 +- ...recovery_manager_get_cluster_info_test.go} | 10 +- ...ecovery_manager_get_compatible_clusters.go | 126 +++++ ...y_manager_get_compatible_clusters_test.go} | 10 +- ...recovery_manager_get_management_alerts.go} | 78 +-- ..._manager_get_management_alerts_summary.go} | 42 +- ...ger_get_management_alerts_summary_test.go} | 10 +- ...ery_manager_get_management_alerts_test.go} | 12 +- ...ckup_recovery_manager_get_upgrades_info.go | 233 ++++++++ ...ecovery_manager_get_upgrades_info_test.go} | 10 +- ...ery_manager_sre_get_compatible_clusters.go | 66 --- ..._recovery_manager_sre_get_upgrades_info.go | 75 --- ...ecovery_manager_create_cluster_upgrades.go | 236 ++++++++ ...ry_manager_create_cluster_upgrades_test.go | 39 ++ 26 files changed, 925 insertions(+), 1007 deletions(-) delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_alerts.go => data_source_ibm_backup_recovery_manager_get_alerts.go} (91%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go => data_source_ibm_backup_recovery_manager_get_alerts_resolution.go} (70%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go => data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go} (55%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go => data_source_ibm_backup_recovery_manager_get_alerts_stats.go} (84%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go => data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go} (57%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go => data_source_ibm_backup_recovery_manager_get_alerts_summary.go} (82%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go => data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go} (64%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go => data_source_ibm_backup_recovery_manager_get_alerts_test.go} (70%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go => data_source_ibm_backup_recovery_manager_get_cluster_info.go} (86%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go => data_source_ibm_backup_recovery_manager_get_cluster_info_test.go} (59%) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go => data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go} (58%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go => data_source_ibm_backup_recovery_manager_get_management_alerts.go} (84%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go => data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go} (71%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go => data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go} (61%) rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go => data_source_ibm_backup_recovery_manager_get_management_alerts_test.go} (69%) create mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go rename ibm/service/backuprecovery/{data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go => data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go} (61%) delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go delete mode 100644 ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go diff --git a/ibm/conns/config.go b/ibm/conns/config.go index e2c4523a75..943e64b7e7 100644 --- a/ibm/conns/config.go +++ b/ibm/conns/config.go @@ -247,8 +247,7 @@ type ClientSession interface { ResourceControllerAPIV2() (controllerv2.ResourceControllerAPIV2, error) BackupRecoveryV1() (*backuprecoveryv1.BackupRecoveryV1, error) BackupRecoveryV1Connector() (*backuprecoveryv1.BackupRecoveryV1Connector, error) - BackupRecoveryManagerV1() (*backuprecoveryv1.HeliosReportingServiceApIsV1, error) - BackupRecoveryManagerSreV1() (*backuprecoveryv1.HeliosSreApiV2, error) + BackupRecoveryManagerV1() (*backuprecoveryv1.BackupRecoveryManagementSreApiV1, error) IBMCloudLogsRoutingV0() (*ibmcloudlogsroutingv0.IBMCloudLogsRoutingV0, error) SoftLayerSession() *slsession.Session IBMPISession() (*ibmpisession.IBMPISession, error) @@ -581,12 +580,9 @@ type clientSession struct { backupRecoveryConnectorClient *backuprecoveryv1.BackupRecoveryV1Connector backupRecoveryConnectorClientErr error - backupRecoveryManagerClient *backuprecoveryv1.HeliosReportingServiceApIsV1 + backupRecoveryManagerClient *backuprecoveryv1.BackupRecoveryManagementSreApiV1 backupRecoveryManagerClientErr error - backupRecoveryManagerSreClient *backuprecoveryv1.HeliosSreApiV2 - backupRecoveryManagerSreClientErr error - secretsManagerClient *secretsmanagerv2.SecretsManagerV2 secretsManagerClientErr error @@ -1184,14 +1180,10 @@ func (session clientSession) BackupRecoveryV1Connector() (*backuprecoveryv1.Back return session.backupRecoveryConnectorClient, session.backupRecoveryConnectorClientErr } -func (session clientSession) BackupRecoveryManagerV1() (*backuprecoveryv1.HeliosReportingServiceApIsV1, error) { +func (session clientSession) BackupRecoveryManagerV1() (*backuprecoveryv1.BackupRecoveryManagementSreApiV1, error) { return session.backupRecoveryManagerClient, session.backupRecoveryManagerClientErr } -func (session clientSession) BackupRecoveryManagerSreV1() (*backuprecoveryv1.HeliosSreApiV2, error) { - return session.backupRecoveryManagerSreClient, session.backupRecoveryManagerSreClientErr -} - // IBM Cloud Secrets Manager V2 Basic API func (session clientSession) SecretsManagerV2() (*secretsmanagerv2.SecretsManagerV2, error) { return session.secretsManagerClient, session.secretsManagerClientErr @@ -1391,7 +1383,7 @@ func (c *Config) ClientSession() (interface{}, error) { session.backupRecoveryClientErr = errEmptyBluemixCredentials session.backupRecoveryConnectorClientErr = errEmptyBluemixCredentials session.backupRecoveryManagerClientErr = errEmptyBluemixCredentials - session.backupRecoveryManagerSreClientErr = errEmptyBluemixCredentials + session.backupRecoveryManagerClientErr = errEmptyBluemixCredentials session.catalogManagementClientErr = errEmptyBluemixCredentials session.partnerCenterSellClientErr = errEmptyBluemixCredentials session.ibmpiConfigErr = errEmptyBluemixCredentials @@ -1659,7 +1651,6 @@ func (c *Config) ClientSession() (interface{}, error) { var backupRecoveryURL string var backupRecoveryConnectorURL string var backupRecoveryManagerURL string - var backupRecoveryManagerSreURL string if fileMap != nil && c.Visibility != "public-and-private" { backupRecoveryURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_ENDPOINT", c.Region, backupRecoveryURL) @@ -1709,15 +1700,18 @@ func (c *Config) ClientSession() (interface{}, error) { }) } - backupRecoveryManagerClientOptions := &backuprecoveryv1.HeliosReportingServiceApIsV1Options{ - Authenticator: authenticator, + var backupRecoveryManagerClientAuthenticator core.Authenticator + backupRecoveryManagerClientAuthenticator = &core.NoAuthAuthenticator{} + + backupRecoveryManagerClientOptions := &backuprecoveryv1.BackupRecoveryManagementSreApiV1Options{ + Authenticator: backupRecoveryManagerClientAuthenticator, URL: EnvFallBack([]string{"IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT"}, backupRecoveryManagerURL), } if backupRecoveryManagerClientOptions.URL == "" { session.backupRecoveryManagerClientErr = fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT not set in env or endpoints file") } // Construct the service client. - session.backupRecoveryManagerClient, err = backuprecoveryv1.NewHeliosReportingServiceApIsV1(backupRecoveryManagerClientOptions) + session.backupRecoveryManagerClient, err = backuprecoveryv1.NewBackupRecoveryManagementSreApiV1(backupRecoveryManagerClientOptions) if err != nil { session.backupRecoveryManagerClientErr = fmt.Errorf("Error occurred while configuring IBM Backup recovery API service: %q", err) } @@ -1730,27 +1724,6 @@ func (c *Config) ClientSession() (interface{}, error) { }) } - backupRecoveryManagerSreClientOptions := &backuprecoveryv1.HeliosSreApiV2Options{ - Authenticator: authenticator, - URL: EnvFallBack([]string{"IBMCLOUD_BACKUP_RECOVERY_MANAGER_SRE_ENDPOINT"}, backupRecoveryManagerSreURL), - } - if backupRecoveryManagerSreClientOptions.URL == "" { - session.backupRecoveryManagerSreClientErr = fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_SRE_ENDPOINT not set in env or endpoints file") - } - // Construct the service client. - session.backupRecoveryManagerSreClient, err = backuprecoveryv1.NewHeliosSreApiV2(backupRecoveryManagerSreClientOptions) - if err != nil { - session.backupRecoveryManagerSreClientErr = fmt.Errorf("Error occurred while configuring IBM Backup recovery API service: %q", err) - } - if session.backupRecoveryManagerSreClient != nil && session.backupRecoveryManagerSreClient.Service != nil { - // Enable retries for API calls - session.backupRecoveryManagerSreClient.Service.EnableRetries(c.RetryCount, c.RetryDelay) - // Add custom header for analytics - session.backupRecoveryManagerSreClient.SetDefaultHeaders(gohttp.Header{ - "X-Original-User-Agent": {fmt.Sprintf("terraform-provider-ibm/%s", version.Version)}, - }) - } - projectEndpoint := project.DefaultServiceURL // Construct an "options" struct for creating the service client. if fileMap != nil && c.Visibility != "public-and-private" { diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 66f3a35626..092e2e9fe6 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -250,47 +250,39 @@ func Provider() *schema.Provider { "ibm_config_aggregator_resource_collection_status": configurationaggregator.AddConfigurationAggregatorInstanceFields(configurationaggregator.DataSourceIbmConfigAggregatorResourceCollectionStatus()), // // BackupAndRecovery - "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), - "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), - "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), - "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), - "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), - "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), - "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), - "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), - "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), - "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), - "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), - "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), - "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), - "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), - "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), - "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), - "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), - "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), - "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), - "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), - "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), - "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), - "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), - "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), - "ibm_backup_recovery_manager_get_component": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponent(), - "ibm_backup_recovery_manager_get_components": backuprecovery.DataSourceIbmBackupRecoveryManagerGetComponents(), - "ibm_backup_recovery_manager_export_report": backuprecovery.DataSourceIbmBackupRecoveryManagerExportReport(), - "ibm_backup_recovery_manager_get_report": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReport(), - "ibm_backup_recovery_manager_get_report_preview": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportPreview(), - "ibm_backup_recovery_manager_get_report_type": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReportType(), - "ibm_backup_recovery_manager_get_reports": backuprecovery.DataSourceIbmBackupRecoveryManagerGetReports(), - "ibm_backup_recovery_manager_get_resources": backuprecovery.DataSourceIbmBackupRecoveryManagerGetResources(), - "ibm_backup_recovery_manager_sre_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetClusterInfo(), - "ibm_backup_recovery_manager_sre_get_helios_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlerts(), - "ibm_backup_recovery_manager_sre_get_helios_alerts_stats": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats(), - "ibm_backup_recovery_manager_sre_get_helios_alerts_resolution": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution(), - "ibm_backup_recovery_manager_sre_get_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetAlertsSummary(), - "ibm_backup_recovery_manager_sre_get_helios_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummary(), - "ibm_backup_recovery_manager_sre_get_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetAlerts(), - "ibm_backup_recovery_manager_sre_get_upgrades_info": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetUpgradesInfo(), - "ibm_backup_recovery_manager_sre_get_compatible_clusters": backuprecovery.DataSourceIbmBackupRecoveryManagerSreGetCompatibleClusters(), + "ibm_backup_recovery_agent_upgrade_tasks": backuprecovery.DataSourceIbmBackupRecoveryAgentUpgradeTasks(), + "ibm_backup_recovery_download_agent": backuprecovery.DataSourceIbmBackupRecoveryDownloadAgent(), + "ibm_backup_recovery_search_indexed_object": backuprecovery.DataSourceIbmBackupRecoverySearchIndexedObject(), + "ibm_backup_recovery_object_snapshots": backuprecovery.DataSourceIbmBackupRecoveryObjectSnapshots(), + "ibm_backup_recovery_connectors_metadata": backuprecovery.DataSourceIbmBackupRecoveryConnectorsMetadata(), + "ibm_backup_recovery_connector_logs": backuprecovery.DataSourceIbmBackupRecoveryConnectorLogs(), + "ibm_backup_recovery_connector_status": backuprecovery.DataSourceIbmBackupRecoveryConnectorStatus(), + "ibm_backup_recovery_data_source_connections": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnections(), + "ibm_backup_recovery_data_source_connectors": backuprecovery.DataSourceIbmBackupRecoveryDataSourceConnectors(), + "ibm_backup_recovery_search_objects": backuprecovery.DataSourceIbmBackupRecoverySearchObjects(), + "ibm_backup_recovery_search_protected_objects": backuprecovery.DataSourceIbmBackupRecoverySearchProtectedObjects(), + "ibm_backup_recovery_protection_group": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroup(), + "ibm_backup_recovery_protection_groups": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroups(), + "ibm_backup_recovery_protection_group_runs": backuprecovery.DataSourceIbmBackupRecoveryProtectionGroupRuns(), + "ibm_backup_recovery_protection_policies": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicies(), + "ibm_backup_recovery_protection_policy": backuprecovery.DataSourceIbmBackupRecoveryProtectionPolicy(), + "ibm_backup_recovery": backuprecovery.DataSourceIbmBackupRecovery(), + "ibm_backup_recoveries": backuprecovery.DataSourceIbmBackupRecoveries(), + "ibm_backup_recovery_download_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadFiles(), + "ibm_backup_recovery_source_registrations": backuprecovery.DataSourceIbmBackupRecoverySourceRegistrations(), + "ibm_backup_recovery_source_registration": backuprecovery.DataSourceIbmBackupRecoverySourceRegistration(), + "ibm_backup_recovery_download_indexed_files": backuprecovery.DataSourceIbmBackupRecoveryDownloadIndexedFiles(), + "ibm_backup_recovery_protection_sources": backuprecovery.DataSourceIbmBackupRecoveryProtectionSources(), + "ibm_backup_recovery_connector_get_users": backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers(), + "ibm_backup_recovery_manager_get_management_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlerts(), + "ibm_backup_recovery_manager_get_alerts_stats": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsStats(), + "ibm_backup_recovery_manager_get_alerts_resolution": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsResolution(), + "ibm_backup_recovery_manager_get_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsSummary(), + "ibm_backup_recovery_manager_get_management_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummary(), + "ibm_backup_recovery_manager_get_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlerts(), + "ibm_backup_recovery_manager_get_upgrades_info": backuprecovery.DataSourceIbmBackupRecoveryManagerGetUpgradesInfo(), + "ibm_backup_recovery_manager_get_compatible_clusters": backuprecovery.DataSourceIbmBackupRecoveryManagerGetCompatibleClusters(), + "ibm_backup_recovery_manager_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerGetClusterInfo(), // // AppID "ibm_appid_action_url": appid.DataSourceIBMAppIDActionURL(), @@ -1114,6 +1106,7 @@ func Provider() *schema.Provider { "ibm_backup_recovery_connector_registration": backuprecovery.ResourceIbmBackupRecoveryConnectorRegistration(), "ibm_backup_recovery_connector_access_token": backuprecovery.ResourceIbmBackupRecoveryConnectorAccessToken(), "ibm_backup_recovery_connector_update_user": backuprecovery.ResourceIbmBackupRecoveryConnectorUpdateUser(), + "ibm_backup_recovery_manager_create_cluster_upgrades": backuprecovery.ResourceIbmBackupRecoveryManagerCreateClusterUpgrades(), "ibm_app": cloudfoundry.ResourceIBMApp(), "ibm_app_domain_private": cloudfoundry.ResourceIBMAppDomainPrivate(), diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go deleted file mode 100644 index 975169aa59..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report.go +++ /dev/null @@ -1,502 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery - -import ( - "context" - "fmt" - "io" - "log" - "os" - "time" - - "github.com/IBM/go-sdk-core/v5/core" - "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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerExportReport() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerExportReportRead, - - Schema: map[string]*schema.Schema{ - "report_id": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the id of the report.", - }, - "file_path": &schema.Schema{ - Type: schema.TypeString, - Required: true, - Description: "Specifies the absolute path for download", - }, - "async": &schema.Schema{ - Type: schema.TypeBool, - Optional: true, - Description: "Specifies if the report should be generated asynchronously.", - }, - "filters": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Specifies list of global filters that are applicable to given components in the report.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the attribute.", - }, - "filter_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the type of the filter that needs to be applied.", - }, - "in_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the in filter that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "attribute_data_type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Specifies the data type of the attribute.", - }, - "attribute_labels": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional label values for the attribute.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "bool_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of boolean values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeBool, - }, - }, - "int32_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int32 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "int64_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of int64 values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - }, - "string_filter_values": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies list of string values to filter results on.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the filters that are applied on attributes.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - "systems_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the systems filter. Specifying this will pre filter all the results provided list of system identifier before applying aggregations.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "system_ids": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies an array of system identifiers. System identifiers may be of format clusterid:clusterincarnationid or a regionid (applicable only in case of DMaaS).", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "system_names": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the optional system names labels.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "time_range_filter_params": &schema.Schema{ - Type: schema.TypeList, - Computed: true, - Description: "Specifies the time range filter. Specifying this will pre filter all the results on necessary resources like Protection Runs etc before applying aggregations. Currently, maximum allowed time range is 60 days.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "date_range": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "Enum value for specifying the date range for a time filter. Considered only if lowerBound and upperBound are empty.", - }, - "duration_hours": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the duration preceding the current time for which the data must be fetch i.e fetch data between currentTime and currentTime - durationHours. This filter is only considered if neither upperBound, lowerBound or dateRange is specified.", - }, - "lower_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the lower bound value. If specified, all the results which are greater than this value will be returned.", - }, - "upper_bound": &schema.Schema{ - Type: schema.TypeInt, - Computed: true, - Description: "Specifies the upper bound value. If specified, all the results which are lesser than this value will be returned.", - }, - }, - }, - }, - }, - }, - }, - "layout": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "The layout of the report which needs to be exported.", - }, - "report_format": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "The format in which the report needs to be exported.", - }, - "timezone": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Description: "Specifies timezone of the user. If nil, defaults to UTC. The time specified should be a location name in the IANA Time Zone database, for example, 'America/Los_Angeles'.", - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerExportReportRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_export_report", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - exportReportOptions := &backuprecoveryv1.ExportReportOptions{} - - exportReportOptions.SetID(d.Get("report_id").(string)) - if _, ok := d.GetOk("async"); ok { - exportReportOptions.SetAsync(d.Get("async").(bool)) - } - if _, ok := d.GetOk("filters"); ok { - var newFilters []backuprecoveryv1.AttributeFilter - for _, v := range d.Get("filters").([]interface{}) { - value := v.(map[string]interface{}) - newFiltersItem, err := ResourceIbmBackupRecoveryManagerExportReportMapToAttributeFilter(value) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_export_report", "read", "parse-filters").GetDiag() - } - newFilters = append(newFilters, *newFiltersItem) - } - exportReportOptions.SetFilters(newFilters) - } - if _, ok := d.GetOk("layout"); ok { - exportReportOptions.SetLayout(d.Get("layout").(string)) - } - if _, ok := d.GetOk("report_format"); ok { - exportReportOptions.SetReportFormat(d.Get("report_format").(string)) - } - if _, ok := d.GetOk("timezone"); ok { - exportReportOptions.SetTimezone(d.Get("timezone").(string)) - } - - typeString, _, err := backupRecoveryClient.ExportReportWithContext(context, exportReportOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ExportReportWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_export_report", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerExportReportID(d)) - - err = saveReportExportToFile(typeString, d.Get("file_path").(string)) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_download_agent", "read", "parse-linux_params").GetDiag() - } - - return nil -} - -func saveReportExportToFile(response io.ReadCloser, filePath string) error { - outputFile, err := os.Create(filePath) - if err != nil { - return err - } - defer outputFile.Close() - - _, err = io.Copy(outputFile, response) - if err != nil { - return err - } - - err = response.Close() - if err != nil { - return err - } - - return nil -} - -// dataSourceIbmBackupRecoveryManagerExportReportID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerExportReportID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} - -func ResourceIbmBackupRecoveryManagerExportReportMapToAttributeFilter(modelMap map[string]interface{}) (*backuprecoveryv1.AttributeFilter, error) { - model := &backuprecoveryv1.AttributeFilter{} - model.Attribute = core.StringPtr(modelMap["attribute"].(string)) - model.FilterType = core.StringPtr(modelMap["filter_type"].(string)) - if modelMap["in_filter_params"] != nil && len(modelMap["in_filter_params"].([]interface{})) > 0 { - InFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToInFilterParams(modelMap["in_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.InFilterParams = InFilterParamsModel - } - if modelMap["range_filter_params"] != nil && len(modelMap["range_filter_params"].([]interface{})) > 0 { - RangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToRangeFilterParams(modelMap["range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.RangeFilterParams = RangeFilterParamsModel - } - if modelMap["systems_filter_params"] != nil && len(modelMap["systems_filter_params"].([]interface{})) > 0 { - SystemsFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToSystemsFilterParams(modelMap["systems_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.SystemsFilterParams = SystemsFilterParamsModel - } - if modelMap["time_range_filter_params"] != nil && len(modelMap["time_range_filter_params"].([]interface{})) > 0 { - TimeRangeFilterParamsModel, err := ResourceIbmBackupRecoveryManagerExportReportMapToTimeRangeFilterParams(modelMap["time_range_filter_params"].([]interface{})[0].(map[string]interface{})) - if err != nil { - return model, err - } - model.TimeRangeFilterParams = TimeRangeFilterParamsModel - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportMapToInFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.InFilterParams, error) { - model := &backuprecoveryv1.InFilterParams{} - model.AttributeDataType = core.StringPtr(modelMap["attribute_data_type"].(string)) - if modelMap["attribute_labels"] != nil { - attributeLabels := []string{} - for _, attributeLabelsItem := range modelMap["attribute_labels"].([]interface{}) { - attributeLabels = append(attributeLabels, attributeLabelsItem.(string)) - } - model.AttributeLabels = attributeLabels - } - if modelMap["bool_filter_values"] != nil { - boolFilterValues := []bool{} - for _, boolFilterValuesItem := range modelMap["bool_filter_values"].([]interface{}) { - boolFilterValues = append(boolFilterValues, boolFilterValuesItem.(bool)) - } - model.BoolFilterValues = boolFilterValues - } - if modelMap["int32_filter_values"] != nil { - int32FilterValues := []int64{} - for _, int32FilterValuesItem := range modelMap["int32_filter_values"].([]interface{}) { - int32FilterValues = append(int32FilterValues, int64(int32FilterValuesItem.(int))) - } - model.Int32FilterValues = int32FilterValues - } - if modelMap["int64_filter_values"] != nil { - int64FilterValues := []int64{} - for _, int64FilterValuesItem := range modelMap["int64_filter_values"].([]interface{}) { - int64FilterValues = append(int64FilterValues, int64(int64FilterValuesItem.(int))) - } - model.Int64FilterValues = int64FilterValues - } - if modelMap["string_filter_values"] != nil { - stringFilterValues := []string{} - for _, stringFilterValuesItem := range modelMap["string_filter_values"].([]interface{}) { - stringFilterValues = append(stringFilterValues, stringFilterValuesItem.(string)) - } - model.StringFilterValues = stringFilterValues - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportMapToRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.RangeFilterParams, error) { - model := &backuprecoveryv1.RangeFilterParams{} - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportMapToSystemsFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.SystemsFilterParams, error) { - model := &backuprecoveryv1.SystemsFilterParams{} - systemIds := []string{} - for _, systemIdsItem := range modelMap["system_ids"].([]interface{}) { - systemIds = append(systemIds, systemIdsItem.(string)) - } - model.SystemIds = systemIds - if modelMap["system_names"] != nil { - systemNames := []string{} - for _, systemNamesItem := range modelMap["system_names"].([]interface{}) { - systemNames = append(systemNames, systemNamesItem.(string)) - } - model.SystemNames = systemNames - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportMapToTimeRangeFilterParams(modelMap map[string]interface{}) (*backuprecoveryv1.TimeRangeFilterParams, error) { - model := &backuprecoveryv1.TimeRangeFilterParams{} - if modelMap["date_range"] != nil && modelMap["date_range"].(string) != "" { - model.DateRange = core.StringPtr(modelMap["date_range"].(string)) - } - if modelMap["duration_hours"] != nil { - model.DurationHours = core.Int64Ptr(int64(modelMap["duration_hours"].(int))) - } - if modelMap["lower_bound"] != nil { - model.LowerBound = core.Int64Ptr(int64(modelMap["lower_bound"].(int))) - } - if modelMap["upper_bound"] != nil { - model.UpperBound = core.Int64Ptr(int64(modelMap["upper_bound"].(int))) - } - return model, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportAttributeFilterToMap(model *backuprecoveryv1.AttributeFilter) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute"] = *model.Attribute - modelMap["filter_type"] = *model.FilterType - if model.InFilterParams != nil { - inFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportInFilterParamsToMap(model.InFilterParams) - if err != nil { - return modelMap, err - } - modelMap["in_filter_params"] = []map[string]interface{}{inFilterParamsMap} - } - if model.RangeFilterParams != nil { - rangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportRangeFilterParamsToMap(model.RangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["range_filter_params"] = []map[string]interface{}{rangeFilterParamsMap} - } - if model.SystemsFilterParams != nil { - systemsFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportSystemsFilterParamsToMap(model.SystemsFilterParams) - if err != nil { - return modelMap, err - } - modelMap["systems_filter_params"] = []map[string]interface{}{systemsFilterParamsMap} - } - if model.TimeRangeFilterParams != nil { - timeRangeFilterParamsMap, err := ResourceIbmBackupRecoveryManagerExportReportTimeRangeFilterParamsToMap(model.TimeRangeFilterParams) - if err != nil { - return modelMap, err - } - modelMap["time_range_filter_params"] = []map[string]interface{}{timeRangeFilterParamsMap} - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportInFilterParamsToMap(model *backuprecoveryv1.InFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["attribute_data_type"] = *model.AttributeDataType - if model.AttributeLabels != nil { - modelMap["attribute_labels"] = model.AttributeLabels - } - if model.BoolFilterValues != nil { - modelMap["bool_filter_values"] = model.BoolFilterValues - } - if model.Int32FilterValues != nil { - modelMap["int32_filter_values"] = model.Int32FilterValues - } - if model.Int64FilterValues != nil { - modelMap["int64_filter_values"] = model.Int64FilterValues - } - if model.StringFilterValues != nil { - modelMap["string_filter_values"] = model.StringFilterValues - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportRangeFilterParamsToMap(model *backuprecoveryv1.RangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportSystemsFilterParamsToMap(model *backuprecoveryv1.SystemsFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["system_ids"] = model.SystemIds - if model.SystemNames != nil { - modelMap["system_names"] = model.SystemNames - } - return modelMap, nil -} - -func ResourceIbmBackupRecoveryManagerExportReportTimeRangeFilterParamsToMap(model *backuprecoveryv1.TimeRangeFilterParams) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.DateRange != nil { - modelMap["date_range"] = *model.DateRange - } - if model.DurationHours != nil { - modelMap["duration_hours"] = flex.IntValue(model.DurationHours) - } - if model.LowerBound != nil { - modelMap["lower_bound"] = flex.IntValue(model.LowerBound) - } - if model.UpperBound != nil { - modelMap["upper_bound"] = flex.IntValue(model.UpperBound) - } - return modelMap, nil -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go deleted file mode 100644 index 85e4cc3d7d..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_export_report_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.105.1-067d600b-20250616-154447 - */ - -package backuprecovery_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" -) - -func TestAccIbmBackupRecoveryManagerExportReportDataSourceBasic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerExportReportDataSourceConfigBasic(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_export_report.backup_recovery_manager_export_report_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_export_report.backup_recovery_manager_export_report_instance", "backup_recovery_manager_export_report_id"), - ), - }, - }, - }) -} - -func testAccCheckIbmBackupRecoveryManagerExportReportDataSourceConfigBasic() string { - return fmt.Sprintf(` - data "ibm_backup_recovery_manager_export_report" "backup_recovery_manager_export_report_instance" { - id = "id" - async = true - filters = [ { attribute="attribute", filter_type="In", in_filter_params={ attribute_data_type="Bool", attribute_labels=[ "attributeLabels" ], bool_filter_values=[ true ], int32_filter_values=[ 1 ], int64_filter_values=[ 1 ], string_filter_values=[ "stringFilterValues" ] }, range_filter_params={ lower_bound=1, upper_bound=1 }, systems_filter_params={ system_ids=[ "systemIds" ], system_names=[ "systemNames" ] }, time_range_filter_params={ date_range="Last1Hour", duration_hours=1, lower_bound=1, upper_bound=1 } } ] - layout = "layout" - reportFormat = "XLS" - timezone = "timezone" - } - `) -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go similarity index 91% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go index de0c7e09cf..2370f62db5 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go @@ -21,9 +21,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetAlerts() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetAlerts() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetAlertsRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetAlertsRead, Schema: map[string]*schema.Schema{ "alert_ids": &schema.Schema{ @@ -284,7 +284,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlerts() *schema.Resource { "resolution_id": &schema.Schema{ Type: schema.TypeInt, Computed: true, - Description: "Specifies the unique resolution id assigned in helios.", + Description: "Specifies the unique resolution id assigned in management console.", }, "resolution_summary": &schema.Schema{ Type: schema.TypeString, @@ -368,10 +368,10 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlerts() *schema.Resource { } } -func dataSourceIbmBackupRecoveryManagerSreGetAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } @@ -467,36 +467,36 @@ func dataSourceIbmBackupRecoveryManagerSreGetAlertsRead(context context.Context, getAlertsOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) } - alertList, _, err := heliosSreApiClient.GetAlertsWithContext(context, getAlertsOptions) + alertList, _, err := managementSreApiClient.GetAlertsWithContext(context, getAlertsOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetAlertsID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetAlertsID(d)) alerts := []map[string]interface{}{} for _, alertsItem := range alertList.Alerts { - alertsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(&alertsItem) // #nosec G601 + alertsItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsAlertInfoToMap(&alertsItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "alerts-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts", "read", "alerts-to-map").GetDiag() } alerts = append(alerts, alertsItemMap) } if err = d.Set("alerts", alerts); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_alerts", "read", "set-alerts").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts", "read", "set-alerts").GetDiag() } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetAlertsID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetAlertsID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetAlertsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetAlertsID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backuprecoveryv1.AlertInfo) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsAlertInfoToMap(model *backuprecoveryv1.AlertInfo) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertCategory != nil { modelMap["alert_category"] = *model.AlertCategory @@ -505,7 +505,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backupr modelMap["alert_code"] = *model.AlertCode } if model.AlertDocument != nil { - alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertDocumentToMap(model.AlertDocument) + alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsAlertDocumentToMap(model.AlertDocument) if err != nil { return modelMap, err } @@ -550,7 +550,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backupr if model.PropertyList != nil { propertyList := []map[string]interface{}{} for _, propertyListItem := range model.PropertyList { - propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsLabelToMap(&propertyListItem) // #nosec G601 + propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsLabelToMap(&propertyListItem) // #nosec G601 if err != nil { return modelMap, err } @@ -562,7 +562,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backupr modelMap["region_id"] = *model.RegionID } if model.ResolutionDetails != nil { - resolutionDetailsMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertResolutionDetailsToMap(model.ResolutionDetails) + resolutionDetailsMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsAlertResolutionDetailsToMap(model.ResolutionDetails) if err != nil { return modelMap, err } @@ -586,7 +586,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backupr if model.Vaults != nil { vaults := []map[string]interface{}{} for _, vaultsItem := range model.Vaults { - vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsVaultToMap(&vaultsItem) // #nosec G601 + vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsVaultToMap(&vaultsItem) // #nosec G601 if err != nil { return modelMap, err } @@ -597,7 +597,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertInfoToMap(model *backupr return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertCause != nil { modelMap["alert_cause"] = *model.AlertCause @@ -617,14 +617,14 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertDocumentToMap(model *bac return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) modelMap["key"] = *model.Key modelMap["value"] = *model.Value return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertResolutionDetailsToMap(model *backuprecoveryv1.AlertResolutionDetails) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsAlertResolutionDetailsToMap(model *backuprecoveryv1.AlertResolutionDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ResolutionDetails != nil { modelMap["resolution_details"] = *model.ResolutionDetails @@ -644,7 +644,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsAlertResolutionDetailsToMap(m return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.GlobalVaultID != nil { modelMap["global_vault_id"] = *model.GlobalVaultID diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go similarity index 70% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go index 441988a643..b342bf3cb2 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go @@ -22,9 +22,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetAlertsResolution() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetAlertsResolutionRead, Schema: map[string]*schema.Schema{ "max_resolutions": &schema.Schema{ @@ -66,12 +66,12 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution() *schema.Re "external_key": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "Specifies the external key assigned outside of helios, with the form of \"clusterid:resolutionid\".", + Description: "Specifies the external key assigned outside of management console, with the form of \"clusterid:resolutionid\".", }, "resolution_id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "Specifies the unique reslution id assigned in helios.", + Description: "Specifies the unique reslution id assigned in management console.", }, "resolution_name": &schema.Schema{ Type: schema.TypeString, @@ -137,66 +137,56 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolution() *schema.Re } } -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetAlertsResolutionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - getHeliosAlertResolutionOptions := &backuprecoveryv1.GetHeliosAlertResolutionOptions{} + getManagementAlertResolutionOptions := &backuprecoveryv1.GetManagementAlertResolutionOptions{} - getHeliosAlertResolutionOptions.SetMaxResolutions(int64(d.Get("max_resolutions").(int))) + getManagementAlertResolutionOptions.SetMaxResolutions(int64(d.Get("max_resolutions").(int))) if _, ok := d.GetOk("resolution_name"); ok { - getHeliosAlertResolutionOptions.SetResolutionName(d.Get("resolution_name").(string)) + getManagementAlertResolutionOptions.SetResolutionName(d.Get("resolution_name").(string)) } if _, ok := d.GetOk("resolution_id"); ok { - getHeliosAlertResolutionOptions.SetResolutionID(d.Get("resolution_id").(string)) + getManagementAlertResolutionOptions.SetResolutionID(d.Get("resolution_id").(string)) } - alertResolutionsList, _, err := heliosSreApiClient.GetHeliosAlertResolutionWithContext(context, getHeliosAlertResolutionOptions) + alertResolutionsList, _, err := managementSreApiClient.GetManagementAlertResolutionWithContext(context, getManagementAlertResolutionOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertResolutionWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertResolutionWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetAlertsResolutionID(d)) - if !core.IsNil(alertResolutionsList) { - alertResolutionsListItems := [][]map[string]interface{}{} - - for _, alertResolutionsListItem := range alertResolutionsList { - - alertResolutionsItems := []map[string]interface{}{} - - for _, alertResolutionsListItem := range alertResolutionsListItem.AlertResolutionsList { - - alertResolutionsItem, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResolutionToMap(&alertResolutionsListItem) - if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "alert_resolutions_list-to-map").GetDiag() - } - - alertResolutionsItems = append(alertResolutionsItems, alertResolutionsItem) + if !core.IsNil(alertResolutionsList.AlertResolutionsList) { + alertResolutionsListResult := []map[string]interface{}{} + for _, alertResolutionsListItem := range alertResolutionsList.AlertResolutionsList { + alertResolutionsListItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsResolutionAlertResolutionToMap(&alertResolutionsListItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read", "alert_resolutions_list-to-map").GetDiag() } - alertResolutionsListItems = append(alertResolutionsListItems, alertResolutionsItems) + alertResolutionsListResult = append(alertResolutionsListResult, alertResolutionsListItemMap) } - if err = d.Set("alert_resolutions_list", alertResolutionsList); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alert_resolutions_list: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_resolution", "read", "set-alert_resolutions_list").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alert_resolutions_list: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read", "set-alert_resolutions_list").GetDiag() } } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetAlertsResolutionID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetAlertsResolutionID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResolutionToMap(model *backuprecoveryv1.AlertResolution) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsResolutionAlertResolutionToMap(model *backuprecoveryv1.AlertResolution) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AccountID != nil { modelMap["account_id"] = *model.AccountID @@ -219,7 +209,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResoluti if model.ResolvedAlerts != nil { resolvedAlerts := []map[string]interface{}{} for _, resolvedAlertsItem := range model.ResolvedAlerts { - resolvedAlertsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionResolvedAlertInfoToMap(&resolvedAlertsItem) // #nosec G601 + resolvedAlertsItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsResolutionResolvedAlertInfoToMap(&resolvedAlertsItem) // #nosec G601 if err != nil { return modelMap, err } @@ -236,7 +226,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionAlertResoluti return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionResolvedAlertInfoToMap(model *backuprecoveryv1.ResolvedAlertInfo) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsResolutionResolvedAlertInfoToMap(model *backuprecoveryv1.ResolvedAlertInfo) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertID != nil { modelMap["alert_id"] = flex.IntValue(model.AlertID) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go similarity index 55% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go index b011383125..538f3871e5 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_resolution_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go @@ -16,25 +16,25 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetAlertsResolutionDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetAlertsResolutionDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.backup_recovery_manager_sre_get_helios_alerts_resolution_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_resolution.backup_recovery_manager_sre_get_helios_alerts_resolution_instance", "max_resolutions"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_resolution.backup_recovery_manager_get_alerts_resolution_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_resolution.backup_recovery_manager_get_alerts_resolution_instance", "max_resolutions"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsResolutionDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetAlertsResolutionDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_helios_alerts_resolution" "backup_recovery_manager_sre_get_helios_alerts_resolution_instance" { + data "ibm_backup_recovery_manager_get_alerts_resolution" "backup_recovery_manager_get_alerts_resolution_instance" { maxResolutions = 1 resolutionName = "resolutionName" resolutionId = "resolutionId" diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go similarity index 84% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go index 0a22506fe6..a9ebf45896 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go @@ -22,9 +22,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetAlertsStats() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetAlertsStatsRead, Schema: map[string]*schema.Schema{ "start_time_usecs": &schema.Schema{ @@ -45,6 +45,14 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats() *schema.Resourc Type: schema.TypeInt, }, }, + "service_instance_ids": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies list of service instance ids to filter alert stats by.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, "region_ids": &schema.Schema{ Type: schema.TypeList, Optional: true, @@ -356,25 +364,33 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStats() *schema.Resourc } } -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetAlertsStatsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - getHeliosAlertsStatsOptions := &backuprecoveryv1.GetHeliosAlertsStatsOptions{} + getManagementAlertsStatsOptions := &backuprecoveryv1.GetManagementAlertsStatsOptions{} - getHeliosAlertsStatsOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) - getHeliosAlertsStatsOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + getManagementAlertsStatsOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + getManagementAlertsStatsOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) if _, ok := d.GetOk("cluster_ids"); ok { var clusterIds []int64 for _, v := range d.Get("cluster_ids").([]interface{}) { clusterIdsItem := int64(v.(int)) clusterIds = append(clusterIds, clusterIdsItem) } - getHeliosAlertsStatsOptions.SetClusterIds(clusterIds) + getManagementAlertsStatsOptions.SetClusterIds(clusterIds) + } + if _, ok := d.GetOk("service_instance_ids"); ok { + var serviceInstanceIds []string + for _, v := range d.Get("service_instance_ids").([]interface{}) { + serviceInstanceIdsItem := v.(string) + serviceInstanceIds = append(serviceInstanceIds, serviceInstanceIdsItem) + } + getManagementAlertsStatsOptions.SetServiceInstanceIds(serviceInstanceIds) } if _, ok := d.GetOk("region_ids"); ok { var regionIds []string @@ -382,13 +398,13 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead(context conte regionIdsItem := v.(string) regionIds = append(regionIds, regionIdsItem) } - getHeliosAlertsStatsOptions.SetRegionIds(regionIds) + getManagementAlertsStatsOptions.SetRegionIds(regionIds) } if _, ok := d.GetOk("exclude_stats_by_cluster"); ok { - getHeliosAlertsStatsOptions.SetExcludeStatsByCluster(d.Get("exclude_stats_by_cluster").(bool)) + getManagementAlertsStatsOptions.SetExcludeStatsByCluster(d.Get("exclude_stats_by_cluster").(bool)) } if _, ok := d.GetOk("alert_source"); ok { - getHeliosAlertsStatsOptions.SetAlertSource(d.Get("alert_source").(string)) + getManagementAlertsStatsOptions.SetAlertSource(d.Get("alert_source").(string)) } if _, ok := d.GetOk("tenant_ids"); ok { var tenantIds []string @@ -396,65 +412,65 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsRead(context conte tenantIdsItem := v.(string) tenantIds = append(tenantIds, tenantIdsItem) } - getHeliosAlertsStatsOptions.SetTenantIds(tenantIds) + getManagementAlertsStatsOptions.SetTenantIds(tenantIds) } - mcmActiveAlertsStats, _, err := heliosSreApiClient.GetHeliosAlertsStatsWithContext(context, getHeliosAlertsStatsOptions) + mcmActiveAlertsStats, _, err := managementSreApiClient.GetManagementAlertsStatsWithContext(context, getManagementAlertsStatsOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsStatsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsStatsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetAlertsStatsID(d)) if !core.IsNil(mcmActiveAlertsStats.AggregatedAlertsStats) { aggregatedAlertsStats := []map[string]interface{}{} - aggregatedAlertsStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(mcmActiveAlertsStats.AggregatedAlertsStats) + aggregatedAlertsStatsMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsStatsActiveAlertsStatsToMap(mcmActiveAlertsStats.AggregatedAlertsStats) if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "aggregated_alerts_stats-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "aggregated_alerts_stats-to-map").GetDiag() } aggregatedAlertsStats = append(aggregatedAlertsStats, aggregatedAlertsStatsMap) if err = d.Set("aggregated_alerts_stats", aggregatedAlertsStats); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_alerts_stats: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-aggregated_alerts_stats").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_alerts_stats: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "set-aggregated_alerts_stats").GetDiag() } } if !core.IsNil(mcmActiveAlertsStats.AggregatedClusterStats) { aggregatedClusterStats := []map[string]interface{}{} - aggregatedClusterStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsClusterAlertStatsToMap(mcmActiveAlertsStats.AggregatedClusterStats) + aggregatedClusterStatsMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsStatsClusterAlertStatsToMap(mcmActiveAlertsStats.AggregatedClusterStats) if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "aggregated_cluster_stats-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "aggregated_cluster_stats-to-map").GetDiag() } aggregatedClusterStats = append(aggregatedClusterStats, aggregatedClusterStatsMap) if err = d.Set("aggregated_cluster_stats", aggregatedClusterStats); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_cluster_stats: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-aggregated_cluster_stats").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregated_cluster_stats: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "set-aggregated_cluster_stats").GetDiag() } } if !core.IsNil(mcmActiveAlertsStats.StatsByCluster) { statsByCluster := []map[string]interface{}{} for _, statsByClusterItem := range mcmActiveAlertsStats.StatsByCluster { - statsByClusterItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsMcmActiveAlertsStatsByClusterToMap(&statsByClusterItem) // #nosec G601 + statsByClusterItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsStatsMcmActiveAlertsStatsByClusterToMap(&statsByClusterItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "stats_by_cluster-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "stats_by_cluster-to-map").GetDiag() } statsByCluster = append(statsByCluster, statsByClusterItemMap) } if err = d.Set("stats_by_cluster", statsByCluster); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting stats_by_cluster: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_stats", "read", "set-stats_by_cluster").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting stats_by_cluster: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "set-stats_by_cluster").GetDiag() } } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetAlertsStatsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetAlertsStatsID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(model *backuprecoveryv1.ActiveAlertsStats) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsStatsActiveAlertsStatsToMap(model *backuprecoveryv1.ActiveAlertsStats) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.NumCriticalAlerts != nil { modelMap["num_critical_alerts"] = flex.IntValue(model.NumCriticalAlerts) @@ -525,7 +541,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsT return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsClusterAlertStatsToMap(model *backuprecoveryv1.ClusterAlertStats) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsStatsClusterAlertStatsToMap(model *backuprecoveryv1.ClusterAlertStats) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.NumClustersWithCriticalAlerts != nil { modelMap["num_clusters_with_critical_alerts"] = flex.IntValue(model.NumClustersWithCriticalAlerts) @@ -539,10 +555,10 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsClusterAlertStatsT return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsMcmActiveAlertsStatsByClusterToMap(model *backuprecoveryv1.McmActiveAlertsStatsByCluster) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsStatsMcmActiveAlertsStatsByClusterToMap(model *backuprecoveryv1.McmActiveAlertsStatsByCluster) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertsStats != nil { - alertsStatsMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsStatsActiveAlertsStatsToMap(model.AlertsStats) + alertsStatsMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsStatsActiveAlertsStatsToMap(model.AlertsStats) if err != nil { return modelMap, err } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go similarity index 57% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go index 40715fa4e8..b6811db2fa 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_stats_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go @@ -16,29 +16,30 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetAlertsStatsDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetAlertsStatsDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "start_time_usecs"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_stats.backup_recovery_manager_sre_get_helios_alerts_stats_instance", "end_time_usecs"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_stats.backup_recovery_manager_get_alerts_stats_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_stats.backup_recovery_manager_get_alerts_stats_instance", "start_time_usecs"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_stats.backup_recovery_manager_get_alerts_stats_instance", "end_time_usecs"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsStatsDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetAlertsStatsDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_helios_alerts_stats" "backup_recovery_manager_sre_get_helios_alerts_stats_instance" { + data "ibm_backup_recovery_manager_get_alerts_stats" "backup_recovery_manager_get_alerts_stats_instance" { startTimeUsecs = 1 endTimeUsecs = 1 clusterIds = [ 1 ] + serviceInstanceIds = [ "serviceInstanceIds" ] regionIds = [ "regionIds" ] excludeStatsByCluster = true alertSource = "kCluster" diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go similarity index 82% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go index 2d842ea262..341a69a5fb 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go @@ -22,9 +22,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetAlertsSummary() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetAlertsSummary() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetAlertsSummaryRead, Schema: map[string]*schema.Schema{ "start_time_usecs": &schema.Schema{ @@ -106,10 +106,10 @@ func DataSourceIbmBackupRecoveryManagerSreGetAlertsSummary() *schema.Resource { } } -func dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } @@ -145,38 +145,38 @@ func dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryRead(context context.C getAlertSummaryOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) } - alertsSummaryResponse, _, err := heliosSreApiClient.GetAlertSummaryWithContext(context, getAlertSummaryOptions) + alertsSummaryResponse, _, err := managementSreApiClient.GetAlertSummaryWithContext(context, getAlertSummaryOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetAlertsSummaryID(d)) if !core.IsNil(alertsSummaryResponse.AlertsSummary) { alertsSummary := []map[string]interface{}{} for _, alertsSummaryItem := range alertsSummaryResponse.AlertsSummary { - alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 + alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerGetAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "alerts_summary-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read", "alerts_summary-to-map").GetDiag() } alertsSummary = append(alertsSummary, alertsSummaryItemMap) } if err = d.Set("alerts_summary", alertsSummary); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_alerts_summary", "read", "set-alerts_summary").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read", "set-alerts_summary").GetDiag() } } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetAlertsSummaryID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetAlertsSummaryID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Category != nil { modelMap["category"] = *model.Category diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go similarity index 64% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go index e7a1928230..fa08187d81 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_summary_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go @@ -16,24 +16,24 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetAlertsSummaryDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetAlertsSummaryDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts_summary.backup_recovery_manager_sre_get_alerts_summary_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts_summary.backup_recovery_manager_get_alerts_summary_instance", "id"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetAlertsSummaryDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetAlertsSummaryDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_alerts_summary" "backup_recovery_manager_sre_get_alerts_summary_instance" { + data "ibm_backup_recovery_manager_get_alerts_summary" "backup_recovery_manager_get_alerts_summary_instance" { startTimeUsecs = 1 endTimeUsecs = 1 includeTenants = true diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go similarity index 70% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go index cb2003548a..ad1f751849 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_alerts_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go @@ -16,25 +16,25 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetAlertsDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetAlertsDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetAlertsDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetAlertsDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts.backup_recovery_manager_sre_get_alerts_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_alerts.backup_recovery_manager_sre_get_alerts_instance", "alerts.#"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts.backup_recovery_manager_get_alerts_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_alerts.backup_recovery_manager_get_alerts_instance", "alerts.#"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetAlertsDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetAlertsDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_alerts" "backup_recovery_manager_sre_get_alerts_instance" { + data "ibm_backup_recovery_manager_get_alerts" "backup_recovery_manager_get_alerts_instance" { alertIds = [ "alertIds" ] alertTypes = [ 1 ] alertCategories = [ "kDisk" ] diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go similarity index 86% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go index 23e6eec245..534a2600ae 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go @@ -22,9 +22,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetClusterInfo() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetClusterInfoRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetClusterInfoRead, Schema: map[string]*schema.Schema{ "cohesity_clusters": &schema.Schema{ @@ -119,7 +119,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { "current_version": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "Specifies if the cluster is connected to helios.", + Description: "Specifies if the cluster is connected to management console.", }, "health": &schema.Schema{ Type: schema.TypeString, @@ -129,7 +129,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { "is_connected_to_helios": &schema.Schema{ Type: schema.TypeBool, Computed: true, - Description: "Specifies if the cluster is connected to helios.", + Description: "Specifies if the cluster is connected to management console.", }, "location": &schema.Schema{ Type: schema.TypeString, @@ -246,7 +246,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { "is_connected_to_helios": &schema.Schema{ Type: schema.TypeBool, Computed: true, - Description: "Specifies if the cluster is connected to helios.", + Description: "Specifies if the cluster is connected to management console.", }, "node_ips": &schema.Schema{ Type: schema.TypeList, @@ -288,62 +288,62 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfo() *schema.Resource { } } -func dataSourceIbmBackupRecoveryManagerSreGetClusterInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetClusterInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } getClustersInfoOptions := &backuprecoveryv1.GetClustersInfoOptions{} - clusterDetails, _, err := heliosSreApiClient.GetClustersInfoWithContext(context, getClustersInfoOptions) + clusterDetails, _, err := managementSreApiClient.GetClustersInfoWithContext(context, getClustersInfoOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetClustersInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetClustersInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetClusterInfoID(d)) if !core.IsNil(clusterDetails.CohesityClusters) { cohesityClusters := []map[string]interface{}{} for _, cohesityClustersItem := range clusterDetails.CohesityClusters { - cohesityClustersItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(&cohesityClustersItem) // #nosec G601 + cohesityClustersItemMap, err := DataSourceIbmBackupRecoveryManagerGetClusterInfoClusterInfoToMap(&cohesityClustersItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "cohesity_clusters-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "cohesity_clusters-to-map").GetDiag() } cohesityClusters = append(cohesityClusters, cohesityClustersItemMap) } if err = d.Set("cohesity_clusters", cohesityClusters); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting cohesity_clusters: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "set-cohesity_clusters").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting cohesity_clusters: %s", err), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "set-cohesity_clusters").GetDiag() } } if !core.IsNil(clusterDetails.SpClusters) { spClusters := []map[string]interface{}{} for _, spClustersItem := range clusterDetails.SpClusters { - spClustersItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoSPClusterInfoToMap(&spClustersItem) // #nosec G601 + spClustersItemMap, err := DataSourceIbmBackupRecoveryManagerGetClusterInfoSPClusterInfoToMap(&spClustersItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "sp_clusters-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "sp_clusters-to-map").GetDiag() } spClusters = append(spClusters, spClustersItemMap) } if err = d.Set("sp_clusters", spClusters); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sp_clusters: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_cluster_info", "read", "set-sp_clusters").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting sp_clusters: %s", err), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "set-sp_clusters").GetDiag() } } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetClusterInfoID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetClusterInfoID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetClusterInfoID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(model *backuprecoveryv1.ClusterInfo) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetClusterInfoClusterInfoToMap(model *backuprecoveryv1.ClusterInfo) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AuthSupportForPkgDownloads != nil { modelMap["auth_support_for_pkg_downloads"] = *model.AuthSupportForPkgDownloads @@ -351,7 +351,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(model * if model.AvailableVersions != nil { availableVersions := []map[string]interface{}{} for _, availableVersionsItem := range model.AvailableVersions { - availableVersionsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailableReleaseVersionToMap(&availableVersionsItem) // #nosec G601 + availableVersionsItemMap, err := DataSourceIbmBackupRecoveryManagerGetClusterInfoAvailableReleaseVersionToMap(&availableVersionsItem) // #nosec G601 if err != nil { return modelMap, err } @@ -428,13 +428,13 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoClusterInfoToMap(model * return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailableReleaseVersionToMap(model *backuprecoveryv1.AvailableReleaseVersion) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetClusterInfoAvailableReleaseVersionToMap(model *backuprecoveryv1.AvailableReleaseVersion) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Notes != nil { modelMap["notes"] = *model.Notes } if model.PatchDetails != nil { - patchDetailsMap, err := DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailablePatchReleaseToMap(model.PatchDetails) + patchDetailsMap, err := DataSourceIbmBackupRecoveryManagerGetClusterInfoAvailablePatchReleaseToMap(model.PatchDetails) if err != nil { return modelMap, err } @@ -455,7 +455,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailableReleaseVersionT return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailablePatchReleaseToMap(model *backuprecoveryv1.AvailablePatchRelease) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetClusterInfoAvailablePatchReleaseToMap(model *backuprecoveryv1.AvailablePatchRelease) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Notes != nil { modelMap["notes"] = *model.Notes @@ -469,7 +469,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoAvailablePatchReleaseToM return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetClusterInfoSPClusterInfoToMap(model *backuprecoveryv1.SPClusterInfo) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetClusterInfoSPClusterInfoToMap(model *backuprecoveryv1.SPClusterInfo) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ClusterID != nil { modelMap["cluster_id"] = flex.IntValue(model.ClusterID) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info_test.go similarity index 59% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info_test.go index 7563fb8801..1c0df5f302 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_cluster_info_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info_test.go @@ -16,24 +16,24 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetClusterInfoDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetClusterInfoDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetClusterInfoDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetClusterInfoDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_cluster_info.backup_recovery_manager_sre_get_cluster_info_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_cluster_info.backup_recovery_manager_get_cluster_info_instance", "id"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetClusterInfoDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetClusterInfoDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_cluster_info" "backup_recovery_manager_sre_get_cluster_info_instance" { + data "ibm_backup_recovery_manager_get_cluster_info" "backup_recovery_manager_get_cluster_info_instance" { } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go new file mode 100644 index 0000000000..626bed087d --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go @@ -0,0 +1,126 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetCompatibleClusters() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetCompatibleClustersRead, + + Schema: map[string]*schema.Schema{ + "release_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + }, + "compatible_clusters": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + "cluster_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies cluster's name.", + }, + "current_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the current version of the cluster.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetCompatibleClustersRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + compatibleClustersForReleaseOptions := &backuprecoveryv1.CompatibleClustersForReleaseOptions{} + + if _, ok := d.GetOk("release_version"); ok { + compatibleClustersForReleaseOptions.SetReleaseVersion(d.Get("release_version").(string)) + } + + compatibleClusters, _, err := managementSreApiClient.CompatibleClustersForReleaseWithContext(context, compatibleClustersForReleaseOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CompatibleClustersForReleaseWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetCompatibleClustersID(d)) + + if !core.IsNil(compatibleClusters) { + compatibleClustersResult := []map[string]interface{}{} + for _, compatibleClustersItem := range compatibleClusters { + compatibleClustersItemMap, err := DataSourceIbmBackupRecoveryManagerGetCompatibleClustersCompatibleClusterToMap(&compatibleClustersItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read", "compatible_clusters-to-map").GetDiag() + } + compatibleClustersResult = append(compatibleClustersResult, compatibleClustersItemMap) + } + if err = d.Set("compatible_clusters", compatibleClusters); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting compatible_clusters: %s", err), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read", "set-compatible_clusters").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetCompatibleClustersID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetCompatibleClustersID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetCompatibleClustersCompatibleClusterToMap(model *backuprecoveryv1.CompatibleCluster) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + if model.ClusterName != nil { + modelMap["cluster_name"] = *model.ClusterName + } + if model.CurrentVersion != nil { + modelMap["current_version"] = *model.CurrentVersion + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go similarity index 58% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go index c323bc01f9..c194fee10b 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go @@ -16,24 +16,24 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetCompatibleClustersDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetCompatibleClustersDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_compatible_clusters.backup_recovery_manager_sre_get_compatible_clusters_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_compatible_clusters.backup_recovery_manager_get_compatible_clusters_instance", "id"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetCompatibleClustersDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetCompatibleClustersDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_compatible_clusters" "backup_recovery_manager_sre_get_compatible_clusters_instance" { + data "ibm_backup_recovery_manager_get_compatible_clusters" "backup_recovery_manager_get_compatible_clusters_instance" { releaseVersion = "releaseVersion" } `) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go similarity index 84% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go index 1aa3ca77b5..438fc1c5d6 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go @@ -21,9 +21,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlerts() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetManagementAlerts() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetManagementAlertsRead, Schema: map[string]*schema.Schema{ "alert_id_list": &schema.Schema{ @@ -320,15 +320,15 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlerts() *schema.Resource { } } -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetManagementAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - getHeliosAlertsOptions := &backuprecoveryv1.GetHeliosAlertsOptions{} + getManagementAlertsOptions := &backuprecoveryv1.GetManagementAlertsOptions{} if _, ok := d.GetOk("alert_id_list"); ok { var alertIdList []string @@ -336,7 +336,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertIdListItem := v.(string) alertIdList = append(alertIdList, alertIdListItem) } - getHeliosAlertsOptions.SetAlertIdList(alertIdList) + getManagementAlertsOptions.SetAlertIdList(alertIdList) } if _, ok := d.GetOk("alert_state_list"); ok { var alertStateList []string @@ -344,7 +344,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertStateListItem := v.(string) alertStateList = append(alertStateList, alertStateListItem) } - getHeliosAlertsOptions.SetAlertStateList(alertStateList) + getManagementAlertsOptions.SetAlertStateList(alertStateList) } if _, ok := d.GetOk("alert_type_list"); ok { var alertTypeList []int64 @@ -352,7 +352,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertTypeListItem := int64(v.(int)) alertTypeList = append(alertTypeList, alertTypeListItem) } - getHeliosAlertsOptions.SetAlertTypeList(alertTypeList) + getManagementAlertsOptions.SetAlertTypeList(alertTypeList) } if _, ok := d.GetOk("alert_severity_list"); ok { var alertSeverityList []string @@ -360,7 +360,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertSeverityListItem := v.(string) alertSeverityList = append(alertSeverityList, alertSeverityListItem) } - getHeliosAlertsOptions.SetAlertSeverityList(alertSeverityList) + getManagementAlertsOptions.SetAlertSeverityList(alertSeverityList) } if _, ok := d.GetOk("region_ids"); ok { var regionIds []string @@ -368,7 +368,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co regionIdsItem := v.(string) regionIds = append(regionIds, regionIdsItem) } - getHeliosAlertsOptions.SetRegionIds(regionIds) + getManagementAlertsOptions.SetRegionIds(regionIds) } if _, ok := d.GetOk("cluster_identifiers"); ok { var clusterIdentifiers []string @@ -376,16 +376,16 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co clusterIdentifiersItem := v.(string) clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) } - getHeliosAlertsOptions.SetClusterIdentifiers(clusterIdentifiers) + getManagementAlertsOptions.SetClusterIdentifiers(clusterIdentifiers) } if _, ok := d.GetOk("start_date_usecs"); ok { - getHeliosAlertsOptions.SetStartDateUsecs(int64(d.Get("start_date_usecs").(int))) + getManagementAlertsOptions.SetStartDateUsecs(int64(d.Get("start_date_usecs").(int))) } if _, ok := d.GetOk("end_date_usecs"); ok { - getHeliosAlertsOptions.SetEndDateUsecs(int64(d.Get("end_date_usecs").(int))) + getManagementAlertsOptions.SetEndDateUsecs(int64(d.Get("end_date_usecs").(int))) } if _, ok := d.GetOk("max_alerts"); ok { - getHeliosAlertsOptions.SetMaxAlerts(int64(d.Get("max_alerts").(int))) + getManagementAlertsOptions.SetMaxAlerts(int64(d.Get("max_alerts").(int))) } if _, ok := d.GetOk("alert_category_list"); ok { var alertCategoryList []string @@ -393,7 +393,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertCategoryListItem := v.(string) alertCategoryList = append(alertCategoryList, alertCategoryListItem) } - getHeliosAlertsOptions.SetAlertCategoryList(alertCategoryList) + getManagementAlertsOptions.SetAlertCategoryList(alertCategoryList) } if _, ok := d.GetOk("tenant_ids"); ok { var tenantIds []string @@ -401,7 +401,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co tenantIdsItem := v.(string) tenantIds = append(tenantIds, tenantIdsItem) } - getHeliosAlertsOptions.SetTenantIds(tenantIds) + getManagementAlertsOptions.SetTenantIds(tenantIds) } if _, ok := d.GetOk("alert_type_bucket_list"); ok { var alertTypeBucketList []string @@ -409,7 +409,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertTypeBucketListItem := v.(string) alertTypeBucketList = append(alertTypeBucketList, alertTypeBucketListItem) } - getHeliosAlertsOptions.SetAlertTypeBucketList(alertTypeBucketList) + getManagementAlertsOptions.SetAlertTypeBucketList(alertTypeBucketList) } if _, ok := d.GetOk("alert_property_key_list"); ok { var alertPropertyKeyList []string @@ -417,7 +417,7 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertPropertyKeyListItem := v.(string) alertPropertyKeyList = append(alertPropertyKeyList, alertPropertyKeyListItem) } - getHeliosAlertsOptions.SetAlertPropertyKeyList(alertPropertyKeyList) + getManagementAlertsOptions.SetAlertPropertyKeyList(alertPropertyKeyList) } if _, ok := d.GetOk("alert_property_value_list"); ok { var alertPropertyValueList []string @@ -425,10 +425,10 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co alertPropertyValueListItem := v.(string) alertPropertyValueList = append(alertPropertyValueList, alertPropertyValueListItem) } - getHeliosAlertsOptions.SetAlertPropertyValueList(alertPropertyValueList) + getManagementAlertsOptions.SetAlertPropertyValueList(alertPropertyValueList) } if _, ok := d.GetOk("alert_name"); ok { - getHeliosAlertsOptions.SetAlertName(d.Get("alert_name").(string)) + getManagementAlertsOptions.SetAlertName(d.Get("alert_name").(string)) } if _, ok := d.GetOk("service_instance_ids"); ok { var serviceInstanceIds []string @@ -436,39 +436,39 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsRead(context context.Co serviceInstanceIdsItem := v.(string) serviceInstanceIds = append(serviceInstanceIds, serviceInstanceIdsItem) } - getHeliosAlertsOptions.SetServiceInstanceIds(serviceInstanceIds) + getManagementAlertsOptions.SetServiceInstanceIds(serviceInstanceIds) } - alertsList, _, err := heliosSreApiClient.GetHeliosAlertsWithContext(context, getHeliosAlertsOptions) + alertsList, _, err := managementSreApiClient.GetManagementAlertsWithContext(context, getManagementAlertsOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetManagementAlertsID(d)) - alertsListItems := []map[string]interface{}{} + alertsListResult := []map[string]interface{}{} for _, alertsListItem := range alertsList.AlertsList { - alertsListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(&alertsListItem) // #nosec G601 + alertsListItemMap, err := DataSourceIbmBackupRecoveryManagerGetManagementAlertsAlertToMap(&alertsListItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "alerts_list-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read", "alerts_list-to-map").GetDiag() } - alertsListItems = append(alertsListItems, alertsListItemMap) + alertsListResult = append(alertsListResult, alertsListItemMap) } if err = d.Set("alerts_list", alertsList); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_list: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts", "read", "set-alerts_list").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_list: %s", err), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read", "set-alerts_list").GetDiag() } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetManagementAlertsID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetManagementAlertsID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backuprecoveryv1.Alert) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsAlertToMap(model *backuprecoveryv1.Alert) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertCategory != nil { modelMap["alert_category"] = *model.AlertCategory @@ -477,7 +477,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backu modelMap["alert_code"] = *model.AlertCode } if model.AlertDocument != nil { - alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertDocumentToMap(model.AlertDocument) + alertDocumentMap, err := DataSourceIbmBackupRecoveryManagerGetManagementAlertsAlertDocumentToMap(model.AlertDocument) if err != nil { return modelMap, err } @@ -516,7 +516,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backu if model.PropertyList != nil { propertyList := []map[string]interface{}{} for _, propertyListItem := range model.PropertyList { - propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsLabelToMap(&propertyListItem) // #nosec G601 + propertyListItemMap, err := DataSourceIbmBackupRecoveryManagerGetManagementAlertsLabelToMap(&propertyListItem) // #nosec G601 if err != nil { return modelMap, err } @@ -539,7 +539,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backu if model.Vaults != nil { vaults := []map[string]interface{}{} for _, vaultsItem := range model.Vaults { - vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsVaultToMap(&vaultsItem) // #nosec G601 + vaultsItemMap, err := DataSourceIbmBackupRecoveryManagerGetManagementAlertsVaultToMap(&vaultsItem) // #nosec G601 if err != nil { return modelMap, err } @@ -550,7 +550,7 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertToMap(model *backu return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsAlertDocumentToMap(model *backuprecoveryv1.AlertDocument) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.AlertCause != nil { modelMap["alert_cause"] = *model.AlertCause @@ -570,14 +570,14 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsAlertDocumentToMap(mode return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsLabelToMap(model *backuprecoveryv1.Label) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) modelMap["key"] = *model.Key modelMap["value"] = *model.Value return modelMap, nil } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsVaultToMap(model *backuprecoveryv1.Vault) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.GlobalVaultID != nil { modelMap["global_vault_id"] = *model.GlobalVaultID diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go similarity index 71% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go index ff6e2daab1..d7259e2e84 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go @@ -22,9 +22,9 @@ import ( "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" ) -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummary() *schema.Resource { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummary() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead, + ReadContext: dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryRead, Schema: map[string]*schema.Schema{ "cluster_identifiers": &schema.Schema{ @@ -96,15 +96,15 @@ func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummary() *schema.Resou } } -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() +func dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - getHeliosAlertsSummaryOptions := &backuprecoveryv1.GetHeliosAlertsSummaryOptions{} + getManagementAlertsSummaryOptions := &backuprecoveryv1.GetManagementAlertsSummaryOptions{} if _, ok := d.GetOk("cluster_identifiers"); ok { var clusterIdentifiers []string @@ -112,13 +112,13 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead(context con clusterIdentifiersItem := v.(string) clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) } - getHeliosAlertsSummaryOptions.SetClusterIdentifiers(clusterIdentifiers) + getManagementAlertsSummaryOptions.SetClusterIdentifiers(clusterIdentifiers) } if _, ok := d.GetOk("start_time_usecs"); ok { - getHeliosAlertsSummaryOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) + getManagementAlertsSummaryOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) } if _, ok := d.GetOk("end_time_usecs"); ok { - getHeliosAlertsSummaryOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) + getManagementAlertsSummaryOptions.SetEndTimeUsecs(int64(d.Get("end_time_usecs").(int))) } if _, ok := d.GetOk("states_list"); ok { var statesList []string @@ -126,41 +126,41 @@ func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryRead(context con statesListItem := v.(string) statesList = append(statesList, statesListItem) } - getHeliosAlertsSummaryOptions.SetStatesList(statesList) + getManagementAlertsSummaryOptions.SetStatesList(statesList) } - alertsHeliosSummaryResponse, _, err := heliosSreApiClient.GetHeliosAlertsSummaryWithContext(context, getHeliosAlertsSummaryOptions) + alertsManagementSummaryResponse, _, err := managementSreApiClient.GetManagementAlertsSummaryWithContext(context, getManagementAlertsSummaryOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetHeliosAlertsSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID(d)) + d.SetId(dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryID(d)) - if !core.IsNil(alertsHeliosSummaryResponse.AlertsSummary) { + if !core.IsNil(alertsManagementSummaryResponse.AlertsSummary) { alertsSummary := []map[string]interface{}{} - for _, alertsSummaryItem := range alertsHeliosSummaryResponse.AlertsSummary { - alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 + for _, alertsSummaryItem := range alertsManagementSummaryResponse.AlertsSummary { + alertsSummaryItemMap, err := DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryAlertGroupSummaryToMap(&alertsSummaryItem) // #nosec G601 if err != nil { - return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "alerts_summary-to-map").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read", "alerts_summary-to-map").GetDiag() } alertsSummary = append(alertsSummary, alertsSummaryItemMap) } if err = d.Set("alerts_summary", alertsSummary); err != nil { - return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_sre_get_helios_alerts_summary", "read", "set-alerts_summary").GetDiag() + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_summary: %s", err), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read", "set-alerts_summary").GetDiag() } } return nil } -// dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryID(d *schema.ResourceData) string { +// dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func DataSourceIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { +func DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryAlertGroupSummaryToMap(model *backuprecoveryv1.AlertGroupSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Category != nil { modelMap["category"] = *model.Category diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go similarity index 61% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go index 4596b3f7cc..01d8daf234 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_summary_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go @@ -16,24 +16,24 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetManagementAlertsSummaryDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetManagementAlertsSummaryDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts_summary.backup_recovery_manager_sre_get_helios_alerts_summary_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_management_alerts_summary.backup_recovery_manager_get_management_alerts_summary_instance", "id"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsSummaryDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetManagementAlertsSummaryDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_helios_alerts_summary" "backup_recovery_manager_sre_get_helios_alerts_summary_instance" { + data "ibm_backup_recovery_manager_get_management_alerts_summary" "backup_recovery_manager_get_management_alerts_summary_instance" { clusterIdentifiers = [ "clusterIdentifiers" ] startTimeUsecs = 1 endTimeUsecs = 1 diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go similarity index 69% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go index 82c8eeccac..554b28c59e 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_helios_alerts_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go @@ -16,25 +16,25 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetManagementAlertsDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetManagementAlertsDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts.backup_recovery_manager_sre_get_helios_alerts_instance", "id"), - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_helios_alerts.backup_recovery_manager_sre_get_helios_alerts_instance", "alerts_list.#"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_management_alerts.backup_recovery_manager_get_management_alerts_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_management_alerts.backup_recovery_manager_get_management_alerts_instance", "alerts_list.#"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetHeliosAlertsDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetManagementAlertsDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_helios_alerts" "backup_recovery_manager_sre_get_helios_alerts_instance" { + data "ibm_backup_recovery_manager_get_management_alerts" "backup_recovery_manager_get_management_alerts_instance" { alertIdList = [ "alertIdList" ] alertStateList = [ "alertStateList" ] alertTypeList = [ 1 ] diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go new file mode 100644 index 0000000000..fc832c226e --- /dev/null +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go @@ -0,0 +1,233 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func DataSourceIbmBackupRecoveryManagerGetUpgradesInfo() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmBackupRecoveryManagerGetUpgradesInfoRead, + + Schema: map[string]*schema.Schema{ + "cluster_identifiers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Fetch upgrade progress details for a list of cluster identifiers in format clusterId:clusterIncarnationId.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "upgrades_info": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster's id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Specifies cluster's incarnation id.", + }, + "patch_software_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Patch software version against which these logs are generated. This is specified for Patch type only.", + }, + "software_version": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Upgrade software version against which these logs are generated.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Specifies the type of upgrade on a cluster.", + }, + "upgrade_logs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Upgrade logs per node.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "logs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Upgrade logs for the node.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "log": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "One log statement of the complete logs.", + }, + "time_stamp": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + Description: "Time at which this log got generated.", + }, + }, + }, + }, + "node_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Id of the node.", + }, + }, + }, + }, + "upgrade_percent_complete": &schema.Schema{ + Type: schema.TypeFloat, + Computed: true, + Description: "Upgrade percentage complete so far.", + }, + "upgrade_status": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Upgrade status.", + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmBackupRecoveryManagerGetUpgradesInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + clustersUpgradesInfoOptions := &backuprecoveryv1.ClustersUpgradesInfoOptions{} + + if _, ok := d.GetOk("cluster_identifiers"); ok { + var clusterIdentifiers []string + for _, v := range d.Get("cluster_identifiers").([]interface{}) { + clusterIdentifiersItem := v.(string) + clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) + } + clustersUpgradesInfoOptions.SetClusterIdentifiers(clusterIdentifiers) + } + + upgradesInfo, _, err := managementSreApiClient.ClustersUpgradesInfoWithContext(context, clustersUpgradesInfoOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ClustersUpgradesInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmBackupRecoveryManagerGetUpgradesInfoID(d)) + + if !core.IsNil(upgradesInfo) { + upgradesInfoResult := []map[string]interface{}{} + for _, upgradesInfoItem := range upgradesInfo { + upgradesInfoItemMap, err := DataSourceIbmBackupRecoveryManagerGetUpgradesInfoUpgradeInfoToMap(&upgradesInfoItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read", "upgrades_info-to-map").GetDiag() + } + upgradesInfoResult = append(upgradesInfoResult, upgradesInfoItemMap) + } + if err = d.Set("upgrades_info", upgradesInfo); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting upgrades_info: %s", err), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read", "set-upgrades_info").GetDiag() + } + } + + return nil +} + +// dataSourceIbmBackupRecoveryManagerGetUpgradesInfoID returns a reasonable ID for the list. +func dataSourceIbmBackupRecoveryManagerGetUpgradesInfoID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func DataSourceIbmBackupRecoveryManagerGetUpgradesInfoUpgradeInfoToMap(model *backuprecoveryv1.UpgradeInfo) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + if model.PatchSoftwareVersion != nil { + modelMap["patch_software_version"] = *model.PatchSoftwareVersion + } + if model.SoftwareVersion != nil { + modelMap["software_version"] = *model.SoftwareVersion + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.UpgradeLogs != nil { + upgradeLogs := []map[string]interface{}{} + for _, upgradeLogsItem := range model.UpgradeLogs { + upgradeLogsItemMap, err := DataSourceIbmBackupRecoveryManagerGetUpgradesInfoNodeUpgradeLogToMap(&upgradeLogsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + upgradeLogs = append(upgradeLogs, upgradeLogsItemMap) + } + modelMap["upgrade_logs"] = upgradeLogs + } + if model.UpgradePercentComplete != nil { + modelMap["upgrade_percent_complete"] = *model.UpgradePercentComplete + } + if model.UpgradeStatus != nil { + modelMap["upgrade_status"] = *model.UpgradeStatus + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetUpgradesInfoNodeUpgradeLogToMap(model *backuprecoveryv1.NodeUpgradeLog) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Logs != nil { + logs := []map[string]interface{}{} + for _, logsItem := range model.Logs { + logsItemMap, err := DataSourceIbmBackupRecoveryManagerGetUpgradesInfoUpgradeLogToMap(&logsItem) // #nosec G601 + if err != nil { + return modelMap, err + } + logs = append(logs, logsItemMap) + } + modelMap["logs"] = logs + } + if model.NodeID != nil { + modelMap["node_id"] = *model.NodeID + } + return modelMap, nil +} + +func DataSourceIbmBackupRecoveryManagerGetUpgradesInfoUpgradeLogToMap(model *backuprecoveryv1.UpgradeLog) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Log != nil { + modelMap["log"] = *model.Log + } + if model.TimeStamp != nil { + modelMap["time_stamp"] = flex.IntValue(model.TimeStamp) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go similarity index 61% rename from ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go rename to ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go index b9d25ea5c0..9368535dcc 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go @@ -16,24 +16,24 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" ) -func TestAccIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceBasic(t *testing.T) { +func TestAccIbmBackupRecoveryManagerGetUpgradesInfoDataSourceBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceConfigBasic(), + Config: testAccCheckIbmBackupRecoveryManagerGetUpgradesInfoDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_sre_get_upgrades_info.backup_recovery_manager_sre_get_upgrades_info_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_backup_recovery_manager_get_upgrades_info.backup_recovery_manager_get_upgrades_info_instance", "id"), ), }, }, }) } -func testAccCheckIbmBackupRecoveryManagerSreGetUpgradesInfoDataSourceConfigBasic() string { +func testAccCheckIbmBackupRecoveryManagerGetUpgradesInfoDataSourceConfigBasic() string { return fmt.Sprintf(` - data "ibm_backup_recovery_manager_sre_get_upgrades_info" "backup_recovery_manager_sre_get_upgrades_info_instance" { + data "ibm_backup_recovery_manager_get_upgrades_info" "backup_recovery_manager_get_upgrades_info_instance" { clusterIdentifiers = [ "clusterIdentifiers" ] } `) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go deleted file mode 100644 index 3e2789099d..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_compatible_clusters.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerSreGetCompatibleClusters() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersRead, - - Schema: map[string]*schema.Schema{ - "release_version": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_compatible_clusters", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - compatibleClustersForReleaseOptions := &backuprecoveryv1.CompatibleClustersForReleaseOptions{} - - if _, ok := d.GetOk("release_version"); ok { - compatibleClustersForReleaseOptions.SetReleaseVersion(d.Get("release_version").(string)) - } - - _, _, err = heliosSreApiClient.CompatibleClustersForReleaseWithContext(context, compatibleClustersForReleaseOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CompatibleClustersForReleaseWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_compatible_clusters", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID(d)) - - return nil -} - -// dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetCompatibleClustersID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go deleted file mode 100644 index 37a5df675d..0000000000 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_sre_get_upgrades_info.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright IBM Corp. 2025 All Rights Reserved. -// Licensed under the Mozilla Public License v2.0 - -/* - * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 - */ - -package backuprecovery - -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.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" -) - -func DataSourceIbmBackupRecoveryManagerSreGetUpgradesInfo() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoRead, - - Schema: map[string]*schema.Schema{ - "cluster_identifiers": &schema.Schema{ - Type: schema.TypeList, - Optional: true, - Description: "Fetch upgrade progress details for a list of cluster identifiers in format clusterId:clusterIncarnationId.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - } -} - -func dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - heliosSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerSreV1() - if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_sre_get_upgrades_info", "read", "initialize-client") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - clustersUpgradesInfoOptions := &backuprecoveryv1.ClustersUpgradesInfoOptions{} - - if _, ok := d.GetOk("cluster_identifiers"); ok { - var clusterIdentifiers []string - for _, v := range d.Get("cluster_identifiers").([]interface{}) { - clusterIdentifiersItem := v.(string) - clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) - } - clustersUpgradesInfoOptions.SetClusterIdentifiers(clusterIdentifiers) - } - - _, _, err = heliosSreApiClient.ClustersUpgradesInfoWithContext(context, clustersUpgradesInfoOptions) - if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ClustersUpgradesInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_sre_get_upgrades_info", "read") - log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) - return tfErr.GetDiag() - } - - d.SetId(dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID(d)) - - return nil -} - -// dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID returns a reasonable ID for the list. -func dataSourceIbmBackupRecoveryManagerSreGetUpgradesInfoID(d *schema.ResourceData) string { - return time.Now().UTC().String() -} diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go new file mode 100644 index 0000000000..eb2dd33cf1 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go @@ -0,0 +1,236 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func ResourceIbmBackupRecoveryManagerCreateClusterUpgrades() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesCreate, + ReadContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesRead, + DeleteContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesDelete, + Importer: &schema.ResourceImporter{}, + + Schema: map[string]*schema.Schema{ + "upgrade_response_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies a list of disks to exclude from being protected. This is only applicable to VM objects.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "error_message": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Specifies error message if failed to schedule upgrade.", + }, + "is_upgrade_scheduling_successful": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Specifies if upgrade scheduling was successsful.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + }, + }, + }, + }, + } +} + +func resourceIbmBackupRecoveryManagerCreateClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "create", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + createClustersUpgradesOptions := &backuprecoveryv1.CreateClustersUpgradesOptions{} + + if _, ok := d.GetOk("auth_headers"); ok { + var authHeaders []backuprecoveryv1.AuthHeaderForClusterUpgrade + for _, v := range d.Get("auth_headers").([]interface{}) { + value := v.(map[string]interface{}) + authHeadersItem, err := ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToAuthHeaderForClusterUpgrade(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "create", "parse-auth_headers").GetDiag() + } + authHeaders = append(authHeaders, *authHeadersItem) + } + createClustersUpgradesOptions.SetAuthHeaders(authHeaders) + } + if _, ok := d.GetOk("clusters"); ok { + var clusters []backuprecoveryv1.Upgrade + for _, v := range d.Get("clusters").([]interface{}) { + value := v.(map[string]interface{}) + clustersItem, err := ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToUpgrade(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "create", "parse-clusters").GetDiag() + } + clusters = append(clusters, *clustersItem) + } + createClustersUpgradesOptions.SetClusters(clusters) + } + if _, ok := d.GetOk("interval_for_rolling_upgrade_in_hours"); ok { + createClustersUpgradesOptions.SetIntervalForRollingUpgradeInHours(int64(d.Get("interval_for_rolling_upgrade_in_hours").(int))) + } + if _, ok := d.GetOk("package_url"); ok { + createClustersUpgradesOptions.SetPackageURL(d.Get("package_url").(string)) + } + if _, ok := d.GetOk("patch_upgrade_params"); ok { + patchUpgradeParamsModel, err := ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToPatchUpgradeParams(d.Get("patch_upgrade_params.0").(map[string]interface{})) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "create", "parse-patch_upgrade_params").GetDiag() + } + createClustersUpgradesOptions.SetPatchUpgradeParams(patchUpgradeParamsModel) + } + if _, ok := d.GetOk("target_version"); ok { + createClustersUpgradesOptions.SetTargetVersion(d.Get("target_version").(string)) + } + if _, ok := d.GetOk("time_stamp_to_upgrade_at_msecs"); ok { + createClustersUpgradesOptions.SetTimeStampToUpgradeAtMsecs(int64(d.Get("time_stamp_to_upgrade_at_msecs").(int))) + } + if _, ok := d.GetOk("type"); ok { + createClustersUpgradesOptions.SetType(d.Get("type").(string)) + } + + upgradesResponse, _, err := managementSreApiClient.CreateClustersUpgradesWithContext(context, createClustersUpgradesOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_create_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(resourceIbmBackupRecoveryManagerCreateClusterUpgradesID(d)) + + if !core.IsNil(upgradesResponse) { + upgradeResponseListResult := []map[string]interface{}{} + for _, upgradeResponseListItem := range upgradesResponse { + upgradeResponseListItemMap, err := ResourceIbmBackupRecoveryManagerCreateClusterUpgradesUpgradeResponseToMap(&upgradeResponseListItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "read", "upgrade_response_list-to-map").GetDiag() + } + upgradeResponseListResult = append(upgradeResponseListResult, upgradeResponseListItemMap) + } + if err = d.Set("upgrade_response_list", upgradeResponseListResult); err != nil { + err = fmt.Errorf("Error setting upgrade_response_list: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "read", "set-upgrade_response_list").GetDiag() + } + } + + return resourceIbmBackupRecoveryManagerCreateClusterUpgradesRead(context, d, meta) +} + +func ResourceIbmBackupRecoveryManagerCreateClusterUpgradesUpgradeResponseToMap(model *backuprecoveryv1.UpgradeResponse) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ErrorMessage != nil { + modelMap["error_message"] = *model.ErrorMessage + } + if model.IsUpgradeSchedulingSuccessful != nil { + modelMap["is_upgrade_scheduling_successful"] = *model.IsUpgradeSchedulingSuccessful + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + return modelMap, nil +} + +func resourceIbmBackupRecoveryManagerCreateClusterUpgradesID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func resourceIbmBackupRecoveryManagerCreateClusterUpgradesRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + return nil +} + +func resourceIbmBackupRecoveryManagerCreateClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Delete Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + +func ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToAuthHeaderForClusterUpgrade(modelMap map[string]interface{}) (*backuprecoveryv1.AuthHeaderForClusterUpgrade, error) { + model := &backuprecoveryv1.AuthHeaderForClusterUpgrade{} + model.Key = core.StringPtr(modelMap["key"].(string)) + model.Value = core.StringPtr(modelMap["value"].(string)) + return model, nil +} + +func ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToUpgrade(modelMap map[string]interface{}) (*backuprecoveryv1.Upgrade, error) { + model := &backuprecoveryv1.Upgrade{} + if modelMap["cluster_id"] != nil { + model.ClusterID = core.Int64Ptr(int64(modelMap["cluster_id"].(int))) + } + if modelMap["cluster_incarnation_id"] != nil { + model.ClusterIncarnationID = core.Int64Ptr(int64(modelMap["cluster_incarnation_id"].(int))) + } + if modelMap["current_version"] != nil && modelMap["current_version"].(string) != "" { + model.CurrentVersion = core.StringPtr(modelMap["current_version"].(string)) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToPatchUpgradeParams(modelMap map[string]interface{}) (*backuprecoveryv1.PatchUpgradeParams, error) { + model := &backuprecoveryv1.PatchUpgradeParams{} + if modelMap["auth_headers"] != nil { + authHeaders := []backuprecoveryv1.AuthHeaderForClusterUpgrade{} + for _, authHeadersItem := range modelMap["auth_headers"].([]interface{}) { + authHeadersItemModel, err := ResourceIbmBackupRecoveryManagerCreateClusterUpgradesMapToAuthHeaderForClusterUpgrade(authHeadersItem.(map[string]interface{})) + if err != nil { + return model, err + } + authHeaders = append(authHeaders, *authHeadersItemModel) + } + model.AuthHeaders = authHeaders + } + if modelMap["ignore_pre_checks_failure"] != nil { + model.IgnorePreChecksFailure = core.BoolPtr(modelMap["ignore_pre_checks_failure"].(bool)) + } + if modelMap["package_url"] != nil && modelMap["package_url"].(string) != "" { + model.PackageURL = core.StringPtr(modelMap["package_url"].(string)) + } + if modelMap["target_version"] != nil && modelMap["target_version"].(string) != "" { + model.TargetVersion = core.StringPtr(modelMap["target_version"].(string)) + } + return model, nil +} diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go new file mode 100644 index 0000000000..43f8584121 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go @@ -0,0 +1,39 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerCreateClusterUpgradesBasic(t *testing.T) { + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerCreateClusterUpgradesConfigBasic(), + Check: resource.ComposeAggregateTestCheckFunc(), + }, + resource.TestStep{ + ResourceName: "ibm_backup_recovery_manager_create_cluster_upgrades.backup_recovery_manager_create_cluster_upgrades", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerCreateClusterUpgradesConfigBasic() string { + return fmt.Sprintf(` + resource "ibm_backup_recovery_manager_create_cluster_upgrades" "backup_recovery_manager_create_cluster_upgrades_instance" { + } + `) +} From ab89e8339cf0c30a51f17b406d3223f677584bd3 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Fri, 31 Oct 2025 17:30:03 +0530 Subject: [PATCH 07/15] update docs --- ..._recovery_manager_get_alerts.html.markdown | 100 ++++++++++++++++++ ...anager_get_alerts_resolution.html.markdown | 53 ++++++++++ ...ery_manager_get_alerts_stats.html.markdown | 98 +++++++++++++++++ ...y_manager_get_alerts_summary.html.markdown | 46 ++++++++ ...ery_manager_get_cluster_info.html.markdown | 85 +++++++++++++++ ...ager_get_compatible_clusters.html.markdown | 37 +++++++ ...anager_get_management_alerts.html.markdown | 88 +++++++++++++++ ...et_management_alerts_summary.html.markdown | 44 ++++++++ ...ry_manager_get_upgrades_info.html.markdown | 49 +++++++++ ...ager_create_cluster_upgrades.html.markdown | 41 +++++++ 10 files changed, 641 insertions(+) create mode 100644 website/docs/d/backup_recovery_manager_get_alerts.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_alerts_resolution.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_alerts_stats.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_alerts_summary.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_cluster_info.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_compatible_clusters.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_management_alerts.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_management_alerts_summary.html.markdown create mode 100644 website/docs/d/backup_recovery_manager_get_upgrades_info.html.markdown create mode 100644 website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown diff --git a/website/docs/d/backup_recovery_manager_get_alerts.html.markdown b/website/docs/d/backup_recovery_manager_get_alerts.html.markdown new file mode 100644 index 0000000000..b1316d8f92 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_alerts.html.markdown @@ -0,0 +1,100 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_alerts" +description: |- + Get information about backup_recovery_manager_get_alerts +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_alerts + +Provides a read-only data source to retrieve information about backup_recovery_manager_get_alerts. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_alerts" "backup_recovery_manager_get_alerts" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `alert_categories` - (Optional, List) Filter by list of alert categories. + * Constraints: Allowable list items are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. +* `alert_ids` - (Optional, List) Filter by list of alert ids. +* `alert_name` - (Optional, String) Specifies name of alert to filter alerts by. +* `alert_severities` - (Optional, List) Filter by list of alert severity types. + * Constraints: Allowable list items are: `kCritical`, `kWarning`, `kInfo`. +* `alert_states` - (Optional, List) Filter by list of alert states. + * Constraints: Allowable list items are: `kResolved`, `kOpen`, `kNote`, `kSuppressed`. +* `alert_type_buckets` - (Optional, List) Filter by list of alert type buckets. + * Constraints: Allowable list items are: `kHardware`, `kSoftware`, `kDataService`, `kMaintenance`. +* `alert_types` - (Optional, List) Filter by list of alert types. +* `all_under_hierarchy` - (Optional, Boolean) Filter by objects of all the tenants under the hierarchy of the logged in user's organization. +* `end_time_usecs` - (Optional, Integer) Specifies end time Unix epoch time in microseconds to filter alerts by. +* `max_alerts` - (Optional, Integer) Specifies maximum number of alerts to return.The default value is 100 and maximum allowed value is 1000. +* `property_key` - (Optional, String) Specifies name of the property to filter alerts by. +* `property_value` - (Optional, String) Specifies value of the property to filter alerts by. +* `resolution_ids` - (Optional, List) Specifies alert resolution ids to filter alerts by. +* `start_time_usecs` - (Optional, Integer) Specifies start time Unix epoch time in microseconds to filter alerts by. +* `tenant_ids` - (Optional, List) Filter by tenant ids. +* `x_scope_identifier` - (Optional, String) This field uniquely represents a service instance. Please specify the values as "service-instance-id: ". + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_alerts. +* `alerts` - (List) Specifies the list of alerts. +Nested schema for **alerts**: + * `alert_category` - (String) Specifies the alert category. + * Constraints: Allowable values are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. + * `alert_code` - (String) Specifies a unique code that categorizes the Alert, for example: CE00200014, where CE stands for IBM Error, the alert state next 3 digits is the id of the Alert Category (e.g. 002 for 'kNode') and the last 5 digits is the id of the Alert Type (e.g. 00014 for 'kNodeHighCpuUsage'). + * `alert_document` - (List) Specifies the fields of alert document. + Nested schema for **alert_document**: + * `alert_cause` - (String) Specifies the cause of alert. + * `alert_description` - (String) Specifies the description of alert. + * `alert_help_text` - (String) Specifies the help text for alert. + * `alert_name` - (String) Specifies the name of alert. + * `alert_summary` - (String) Short description for the alert. + * `alert_state` - (String) Specifies the alert state. + * Constraints: Allowable values are: `kResolved`, `kOpen`, `kNote`, `kSuppressed`. + * `alert_type` - (Integer) Specifies the alert type. + * `alert_type_bucket` - (String) Specifies the Alert type bucket. + * Constraints: Allowable values are: `kHardware`, `kSoftware`, `kDataService`, `kMaintenance`. + * `cluster_id` - (Integer) Id of the cluster which the alert is associated. + * `cluster_name` - (String) Specifies the name of cluster which alert is raised from. + * `dedup_count` - (Integer) Specifies the dedup count of alert. + * `dedup_timestamps` - (List) Specifies Unix epoch Timestamps (in microseconds) for the last 25 occurrences of duplicated Alerts that are stored with the original/primary Alert. Alerts are grouped into one Alert if the Alerts are the same type, are reporting on the same Object and occur within one hour. 'dedupCount' always reports the total count of duplicated Alerts even if there are more than 25 occurrences. For example, if there are 100 occurrences of this Alert, dedupTimestamps stores the timestamps of the last 25 occurrences and dedupCount equals 100. + * `event_source` - (String) Specifies source where the event occurred. + * `first_timestamp_usecs` - (Integer) Specifies Unix epoch Timestamp (in microseconds) of the first occurrence of the Alert. + * `id` - (String) Specifies unique id of the alert. + * `label_ids` - (List) Specifies the labels for which this alert has been raised. + * `latest_timestamp_usecs` - (Integer) Specifies Unix epoch Timestamp (in microseconds) of the most recent occurrence of the Alert. + * `property_list` - (List) List of property key and values associated with alert. + Nested schema for **property_list**: + * `key` - (String) Key of the Label. + * `value` - (String) Value of the Label, multiple values should be joined by '|'. + * `region_id` - (String) Specifies the region id of the alert. + * `resolution_details` - (List) Specifies information about the Alert Resolution. + Nested schema for **resolution_details**: + * `resolution_details` - (String) Specifies detailed notes about the Resolution. + * `resolution_id` - (Integer) Specifies the unique resolution id assigned in management console. + * `resolution_summary` - (String) Specifies short description about the Resolution. + * `timestamp_usecs` - (Integer) Specifies unix epoch timestamp (in microseconds) when the Alert was resolved. + * `user_name` - (String) Specifies name of the IBM Cluster user who resolved the Alerts. + * `resolution_id_string` - (String) Resolution Id String. + * `resolved_timestamp_usecs` - (Integer) Specifies Unix epoch Timestamps in microseconds when alert is resolved. + * `severity` - (String) Specifies the alert severity. + * Constraints: Allowable values are: `kCritical`, `kWarning`, `kInfo`. + * `suppression_id` - (Integer) Specifies unique id generated when the Alert is suppressed by the admin. + * `tenant_ids` - (List) Specifies the tenants for which this alert has been raised. + * `vaults` - (List) Specifies information about vaults where source object associated with alert is vaulted. This could be empty if alert is not related to any source object or it is not vaulted. + Nested schema for **vaults**: + * `global_vault_id` - (String) Specifies Global vault id. + * `region_id` - (String) Specifies id of region where vault resides. + * `region_name` - (String) Specifies name of region where vault resides. + * `vault_name` - (String) Specifies name of vault. + diff --git a/website/docs/d/backup_recovery_manager_get_alerts_resolution.html.markdown b/website/docs/d/backup_recovery_manager_get_alerts_resolution.html.markdown new file mode 100644 index 0000000000..609f23067d --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_alerts_resolution.html.markdown @@ -0,0 +1,53 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_alerts_resolution" +description: |- + Get information about backup_recovery_manager_get_alerts_resolution +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_alerts_resolution + +Provides a read-only data source to retrieve information about a backup_recovery_manager_get_alerts_resolution. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_alerts_resolution" "backup_recovery_manager_get_alerts_resolution" { + max_resolutions = 14 +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `max_resolutions` - (Required, Integer) Specifies the max number of Resolutions to be returned, from the latest created to the earliest created. +* `resolution_id` - (Optional, String) Specifies Alert Resolution id to query. +* `resolution_name` - (Optional, String) Specifies Alert Resolution Name to query. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_alerts_resolution. +* `alert_resolutions_list` - (List) List of alert resolutions. +Nested schema for **alert_resolutions_list**: + * `account_id` - (String) Specifies account id of the user who create the resolution. + * `created_time_usecs` - (Integer) Specifies unix epoch timestamp (in microseconds) when the resolution is created. + * `description` - (String) Specifies the full description about the Resolution. + * `external_key` - (String) Specifies the external key assigned outside of management console, with the form of "clusterid:resolutionid". + * `resolution_id` - (String) Specifies the unique reslution id assigned in management console. + * `resolution_name` - (String) Specifies the unique name of the resolution. + * `resolved_alerts` - (List) + Nested schema for **resolved_alerts**: + * `alert_id` - (Integer) Id of the alert. + * `alert_id_str` - (String) Alert Id with string format. + * `alert_name` - (String) Name of the alert being resolved. + * `cluster_id` - (Integer) Id of the cluster which the alert is associated. + * `first_timestamp_usecs` - (Integer) First occurrence of the alert. + * `resolved_time_usec` - (Integer) + * `service_instance_id` - (String) Id of the service instance which the alert is associated. + * `silence_minutes` - (Integer) Specifies the time duration (in minutes) for silencing alerts. If unspecified or set zero, a silence rule will be created with default expiry time. No silence rule will be created if value < 0. + * `tenant_id` - (String) Specifies tenant id of the user who create the resolution. + diff --git a/website/docs/d/backup_recovery_manager_get_alerts_stats.html.markdown b/website/docs/d/backup_recovery_manager_get_alerts_stats.html.markdown new file mode 100644 index 0000000000..77d818d175 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_alerts_stats.html.markdown @@ -0,0 +1,98 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_alerts_stats" +description: |- + Get information about Active Alerts stats response. +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_alerts_stats + +Provides a read-only data source to retrieve information about an Active Alerts stats response.. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_alerts_stats" "backup_recovery_manager_get_alerts_stats" { + end_time_usecs = 12 + start_time_usecs = 14 +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `alert_source` - (Optional, String) Specifies a list of alert origination source. If not specified, all alerts from all the sources are considered in the response. + * Constraints: Allowable values are: `kCluster`, `kHelios`. +* `cluster_ids` - (Optional, List) Specifies the list of cluster IDs. +* `end_time_usecs` - (Required, Integer) Specifies the end time Unix time epoch in microseconds to which the active alerts stats are computed. +* `exclude_stats_by_cluster` - (Optional, Boolean) Specifies if stats of active alerts per cluster needs to be excluded. If set to false (default value), stats of active alerts per cluster is included in the response. If set to true, only aggregated stats summary will be present in the response. +* `region_ids` - (Optional, List) Filter by a list of region ids. +* `service_instance_ids` - (Optional, List) Specifies list of service instance ids to filter alert stats by. +* `start_time_usecs` - (Required, Integer) Specifies the start time Unix time epoch in microseconds from which the active alerts stats are computed. +* `tenant_ids` - (Optional, List) Specifies a list of tenants. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the Active Alerts stats response.. +* `aggregated_alerts_stats` - (List) Specifies the active alert statistics details. +Nested schema for **aggregated_alerts_stats**: + * `num_critical_alerts` - (Integer) Specifies the count of active critical Alerts excluding alerts that belong to other bucket. + * `num_critical_alerts_categories` - (Integer) Specifies the count of active critical alerts categories. + * `num_data_service_alerts` - (Integer) Specifies the count of active service Alerts. + * `num_data_service_critical_alerts` - (Integer) Specifies the count of active service critical Alerts. + * `num_data_service_info_alerts` - (Integer) Specifies the count of active service info Alerts. + * `num_data_service_warning_alerts` - (Integer) Specifies the count of active service warning Alerts. + * `num_hardware_alerts` - (Integer) Specifies the count of active hardware Alerts. + * `num_hardware_critical_alerts` - (Integer) Specifies the count of active hardware critical Alerts. + * `num_hardware_info_alerts` - (Integer) Specifies the count of active hardware info Alerts. + * `num_hardware_warning_alerts` - (Integer) Specifies the count of active hardware warning Alerts. + * `num_info_alerts` - (Integer) Specifies the count of active info Alerts excluding alerts that belong to other bucket. + * `num_info_alerts_categories` - (Integer) Specifies the count of active info alerts categories. + * `num_maintenance_alerts` - (Integer) Specifies the count of active Alerts of maintenance bucket. + * `num_maintenance_critical_alerts` - (Integer) Specifies the count of active other critical Alerts. + * `num_maintenance_info_alerts` - (Integer) Specifies the count of active other info Alerts. + * `num_maintenance_warning_alerts` - (Integer) Specifies the count of active other warning Alerts. + * `num_software_alerts` - (Integer) Specifies the count of active software Alerts. + * `num_software_critical_alerts` - (Integer) Specifies the count of active software critical Alerts. + * `num_software_info_alerts` - (Integer) Specifies the count of active software info Alerts. + * `num_software_warning_alerts` - (Integer) Specifies the count of active software warning Alerts. + * `num_warning_alerts` - (Integer) Specifies the count of active warning Alerts excluding alerts that belong to other bucket. + * `num_warning_alerts_categories` - (Integer) Specifies the count of active warning alerts categories. +* `aggregated_cluster_stats` - (List) Specifies the cluster statistics based on active alerts. +Nested schema for **aggregated_cluster_stats**: + * `num_clusters_with_critical_alerts` - (Integer) Specifies the count of clusters with at least one critical alert. + * `num_clusters_with_warning_alerts` - (Integer) Specifies the count of clusters with at least one warning category alert and no critical alerts. + * `num_healthy_clusters` - (Integer) Specifies the count of clusters with no warning or critical alerts. +* `stats_by_cluster` - (List) Specifies the active Alerts stats by clusters. +Nested schema for **stats_by_cluster**: + * `alerts_stats` - (List) Specifies the active alert statistics details. + Nested schema for **alerts_stats**: + * `num_critical_alerts` - (Integer) Specifies the count of active critical Alerts excluding alerts that belong to other bucket. + * `num_critical_alerts_categories` - (Integer) Specifies the count of active critical alerts categories. + * `num_data_service_alerts` - (Integer) Specifies the count of active service Alerts. + * `num_data_service_critical_alerts` - (Integer) Specifies the count of active service critical Alerts. + * `num_data_service_info_alerts` - (Integer) Specifies the count of active service info Alerts. + * `num_data_service_warning_alerts` - (Integer) Specifies the count of active service warning Alerts. + * `num_hardware_alerts` - (Integer) Specifies the count of active hardware Alerts. + * `num_hardware_critical_alerts` - (Integer) Specifies the count of active hardware critical Alerts. + * `num_hardware_info_alerts` - (Integer) Specifies the count of active hardware info Alerts. + * `num_hardware_warning_alerts` - (Integer) Specifies the count of active hardware warning Alerts. + * `num_info_alerts` - (Integer) Specifies the count of active info Alerts excluding alerts that belong to other bucket. + * `num_info_alerts_categories` - (Integer) Specifies the count of active info alerts categories. + * `num_maintenance_alerts` - (Integer) Specifies the count of active Alerts of maintenance bucket. + * `num_maintenance_critical_alerts` - (Integer) Specifies the count of active other critical Alerts. + * `num_maintenance_info_alerts` - (Integer) Specifies the count of active other info Alerts. + * `num_maintenance_warning_alerts` - (Integer) Specifies the count of active other warning Alerts. + * `num_software_alerts` - (Integer) Specifies the count of active software Alerts. + * `num_software_critical_alerts` - (Integer) Specifies the count of active software critical Alerts. + * `num_software_info_alerts` - (Integer) Specifies the count of active software info Alerts. + * `num_software_warning_alerts` - (Integer) Specifies the count of active software warning Alerts. + * `num_warning_alerts` - (Integer) Specifies the count of active warning Alerts excluding alerts that belong to other bucket. + * `num_warning_alerts_categories` - (Integer) Specifies the count of active warning alerts categories. + * `cluster_id` - (Integer) Specifies the Cluster Id. + * `region_id` - (String) Specifies the region id of cluster. + diff --git a/website/docs/d/backup_recovery_manager_get_alerts_summary.html.markdown b/website/docs/d/backup_recovery_manager_get_alerts_summary.html.markdown new file mode 100644 index 0000000000..a1bf4fc7bd --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_alerts_summary.html.markdown @@ -0,0 +1,46 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_alerts_summary" +description: |- + Get information about backup_recovery_manager_get_alerts_summary +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_alerts_summary + +Provides a read-only data source to retrieve information about a backup_recovery_manager_get_alerts_summary. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_alerts_summary" "backup_recovery_manager_get_alerts_summary" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `end_time_usecs` - (Optional, Integer) Filter by end time. Specify the end time as a Unix epoch Timestamp (in microseconds). By default it is current time. +* `include_tenants` - (Optional, Boolean) IncludeTenants specifies if alerts of all the tenants under the hierarchy of the logged in user's organization should be used to compute summary. +* `start_time_usecs` - (Optional, Integer) Filter by start time. Specify the start time as a Unix epoch Timestamp (in microseconds). By default it is current time minus a day. +* `states_list` - (Optional, List) Specifies list of alert states to filter alerts by. If not specified, only open alerts will be used to get summary. + * Constraints: Allowable list items are: `kResolved`, `kOpen`, `kNote`, `kSuppressed`. +* `tenant_ids` - (Optional, List) TenantIds contains ids of the tenants for which alerts are to be used to compute summary. +* `x_scope_identifier` - (Optional, String) This field uniquely represents a service instance. Please specify the values as "service-instance-id: ". + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_alerts_summary. +* `alerts_summary` - (List) Specifies a list of alerts summary grouped by category. +Nested schema for **alerts_summary**: + * `category` - (String) Category of alerts by which summary is grouped. + * Constraints: Allowable values are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. + * `critical_count` - (Integer) Specifies count of critical alerts. + * `info_count` - (Integer) Specifies count of info alerts. + * `total_count` - (Integer) Specifies count of total alerts. + * `type` - (String) Type/bucket that this alert category belongs to. + * `warning_count` - (Integer) Specifies count of warning alerts. + diff --git a/website/docs/d/backup_recovery_manager_get_cluster_info.html.markdown b/website/docs/d/backup_recovery_manager_get_cluster_info.html.markdown new file mode 100644 index 0000000000..53ae1d9eec --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_cluster_info.html.markdown @@ -0,0 +1,85 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_cluster_info" +description: |- + Get information about backup_recovery_manager_get_cluster_info +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_cluster_info + +Provides a read-only data source to retrieve information about a backup_recovery_manager_get_cluster_info. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_cluster_info" "backup_recovery_manager_get_cluster_info" { +} +``` + + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_cluster_info. +* `cohesity_clusters` - (List) Specifies the array of clusters upgrade details. +Nested schema for **cohesity_clusters**: + * `auth_support_for_pkg_downloads` - (Boolean) If cluster can support authHeader for upgrade or not. + * `available_versions` - (List) Specifies the release versions the cluster can upgrade to. + Nested schema for **available_versions**: + * `notes` - (String) Specifies release's notes. + * `patch_details` - (List) Specifies the details of the available patch release. + Nested schema for **patch_details**: + * `notes` - (String) Specifies patch release's notes. + * `release_type` - (String) Release's type. + * `version` - (String) Specifies patch release's version. + * `release_stage` - (String) Specifies the stage of a release. + * `release_type` - (String) Release's type e.g, LTS, Feature, Patch, MCM. + * `type` - (String) Specifies the type of package or release. + * Constraints: Allowable values are: `Upgrade`, `Patch`, `UpgradePatch`. + * `version` - (String) Specifies release's version. + * `cluster_id` - (Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Integer) Specifies cluster incarnation id. + * `cluster_name` - (String) Specifies cluster's name. + * `current_patch_version` - (String) Specifies current patch version of the cluster. + * `current_version` - (String) Specifies if the cluster is connected to management console. + * `health` - (String) Specifies the health of the cluster. + * Constraints: Allowable values are: `Critical`, `NonCritical`. + * `is_connected_to_helios` - (Boolean) Specifies if the cluster is connected to management console. + * `location` - (String) Specifies the location of the cluster. + * `multi_tenancy_enabled` - (Boolean) Specifies if multi tenancy is enabled in the cluster. + * `node_ips` - (List) Specifies an array of node ips for the cluster. + * `number_of_nodes` - (Integer) Specifies the number of nodes in the cluster. + * `patch_target_upgrade_url` - (String) Specifies the patch package URL for the cluster. This is populated for patch update only. + * `patch_target_version` - (String) Specifies target version to which clusters are upgrading. This is populated for patch update only. + * `provider_type` - (String) Specifies the type of the cluster provider. + * Constraints: Allowable values are: `kMCMCohesity`, `kIBMStorageProtect`. + * `scheduled_timestamp` - (Integer) Time at which an upgrade is scheduled. + * `status` - (String) Specifies the upgrade status of the cluster. + * Constraints: Allowable values are: `InProgress`, `UpgradeAvailable`, `UpToDate`, `Scheduled`, `Failed`, `ClusterUnreachable`. + * `target_upgrade_url` - (String) Specifies the upgrade URL for the cluster. This is populated for upgrade only. + * `target_version` - (String) Specifies target version to which clusters are to be upgraded. This is populated for upgrade only. + * `total_capacity` - (Integer) Specifies how total memory capacity of the cluster. + * `type` - (String) Specifies the type of the cluster. + * Constraints: Allowable values are: `VMRobo`, `Physical`. + * `update_type` - (String) Specifies the type of upgrade performed on a cluster. This is to be used with status field to know the status of the upgrade action performed on cluster. + * Constraints: Allowable values are: `Upgrade`, `Patch`, `UpgradePatch`. + * `used_capacity` - (Integer) Specifies how much of the cluster capacity is consumed. +* `sp_clusters` - (List) Specifies the array of clusters claimed from IBM Storage Protect environment. +Nested schema for **sp_clusters**: + * `cluster_id` - (Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Integer) Specifies cluster incarnation id. + * `cluster_name` - (String) Specifies cluster's name. + * `current_version` - (String) Specifies the currently running version on cluster. + * `health` - (String) Specifies the health of the cluster. + * Constraints: Allowable values are: `Critical`, `NonCritical`. + * `is_connected_to_helios` - (Boolean) Specifies if the cluster is connected to management console. + * `node_ips` - (List) Specifies an array of node ips for the cluster. + * `number_of_nodes` - (Integer) Specifies the number of nodes in the cluster. + * `provider_type` - (String) Specifies the type of the cluster provider. + * Constraints: Allowable values are: `kMCMCohesity`, `kIBMStorageProtect`. + * `total_capacity` - (Integer) Specifies total capacity of the cluster in bytes. + * `type` - (String) Specifies the type of the SP cluster. + * `used_capacity` - (Integer) Specifies how much of the cluster capacity is consumed in bytes. + diff --git a/website/docs/d/backup_recovery_manager_get_compatible_clusters.html.markdown b/website/docs/d/backup_recovery_manager_get_compatible_clusters.html.markdown new file mode 100644 index 0000000000..0c8048c775 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_compatible_clusters.html.markdown @@ -0,0 +1,37 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_compatible_clusters" +description: |- + Get information about backup_recovery_manager_get_compatible_clusters +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_compatible_clusters + +Provides a read-only data source to retrieve information about backup_recovery_manager_get_compatible_clusters. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_compatible_clusters" "backup_recovery_manager_get_compatible_clusters" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `release_version` - (Optional, String) + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_compatible_clusters. +* `compatible_clusters` - (List) +Nested schema for **compatible_clusters**: + * `cluster_id` - (Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Integer) Specifies cluster incarnation id. + * `cluster_name` - (String) Specifies cluster's name. + * `current_version` - (String) Specifies the current version of the cluster. + diff --git a/website/docs/d/backup_recovery_manager_get_management_alerts.html.markdown b/website/docs/d/backup_recovery_manager_get_management_alerts.html.markdown new file mode 100644 index 0000000000..a536446563 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_management_alerts.html.markdown @@ -0,0 +1,88 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_management_alerts" +description: |- + Get information about backup_recovery_manager_get_management_alerts +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_management_alerts + +Provides a read-only data source to retrieve information about backup_recovery_manager_get_management_alerts. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_management_alerts" "backup_recovery_manager_get_management_alerts" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `alert_category_list` - (Optional, List) Filter by list of alert categories. + * Constraints: Allowable list items are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. +* `alert_id_list` - (Optional, List) Filter by list of alert ids. +* `alert_name` - (Optional, String) Specifies name of alert to filter alerts by. +* `alert_property_key_list` - (Optional, List) Specifies list of the alert property keys to query. +* `alert_property_value_list` - (Optional, List) Specifies list of the alert property value, multiple values for one key should be joined by '|'. +* `alert_severity_list` - (Optional, List) Filter by list of alert severity types. + * Constraints: Allowable list items are: `kCritical`, `kWarning`, `kInfo`. +* `alert_state_list` - (Optional, List) Filter by list of alert states. +* `alert_type_bucket_list` - (Optional, List) Filter by list of alert type buckets. + * Constraints: Allowable list items are: `kHardware`, `kSoftware`, `kDataService`, `kMaintenance`. +* `alert_type_list` - (Optional, List) Filter by list of alert types. +* `cluster_identifiers` - (Optional, List) Filter by list of cluster ids. +* `end_date_usecs` - (Optional, Integer) Specifies the end time of the alerts to be returned. All the alerts returned are raised before the specified end time. This value should be in Unix timestamp epoch in microseconds. +* `max_alerts` - (Optional, Integer) Specifies maximum number of alerts to return. +* `region_ids` - (Optional, List) Filter by list of region ids. +* `service_instance_ids` - (Optional, List) Specifies services instance ids to filter alerts for IBM customers. +* `start_date_usecs` - (Optional, Integer) Specifies the start time of the alerts to be returned. All the alerts returned are raised after the specified start time. This value should be in Unix timestamp epoch in microseconds. +* `tenant_ids` - (Optional, List) Filter by tenant ids. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_management_alerts. +* `alerts_list` - (List) Specifies the list of alerts. +Nested schema for **alerts_list**: + * `alert_category` - (String) Specifies the alert category. + * Constraints: Allowable values are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. + * `alert_code` - (String) Specifies a unique code that categorizes the Alert, for example: CE00200014, where CE stands for IBM Error, the alert state next 3 digits is the id of the Alert Category (e.g. 002 for 'kNode') and the last 5 digits is the id of the Alert Type (e.g. 00014 for 'kNodeHighCpuUsage'). + * `alert_document` - (List) Specifies the fields of alert document. + Nested schema for **alert_document**: + * `alert_cause` - (String) Specifies the cause of alert. + * `alert_description` - (String) Specifies the description of alert. + * `alert_help_text` - (String) Specifies the help text for alert. + * `alert_name` - (String) Specifies the name of alert. + * `alert_summary` - (String) Short description for the alert. + * `alert_state` - (String) Specifies the alert state. + * Constraints: Allowable values are: `kResolved`, `kOpen`, `kNote`, `kSuppressed`. + * `alert_type` - (Integer) Specifies the alert type. + * `alert_type_bucket` - (String) Specifies the Alert type bucket. + * Constraints: Allowable values are: `kHardware`, `kSoftware`, `kDataService`, `kMaintenance`. + * `cluster_id` - (Integer) Id of the cluster which the alert is associated. + * `cluster_name` - (String) Specifies the name of cluster which alert is raised from. + * `dedup_count` - (Integer) Specifies the dedup count of alert. + * `dedup_timestamps` - (List) Specifies Unix epoch Timestamps (in microseconds) for the last 25 occurrences of duplicated Alerts that are stored with the original/primary Alert. Alerts are grouped into one Alert if the Alerts are the same type, are reporting on the same Object and occur within one hour. 'dedupCount' always reports the total count of duplicated Alerts even if there are more than 25 occurrences. For example, if there are 100 occurrences of this Alert, dedupTimestamps stores the timestamps of the last 25 occurrences and dedupCount equals 100. + * `first_timestamp_usecs` - (Integer) SpeSpecifies Unix epoch Timestamp (in microseconds) of the first occurrence of the Alert. + * `id` - (String) Specifies unique id of the alert. + * `latest_timestamp_usecs` - (Integer) SpeSpecifies Unix epoch Timestamp (in microseconds) of the most recent occurrence of the Alert. + * `property_list` - (List) List of property key and values associated with alert. + Nested schema for **property_list**: + * `key` - (String) Key of the Label. + * `value` - (String) Value of the Label, multiple values should be joined by '|'. + * `region_id` - (String) Specifies the region id of the alert. + * `resolution_id_string` - (String) Specifies the resolution id of the alert if its resolved. + * `service_instance_id` - (String) Id of the serrvice instance which the alert is associated. + * `severity` - (String) Specifies the alert severity. + * Constraints: Allowable values are: `kCritical`, `kWarning`, `kInfo`. + * `vaults` - (List) Specifies information about vaults where source object associated with alert is vaulted. This could be empty if alert is not related to any source object or it is not vaulted. + Nested schema for **vaults**: + * `global_vault_id` - (String) Specifies Global vault id. + * `region_id` - (String) Specifies id of region where vault resides. + * `region_name` - (String) Specifies name of region where vault resides. + * `vault_name` - (String) Specifies name of vault. + diff --git a/website/docs/d/backup_recovery_manager_get_management_alerts_summary.html.markdown b/website/docs/d/backup_recovery_manager_get_management_alerts_summary.html.markdown new file mode 100644 index 0000000000..605ce42b21 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_management_alerts_summary.html.markdown @@ -0,0 +1,44 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_management_alerts_summary" +description: |- + Get information about backup_recovery_manager_get_management_alerts_summary +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_management_alerts_summary + +Provides a read-only data source to retrieve information about a backup_recovery_manager_get_management_alerts_summary. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_management_alerts_summary" "backup_recovery_manager_get_management_alerts_summary" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `cluster_identifiers` - (Optional, List) Specifies the list of cluster identifiers. Format is clusterId:clusterIncarnationId. +* `end_time_usecs` - (Optional, Integer) Filter by end time. Specify the end time as a Unix epoch Timestamp (in microseconds). By default it is current time. +* `start_time_usecs` - (Optional, Integer) Filter by start time. Specify the start time as a Unix epoch Timestamp (in microseconds). By default it is current time minus a day. +* `states_list` - (Optional, List) Specifies list of alert states to filter alerts by. If not specified, only open alerts will be used to get summary. + * Constraints: Allowable list items are: `kResolved`, `kOpen`, `kNote`, `kSuppressed`. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_management_alerts_summary. +* `alerts_summary` - (List) Specifies a list of alerts summary grouped by category. +Nested schema for **alerts_summary**: + * `category` - (String) Category of alerts by which summary is grouped. + * Constraints: Allowable values are: `kDisk`, `kNode`, `kCluster`, `kChassis`, `kPowerSupply`, `kCPU`, `kMemory`, `kTemperature`, `kFan`, `kNIC`, `kFirmware`, `kNodeHealth`, `kOperatingSystem`, `kDataPath`, `kMetadata`, `kIndexing`, `kHelios`, `kAppMarketPlace`, `kSystemService`, `kLicense`, `kSecurity`, `kUpgrade`, `kClusterManagement`, `kAuditLog`, `kNetworking`, `kConfiguration`, `kStorageUsage`, `kFaultTolerance`, `kBackupRestore`, `kArchivalRestore`, `kRemoteReplication`, `kQuota`, `kCDP`, `kViewFailover`, `kDisasterRecovery`, `kStorageDevice`, `kStoragePool`, `kGeneralSoftwareFailure`, `kAgent`. + * `critical_count` - (Integer) Specifies count of critical alerts. + * `info_count` - (Integer) Specifies count of info alerts. + * `total_count` - (Integer) Specifies count of total alerts. + * `type` - (String) Type/bucket that this alert category belongs to. + * `warning_count` - (Integer) Specifies count of warning alerts. + diff --git a/website/docs/d/backup_recovery_manager_get_upgrades_info.html.markdown b/website/docs/d/backup_recovery_manager_get_upgrades_info.html.markdown new file mode 100644 index 0000000000..00c62e1cd0 --- /dev/null +++ b/website/docs/d/backup_recovery_manager_get_upgrades_info.html.markdown @@ -0,0 +1,49 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_get_upgrades_info" +description: |- + Get information about backup_recovery_manager_get_upgrades_info +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_get_upgrades_info + +Provides a read-only data source to retrieve information about a backup_recovery_manager_get_upgrades_info. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_backup_recovery_manager_get_upgrades_info" "backup_recovery_manager_get_upgrades_info" { +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `cluster_identifiers` - (Optional, List) Fetch upgrade progress details for a list of cluster identifiers in format clusterId:clusterIncarnationId. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_get_upgrades_info. +* `upgrades_info` - (List) +Nested schema for **upgrades_info**: + * `cluster_id` - (Integer) Specifies cluster's id. + * `cluster_incarnation_id` - (Integer) Specifies cluster's incarnation id. + * `patch_software_version` - (String) Patch software version against which these logs are generated. This is specified for Patch type only. + * `software_version` - (String) Upgrade software version against which these logs are generated. + * `type` - (String) Specifies the type of upgrade on a cluster. + * Constraints: Allowable values are: `Upgrade`, `Patch`, `UpgradePatch`. + * `upgrade_logs` - (List) Upgrade logs per node. + Nested schema for **upgrade_logs**: + * `logs` - (List) Upgrade logs for the node. + Nested schema for **logs**: + * `log` - (String) One log statement of the complete logs. + * `time_stamp` - (Integer) Time at which this log got generated. + * `node_id` - (String) Id of the node. + * `upgrade_percent_complete` - (Float) Upgrade percentage complete so far. + * `upgrade_status` - (String) Upgrade status. + * Constraints: Allowable values are: `Scheduled`, `Complete`, `InProgress`, `Failed`, `ClusterUnreachable`. + diff --git a/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown new file mode 100644 index 0000000000..c51618e30a --- /dev/null +++ b/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown @@ -0,0 +1,41 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_create_cluster_upgrades" +description: |- + Manages backup_recovery_manager_create_cluster_upgrades. +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_create_cluster_upgrades + +Create, update, and delete backup_recovery_manager_create_cluster_upgradess with this resource. + +## Example Usage + +```hcl +resource "ibm_backup_recovery_manager_create_cluster_upgrades" "backup_recovery_manager_create_cluster_upgrades_instance" { +} +``` + + +## Attribute Reference + +After your resource is created, you can read values from the listed arguments and the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_create_cluster_upgrades. +* `upgrade_response_list` - (List) Specifies a list of disks to exclude from being protected. This is only applicable to VM objects. +Nested schema for **upgrade_response_list**: + * `cluster_id` - (Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Integer) Specifies cluster incarnation id. + * `error_message` - (String) Specifies error message if failed to schedule upgrade. + * `is_upgrade_scheduling_successful` - (Boolean) Specifies if upgrade scheduling was successsful. + + +## Import + +You can import the `ibm_backup_recovery_manager_create_cluster_upgrades` resource by using `id`. Specifies the ID of the object. + +# Syntax +
+$ terraform import ibm_backup_recovery_manager_create_cluster_upgrades.backup_recovery_manager_create_cluster_upgrades <id>
+
From c291fd653e2dc665bc8ab2f6142f4da38e5d50b0 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Mon, 3 Nov 2025 21:57:26 +0530 Subject: [PATCH 08/15] add resources --- ...ecovery_manager_cancel_cluster_upgrades.go | 160 ++++++++ ...ry_manager_cancel_cluster_upgrades_test.go | 34 ++ ...ecovery_manager_create_cluster_upgrades.go | 122 ++++++ ...ecovery_manager_update_cluster_upgrades.go | 358 ++++++++++++++++++ ...ry_manager_update_cluster_upgrades_test.go | 39 ++ 5 files changed, 713 insertions(+) create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go create mode 100644 ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go new file mode 100644 index 0000000000..23013ea156 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go @@ -0,0 +1,160 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func ResourceIbmBackupRecoveryManagerCancelClusterUpgrades() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesCreate, + ReadContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesRead, + DeleteContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesDelete, + Importer: &schema.ResourceImporter{}, + + Schema: map[string]*schema.Schema{ + "cluster_identifiers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: "Specifies the list of cluster identifiers. The format is clusterId:clusterIncarnationId.", + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "cancelled_upgrade_response_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies list of cluster scheduled uprgade cancel response.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "error_message": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Specifies an error message if failed to cancel a scheduled upgrade.", + }, + "is_upgrade_cancel_successful": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Specifies if scheduled upgrade cancelling was successful.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + }, + }, + }, + }, + } +} + +func resourceIbmBackupRecoveryManagerCancelClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + deleteClustersUpgradesOptions := &backuprecoveryv1.DeleteClustersUpgradesOptions{} + + if _, ok := d.GetOk("cluster_identifiers"); ok { + var clusterIdentifiers []string + for _, v := range d.Get("cluster_identifiers").([]interface{}) { + clusterIdentifiersItem := v.(string) + clusterIdentifiers = append(clusterIdentifiers, clusterIdentifiersItem) + } + deleteClustersUpgradesOptions.SetClusterIdentifiers(clusterIdentifiers) + } + + upgradesCancelResponse, _, err := managementSreApiClient.DeleteClustersUpgradesWithContext(context, deleteClustersUpgradesOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(resourceIbmBackupRecoveryManagerCancelClusterUpgradesID(d)) + + if !core.IsNil(upgradesCancelResponse) { + cancelledUpgradeResponseListResult := []map[string]interface{}{} + for _, cancelledUpgradeResponseListItem := range upgradesCancelResponse { + cancelledUpgradeResponseListItemMap, err := ResourceIbmBackupRecoveryManagerCancelClusterUpgradesUpgradeCancelResponseToMap(&cancelledUpgradeResponseListItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read", "cancelled_upgrade_response_list-to-map").GetDiag() + } + cancelledUpgradeResponseListResult = append(cancelledUpgradeResponseListResult, cancelledUpgradeResponseListItemMap) + } + if err = d.Set("cancelled_upgrade_response_list", cancelledUpgradeResponseListResult); err != nil { + err = fmt.Errorf("Error setting cancelled_upgrade_response_list: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read", "set-cancelled_upgrade_response_list").GetDiag() + } + } + + return resourceIbmBackupRecoveryManagerCancelClusterUpgradesRead(context, d, meta) +} + +func resourceIbmBackupRecoveryManagerCancelClusterUpgradesID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func resourceIbmBackupRecoveryManagerCancelClusterUpgradesRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + + return nil +} + +func resourceIbmBackupRecoveryManagerCancelClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Delete Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + +func ResourceIbmBackupRecoveryManagerCancelClusterUpgradesUpgradeCancelResponseToMap(model *backuprecoveryv1.UpgradeCancelResponse) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ErrorMessage != nil { + modelMap["error_message"] = *model.ErrorMessage + } + if model.IsUpgradeCancelSuccessful != nil { + modelMap["is_upgrade_cancel_successful"] = *model.IsUpgradeCancelSuccessful + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + return modelMap, nil +} diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go new file mode 100644 index 0000000000..95830632a1 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go @@ -0,0 +1,34 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerCancelClusterUpgradesBasic(t *testing.T) { + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerCancelClusterUpgradesConfigBasic(), + Check: resource.ComposeAggregateTestCheckFunc(), + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerCancelClusterUpgradesConfigBasic() string { + return fmt.Sprintf(` + resource "ibm_backup_recovery_manager_cancel_cluster_upgrades" "backup_recovery_manager_cancel_cluster_upgrades_instance" { + } + `) +} diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go index eb2dd33cf1..b8e764366f 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go @@ -30,6 +30,128 @@ func ResourceIbmBackupRecoveryManagerCreateClusterUpgrades() *schema.Resource { Importer: &schema.ResourceImporter{}, Schema: map[string]*schema.Schema{ + "auth_headers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: "Specifies the optional headers for upgrade request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the key or name of the header.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the value of the header.", + }, + }, + }, + }, + "clusters": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: "Array for clusters to be upgraded.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies cluster incarnation id.", + }, + "current_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies current version of cluster.", + }, + }, + }, + }, + "interval_for_rolling_upgrade_in_hours": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: "Specifies the difference of time between two cluster's upgrade.", + }, + "package_url": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Specifies URL from which package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM).", + }, + "patch_upgrade_params": &schema.Schema{ + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + ForceNew: true, + Description: "Specifies the parameters for patch upgrade request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "auth_headers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the optional headers for the patch cluster request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the key or name of the header.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the value of the header.", + }, + }, + }, + }, + "ignore_pre_checks_failure": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Specify if pre check results can be ignored.", + }, + "package_url": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies URL from which patch package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM).", + }, + "target_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies target patch version to which clusters are to be upgraded.", + }, + }, + }, + }, + "target_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Specifies target version to which clusters are to be upgraded.", + }, + "time_stamp_to_upgrade_at_msecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: "Specifies the time in msecs at which the cluster has to be upgraded.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Upgrade", + ForceNew: true, + Description: "Specifies the type of upgrade to be performed on a cluster.", + }, "upgrade_response_list": &schema.Schema{ Type: schema.TypeList, Computed: true, diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go new file mode 100644 index 0000000000..581c97f918 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go @@ -0,0 +1,358 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.96.1-5136e54a-20241108-203028 + */ + +package backuprecovery + +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.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/ibm-backup-recovery-sdk-go/backuprecoveryv1" +) + +func ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesCreate, + ReadContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesRead, + DeleteContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesDelete, + Importer: &schema.ResourceImporter{}, + + Schema: map[string]*schema.Schema{ + "auth_headers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: "Specifies the optional headers for upgrade request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the key or name of the header.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the value of the header.", + }, + }, + }, + }, + "clusters": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: "Array for clusters to be upgraded.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Description: "Specifies cluster incarnation id.", + }, + "current_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies current version of cluster.", + }, + }, + }, + }, + "interval_for_rolling_upgrade_in_hours": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: "Specifies the difference of time between two cluster's upgrade.", + }, + "package_url": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Specifies URL from which package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM).", + }, + "patch_upgrade_params": &schema.Schema{ + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + ForceNew: true, + Description: "Specifies the parameters for patch upgrade request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "auth_headers": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + Description: "Specifies the optional headers for the patch cluster request.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the key or name of the header.", + }, + "value": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "Specifies the value of the header.", + }, + }, + }, + }, + "ignore_pre_checks_failure": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Specify if pre check results can be ignored.", + }, + "package_url": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies URL from which patch package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM).", + }, + "target_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "Specifies target patch version to which clusters are to be upgraded.", + }, + }, + }, + }, + "target_version": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Specifies target version to which clusters are to be upgraded.", + }, + "time_stamp_to_upgrade_at_msecs": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: "Specifies the time in msecs at which the cluster has to be upgraded.", + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Default: "Upgrade", + ForceNew: true, + Description: "Specifies the type of upgrade to be performed on a cluster.", + }, + "upgrade_response_list": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "Specifies a list of disks to exclude from being protected. This is only applicable to VM objects.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "error_message": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Specifies error message if failed to schedule upgrade.", + }, + "is_upgrade_scheduling_successful": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Specifies if upgrade scheduling was successsful.", + }, + "cluster_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster id.", + }, + "cluster_incarnation_id": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Specifies cluster incarnation id.", + }, + }, + }, + }, + }, + } +} + +func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + if err != nil { + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "create", "initialize-client") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + updateClustersUpgradesOptions := &backuprecoveryv1.UpdateClustersUpgradesOptions{} + + if _, ok := d.GetOk("auth_headers"); ok { + var authHeaders []backuprecoveryv1.AuthHeaderForClusterUpgrade + for _, v := range d.Get("auth_headers").([]interface{}) { + value := v.(map[string]interface{}) + authHeadersItem, err := ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToAuthHeaderForClusterUpgrade(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "create", "parse-auth_headers").GetDiag() + } + authHeaders = append(authHeaders, *authHeadersItem) + } + updateClustersUpgradesOptions.SetAuthHeaders(authHeaders) + } + if _, ok := d.GetOk("clusters"); ok { + var clusters []backuprecoveryv1.Upgrade + for _, v := range d.Get("clusters").([]interface{}) { + value := v.(map[string]interface{}) + clustersItem, err := ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToUpgrade(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "create", "parse-clusters").GetDiag() + } + clusters = append(clusters, *clustersItem) + } + updateClustersUpgradesOptions.SetClusters(clusters) + } + if _, ok := d.GetOk("interval_for_rolling_upgrade_in_hours"); ok { + updateClustersUpgradesOptions.SetIntervalForRollingUpgradeInHours(int64(d.Get("interval_for_rolling_upgrade_in_hours").(int))) + } + if _, ok := d.GetOk("package_url"); ok { + updateClustersUpgradesOptions.SetPackageURL(d.Get("package_url").(string)) + } + if _, ok := d.GetOk("patch_upgrade_params"); ok { + patchUpgradeParamsModel, err := ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToPatchUpgradeParams(d.Get("patch_upgrade_params.0").(map[string]interface{})) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "create", "parse-patch_upgrade_params").GetDiag() + } + updateClustersUpgradesOptions.SetPatchUpgradeParams(patchUpgradeParamsModel) + } + if _, ok := d.GetOk("target_version"); ok { + updateClustersUpgradesOptions.SetTargetVersion(d.Get("target_version").(string)) + } + if _, ok := d.GetOk("time_stamp_to_upgrade_at_msecs"); ok { + updateClustersUpgradesOptions.SetTimeStampToUpgradeAtMsecs(int64(d.Get("time_stamp_to_upgrade_at_msecs").(int))) + } + if _, ok := d.GetOk("type"); ok { + updateClustersUpgradesOptions.SetType(d.Get("type").(string)) + } + + upgradesResponse, _, err := managementSreApiClient.UpdateClustersUpgradesWithContext(context, updateClustersUpgradesOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("UpdateClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_update_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(resourceIbmBackupRecoveryManagerUpdateClusterUpgradesID(d)) + + if !core.IsNil(upgradesResponse) { + upgradeResponseListResult := []map[string]interface{}{} + for _, upgradeResponseListItem := range upgradesResponse { + upgradeResponseListItemMap, err := ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesUpgradeResponseToMap(&upgradeResponseListItem) // #nosec G601 + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "read", "upgrade_response_list-to-map").GetDiag() + } + upgradeResponseListResult = append(upgradeResponseListResult, upgradeResponseListItemMap) + } + if err = d.Set("upgrade_response_list", upgradeResponseListResult); err != nil { + err = fmt.Errorf("Error setting upgrade_response_list: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "read", "set-upgrade_response_list").GetDiag() + } + } + + return resourceIbmBackupRecoveryManagerUpdateClusterUpgradesRead(context, d, meta) +} + +func ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesUpgradeResponseToMap(model *backuprecoveryv1.UpgradeResponse) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ErrorMessage != nil { + modelMap["error_message"] = *model.ErrorMessage + } + if model.IsUpgradeSchedulingSuccessful != nil { + modelMap["is_upgrade_scheduling_successful"] = *model.IsUpgradeSchedulingSuccessful + } + if model.ClusterID != nil { + modelMap["cluster_id"] = flex.IntValue(model.ClusterID) + } + if model.ClusterIncarnationID != nil { + modelMap["cluster_incarnation_id"] = flex.IntValue(model.ClusterIncarnationID) + } + return modelMap, nil +} + +func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} + +func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + return nil +} + +func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Delete Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + +func ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToAuthHeaderForClusterUpgrade(modelMap map[string]interface{}) (*backuprecoveryv1.AuthHeaderForClusterUpgrade, error) { + model := &backuprecoveryv1.AuthHeaderForClusterUpgrade{} + model.Key = core.StringPtr(modelMap["key"].(string)) + model.Value = core.StringPtr(modelMap["value"].(string)) + return model, nil +} + +func ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToUpgrade(modelMap map[string]interface{}) (*backuprecoveryv1.Upgrade, error) { + model := &backuprecoveryv1.Upgrade{} + if modelMap["cluster_id"] != nil { + model.ClusterID = core.Int64Ptr(int64(modelMap["cluster_id"].(int))) + } + if modelMap["cluster_incarnation_id"] != nil { + model.ClusterIncarnationID = core.Int64Ptr(int64(modelMap["cluster_incarnation_id"].(int))) + } + if modelMap["current_version"] != nil && modelMap["current_version"].(string) != "" { + model.CurrentVersion = core.StringPtr(modelMap["current_version"].(string)) + } + return model, nil +} + +func ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToPatchUpgradeParams(modelMap map[string]interface{}) (*backuprecoveryv1.PatchUpgradeParams, error) { + model := &backuprecoveryv1.PatchUpgradeParams{} + if modelMap["auth_headers"] != nil { + authHeaders := []backuprecoveryv1.AuthHeaderForClusterUpgrade{} + for _, authHeadersItem := range modelMap["auth_headers"].([]interface{}) { + authHeadersItemModel, err := ResourceIbmBackupRecoveryManagerUpdateClusterUpgradesMapToAuthHeaderForClusterUpgrade(authHeadersItem.(map[string]interface{})) + if err != nil { + return model, err + } + authHeaders = append(authHeaders, *authHeadersItemModel) + } + model.AuthHeaders = authHeaders + } + if modelMap["ignore_pre_checks_failure"] != nil { + model.IgnorePreChecksFailure = core.BoolPtr(modelMap["ignore_pre_checks_failure"].(bool)) + } + if modelMap["package_url"] != nil && modelMap["package_url"].(string) != "" { + model.PackageURL = core.StringPtr(modelMap["package_url"].(string)) + } + if modelMap["target_version"] != nil && modelMap["target_version"].(string) != "" { + model.TargetVersion = core.StringPtr(modelMap["target_version"].(string)) + } + return model, nil +} diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go new file mode 100644 index 0000000000..62d4a5ecb2 --- /dev/null +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go @@ -0,0 +1,39 @@ +// Copyright IBM Corp. 2025 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package backuprecovery_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmBackupRecoveryManagerUpdateClusterUpgradesBasic(t *testing.T) { + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmBackupRecoveryManagerUpdateClusterUpgradesConfigBasic(), + Check: resource.ComposeAggregateTestCheckFunc(), + }, + resource.TestStep{ + ResourceName: "ibm_backup_recovery_manager_update_cluster_upgrades.backup_recovery_manager_update_cluster_upgrades", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckIbmBackupRecoveryManagerUpdateClusterUpgradesConfigBasic() string { + return fmt.Sprintf(` + resource "ibm_backup_recovery_manager_update_cluster_upgrades" "backup_recovery_manager_update_cluster_upgrades_instance" { + } + `) +} From d4df85c025429d7ed1636973767fa95d0f480df4 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Thu, 4 Sep 2025 11:06:03 +0530 Subject: [PATCH 09/15] update --- go.mod | 4 +++- go.sum | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index cc47348a47..6755cc5db5 100644 --- a/go.mod +++ b/go.mod @@ -193,14 +193,16 @@ require ( go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.uber.org/atomic v1.9.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect + go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect golang.org/x/mod v0.26.0 // indirect golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.27.0 // indirect golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.36.0 // indirect + golang.org/x/sys v0.35.0 // indirect golang.org/x/term v0.34.0 // indirect golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.9.0 // indirect diff --git a/go.sum b/go.sum index 3d8218723c..0d5e1c91e3 100644 --- a/go.sum +++ b/go.sum @@ -1258,8 +1258,9 @@ go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -1269,8 +1270,8 @@ go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= @@ -1597,8 +1598,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From d8377102b9f7ef59a1bd63606aa84e2d510db3dc Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Tue, 7 Oct 2025 13:16:56 +0530 Subject: [PATCH 10/15] update BRS sdk --- go.mod | 16 ++++++++-------- go.sum | 31 +++++++++++++++---------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 6755cc5db5..953b22fd91 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/IBM-Cloud/power-go-client v1.13.0 github.com/IBM/appconfiguration-go-admin-sdk v0.5.1 github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f - github.com/IBM/cloud-databases-go-sdk v0.8.1 + github.com/IBM/cloud-databases-go-sdk v0.8.0 github.com/IBM/cloud-db2-go-sdk v0.2.4 github.com/IBM/cloudant-go-sdk v0.8.0 github.com/IBM/code-engine-go-sdk v0.0.0-20241217191651-e1821f8c58c3 @@ -18,7 +18,7 @@ require ( github.com/IBM/event-notifications-go-admin-sdk v0.20.0 github.com/IBM/eventstreams-go-sdk v1.4.0 github.com/IBM/go-sdk-core/v5 v5.21.0 - github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 + github.com/IBM/ibm-backup-recovery-sdk-go v1.0.4 github.com/IBM/ibm-cos-sdk-go v1.12.2 github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20250305134146-e023c2e84762 @@ -28,8 +28,8 @@ require ( github.com/IBM/logs-router-go-sdk v1.0.8 github.com/IBM/mqcloud-go-sdk v0.4.0 github.com/IBM/networking-go-sdk v0.51.12 - github.com/IBM/platform-services-go-sdk v0.88.0 - github.com/IBM/project-go-sdk v0.3.9 + github.com/IBM/platform-services-go-sdk v0.87.0 + github.com/IBM/project-go-sdk v0.3.8 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 github.com/IBM/sarama v1.45.0 github.com/IBM/scc-go-sdk/v5 v5.5.3 @@ -38,7 +38,7 @@ require ( github.com/IBM/secrets-manager-go-sdk/v2 v2.0.15 github.com/IBM/vmware-go-sdk v0.1.5 github.com/IBM/vpc-beta-go-sdk v0.8.0 - github.com/IBM/vpc-go-sdk v0.74.1 + github.com/IBM/vpc-go-sdk v0.73.0 github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5 github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/akamai/AkamaiOPEN-edgegrid-golang/v5 v5.0.0 @@ -193,16 +193,14 @@ require ( go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect - go.uber.org/atomic v1.9.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect - go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect golang.org/x/mod v0.26.0 // indirect golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.27.0 // indirect golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.35.0 // indirect + golang.org/x/sys v0.36.0 // indirect golang.org/x/term v0.34.0 // indirect golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.9.0 // indirect @@ -234,6 +232,8 @@ replace github.com/hashicorp/vault => github.com/hashicorp/vault v1.18.2 replace github.com/hashicorp/vault/api/auth/approle => github.com/hashicorp/vault/api/auth/approle v0.8.0 +replace github.com/IBM/platform-services-go-sdk v0.86.0 => ../platform-services-go-sdk + exclude ( github.com/kubernetes-incubator/external-storage v0.0.0-00010101000000-000000000000 github.com/kubernetes-incubator/external-storage v0.20.4-openstorage-rc2 diff --git a/go.sum b/go.sum index 0d5e1c91e3..62e9eee7e8 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/IBM/appconfiguration-go-admin-sdk v0.5.1 h1:EAotl3yQ/u5u/uBryySJMm0CO github.com/IBM/appconfiguration-go-admin-sdk v0.5.1/go.mod h1:ikqhyFenxA/QgGh4vItBNjPes0NcI+teRof+z7pzLYM= github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f h1:4c1kqY4GqmkQ+tO03rneDb74Tv7BhTj8jDiDB1p8mdM= github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f/go.mod h1:d22kTYY7RYBWcQlZpqrSdshpB/lJ16viWS5Sbjtlc8s= -github.com/IBM/cloud-databases-go-sdk v0.8.1 h1:ULQ5L8V/9z79/qS185LqbIK2LD4kMtk3Hdhp4lFMVcw= -github.com/IBM/cloud-databases-go-sdk v0.8.1/go.mod h1:JYucI1PdwqbAd8XGdDAchxzxRP7bxOh1zUnseovHKsc= +github.com/IBM/cloud-databases-go-sdk v0.8.0 h1:uMFqhnc/roVTzfCaUsJ23eaHKjChhGpM1F7Mpxik0bo= +github.com/IBM/cloud-databases-go-sdk v0.8.0/go.mod h1:JYucI1PdwqbAd8XGdDAchxzxRP7bxOh1zUnseovHKsc= github.com/IBM/cloud-db2-go-sdk v0.2.4 h1:kCiFoKav2FVrZqukoSAp0ivH8xBZDYipFBNkiyAXDw0= github.com/IBM/cloud-db2-go-sdk v0.2.4/go.mod h1:U1E6eRDEL5zWTE+aP9zWRC1DyaXB29a0kkTvhlCT9Wc= github.com/IBM/cloudant-go-sdk v0.8.0 h1:XzaqZFy5fm1Q9+iK52X5zRW39SHaahT9pf5SRgVTsTY= @@ -127,8 +127,8 @@ github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2y github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= github.com/IBM/go-sdk-core/v5 v5.21.0 h1:DUnYhvC4SoC8T84rx5omnhY3+xcQg/Whyoa3mDPIMkk= github.com/IBM/go-sdk-core/v5 v5.21.0/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 h1:bVf67pkGi5dp8SQXMcam8c1JrEwNRkXVcz3FkaalmYg= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5/go.mod h1:m+7lHOrXJwYPbrdxMmKl96tT7OJMMhpyKnQgnaCcy+w= +github.com/IBM/ibm-backup-recovery-sdk-go v1.0.4 h1:Rec8KbCZr8f2iZHc9k2y5QNLVsTAAj3ZOzyZtG/mpCs= +github.com/IBM/ibm-backup-recovery-sdk-go v1.0.4/go.mod h1:0YdSYZSoM09c//Dy/lDf/QBb9gGAjh9GYeHWCpDRIMs= github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA= github.com/IBM/ibm-cos-sdk-go v1.12.2/go.mod h1:ODYcmrmdpjo5hVguq9RbD6xmC8xb1XZMG7NefUbJNcc= github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 h1:956Nqk0eKI3lq+AkzWXZDid4UZHRz0wWh1LwkleBsWk= @@ -148,10 +148,10 @@ github.com/IBM/mqcloud-go-sdk v0.4.0 h1:BuZNXA6iYEg5OEPr13CMGrhH0ew4rH/4L56b1nFt github.com/IBM/mqcloud-go-sdk v0.4.0/go.mod h1:7zigCUz6k3eRrNE8KOcDkY72oPppEmoQifF+SB0NPRM= github.com/IBM/networking-go-sdk v0.51.12 h1:2qv6neG8msFR1dtf9v+rbaC2gIkw9HnzohvQpgVye5w= github.com/IBM/networking-go-sdk v0.51.12/go.mod h1:TAXWyBUk3C3R7aS1m84EfKdnDcBMZMAClwLfDj/SYZc= -github.com/IBM/platform-services-go-sdk v0.88.0 h1:PZZYg+6FSvkiyLoRMabGHHzsR9OEwhUuTUsuKs3E4qg= -github.com/IBM/platform-services-go-sdk v0.88.0/go.mod h1:aGD045m6I8pfcB77wft8w2cHqWOJjcM3YSSV55BX0Js= -github.com/IBM/project-go-sdk v0.3.9 h1:D/UfMMn+vMQyvYf9EfocV6HrD3HcVpeIVoUSjNKuROo= -github.com/IBM/project-go-sdk v0.3.9/go.mod h1:FOJM9ihQV3EEAY6YigcWiTNfVCThtdY8bLC/nhQHFvo= +github.com/IBM/platform-services-go-sdk v0.87.0 h1:hLx/I7n7cb1CyAXdb2qypmCoFiYuxh2g50qN8OGnEQc= +github.com/IBM/platform-services-go-sdk v0.87.0/go.mod h1:aGD045m6I8pfcB77wft8w2cHqWOJjcM3YSSV55BX0Js= +github.com/IBM/project-go-sdk v0.3.8 h1:RPu4vrNHLrs1+csKMI/TWXCgJMf23la8IM2OBd+zb1o= +github.com/IBM/project-go-sdk v0.3.8/go.mod h1:FOJM9ihQV3EEAY6YigcWiTNfVCThtdY8bLC/nhQHFvo= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5/go.mod h1:b07XHUVh0XYnQE9s2mqgjYST1h9buaQNqN4EcKhOsX0= github.com/IBM/sarama v1.45.0 h1:IzeBevTn809IJ/dhNKhP5mpxEXTmELuezO2tgHD9G5E= @@ -168,8 +168,8 @@ github.com/IBM/vmware-go-sdk v0.1.5 h1:aQbwcJBceaaauuIoJ0OJn+ttwjb+QTX6XV9Jbrdpj github.com/IBM/vmware-go-sdk v0.1.5/go.mod h1:OyQKRInGGsBaOyE5LIZCqH7b1DZ01BvIYa8BgGy+wWo= github.com/IBM/vpc-beta-go-sdk v0.8.0 h1:cEPpv4iw3Ba5W2d0AWg3TIbKeJ8y1nPuUuibR5Jt9eE= github.com/IBM/vpc-beta-go-sdk v0.8.0/go.mod h1:hORgIyTFRzXrZIK9IohaWmCRBBlYiDRagsufi7M6akE= -github.com/IBM/vpc-go-sdk v0.74.1 h1:qkWwdlILx3ZVNWht96CdlPKwhKL/y3ItN6XmwJ1rShM= -github.com/IBM/vpc-go-sdk v0.74.1/go.mod h1:8lX6TpeYBbx1Vd4KTgM3PPQ4y3auGOPuD6qq3UBDdug= +github.com/IBM/vpc-go-sdk v0.73.0 h1:gMVR6NSzw8Y7pCkcDa92+heQTzu5X64q8bnBBpLJpFE= +github.com/IBM/vpc-go-sdk v0.73.0/go.mod h1:K3vVlje72PYE3ZRt1iouE+jSIq+vCyYzT1HiFC06hUA= github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56 h1:vuquMR410psHNax14XKNWa0Ae/kYgWJcXi0IFuX60N0= github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56/go.mod h1:Zb3OT4l0mf7P/GOs2w2Ilj5sdm5Whoq3pa24dAEBHFc= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= @@ -1258,9 +1258,8 @@ go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -1270,8 +1269,8 @@ go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= @@ -1598,8 +1597,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From 6e8500ab8944a24bfb9090b078411d1e4da7d355 Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Tue, 4 Nov 2025 23:00:29 +0530 Subject: [PATCH 11/15] update code --- ibm/conns/config.go | 6 +- ibm/provider/provider.go | 24 ++--- ..._ibm_backup_recovery_manager_get_alerts.go | 23 ++++- ..._recovery_manager_get_alerts_resolution.go | 25 +++++- ...ackup_recovery_manager_get_alerts_stats.go | 23 ++++- ...kup_recovery_manager_get_alerts_summary.go | 23 ++++- ...ackup_recovery_manager_get_cluster_info.go | 23 ++++- ...ecovery_manager_get_compatible_clusters.go | 25 +++++- ..._recovery_manager_get_management_alerts.go | 25 +++++- ...y_manager_get_management_alerts_summary.go | 23 ++++- ...ckup_recovery_manager_get_upgrades_info.go | 25 +++++- ...ecovery_manager_cancel_cluster_upgrades.go | 37 +++++++- ...ecovery_manager_create_cluster_upgrades.go | 37 +++++++- ...ecovery_manager_update_cluster_upgrades.go | 37 +++++++- ibm/service/backuprecovery/utils.go | 89 +++++++++++++++++++ ...ager_cancel_cluster_upgrades.html.markdown | 47 ++++++++++ ...ager_update_cluster_upgrades.html.markdown | 82 +++++++++++++++++ ...recovery_source_registration.html.markdown | 9 +- 18 files changed, 533 insertions(+), 50 deletions(-) create mode 100644 website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown create mode 100644 website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown diff --git a/ibm/conns/config.go b/ibm/conns/config.go index 23bde697d3..3da91fc7f5 100644 --- a/ibm/conns/config.go +++ b/ibm/conns/config.go @@ -1661,11 +1661,12 @@ func (c *Config) ClientSession() (interface{}, error) { // Construct the service options. var backupRecoveryURL string = "https://default.backup-recovery.cloud.ibm.com/v2" var backupRecoveryConnectorURL string - var backupRecoveryManagerURL string + var backupRecoveryManagerURL string = "https://manager.backup-recovery.cloud.ibm.com/v2" if fileMap != nil && c.Visibility != "public-and-private" { backupRecoveryURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_ENDPOINT", c.Region, backupRecoveryURL) backupRecoveryConnectorURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_CONNECTOR_ENDPOINT", c.Region, backupRecoveryConnectorURL) + backupRecoveryManagerURL = fileFallBack(fileMap, c.Visibility, "IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT", c.Region, backupRecoveryConnectorURL) } backupRecoveryClientOptions := &backuprecoveryv1.BackupRecoveryV1Options{ @@ -1717,9 +1718,6 @@ func (c *Config) ClientSession() (interface{}, error) { Authenticator: backupRecoveryManagerClientAuthenticator, URL: EnvFallBack([]string{"IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT"}, backupRecoveryManagerURL), } - if backupRecoveryManagerClientOptions.URL == "" { - session.backupRecoveryManagerClientErr = fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_ENDPOINT not set in env or endpoints file") - } // Construct the service client. session.backupRecoveryManagerClient, err = backuprecoveryv1.NewBackupRecoveryManagementSreApiV1(backupRecoveryManagerClientOptions) if err != nil { diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index da653e6214..6d6b94e9c2 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -291,15 +291,15 @@ func Provider() *schema.Provider { "ibm_backup_recovery_protection_sources": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryProtectionSources()), "ibm_backup_recovery_connector_get_users": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryConnectorGetUsers()), "ibm_backup_recovery_registration_info": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryRegistrationInfo()), - "ibm_backup_recovery_manager_get_management_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlerts(), - "ibm_backup_recovery_manager_get_alerts_stats": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsStats(), - "ibm_backup_recovery_manager_get_alerts_resolution": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsResolution(), - "ibm_backup_recovery_manager_get_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsSummary(), - "ibm_backup_recovery_manager_get_management_alerts_summary": backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummary(), - "ibm_backup_recovery_manager_get_alerts": backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlerts(), - "ibm_backup_recovery_manager_get_upgrades_info": backuprecovery.DataSourceIbmBackupRecoveryManagerGetUpgradesInfo(), - "ibm_backup_recovery_manager_get_compatible_clusters": backuprecovery.DataSourceIbmBackupRecoveryManagerGetCompatibleClusters(), - "ibm_backup_recovery_manager_get_cluster_info": backuprecovery.DataSourceIbmBackupRecoveryManagerGetClusterInfo(), + "ibm_backup_recovery_manager_get_management_alerts": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlerts()), + "ibm_backup_recovery_manager_get_alerts_stats": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsStats()), + "ibm_backup_recovery_manager_get_alerts_resolution": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsResolution()), + "ibm_backup_recovery_manager_get_alerts_summary": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlertsSummary()), + "ibm_backup_recovery_manager_get_management_alerts_summary": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummary()), + "ibm_backup_recovery_manager_get_alerts": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetAlerts()), + "ibm_backup_recovery_manager_get_upgrades_info": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetUpgradesInfo()), + "ibm_backup_recovery_manager_get_compatible_clusters": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetCompatibleClusters()), + "ibm_backup_recovery_manager_get_cluster_info": backuprecovery.AddInstanceFields(backuprecovery.DataSourceIbmBackupRecoveryManagerGetClusterInfo()), // // AppID "ibm_appid_action_url": appid.DataSourceIBMAppIDActionURL(), @@ -1152,9 +1152,9 @@ func Provider() *schema.Provider { "ibm_backup_recovery_connector_registration": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryConnectorRegistration()), "ibm_backup_recovery_connector_access_token": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryConnectorAccessToken()), "ibm_backup_recovery_connector_update_user": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryConnectorUpdateUser()), - "ibm_backup_recovery_manager_create_cluster_upgrades": backuprecovery.ResourceIbmBackupRecoveryManagerCreateClusterUpgrades(), - "ibm_backup_recovery_manager_update_cluster_upgrades": backuprecovery.ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades(), - "ibm_backup_recovery_manager_cancel_cluster_upgrades": backuprecovery.ResourceIbmBackupRecoveryManagerCancelClusterUpgrades(), + "ibm_backup_recovery_manager_create_cluster_upgrades": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryManagerCreateClusterUpgrades()), + "ibm_backup_recovery_manager_update_cluster_upgrades": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades()), + "ibm_backup_recovery_manager_cancel_cluster_upgrades": backuprecovery.AddInstanceFields(backuprecovery.ResourceIbmBackupRecoveryManagerCancelClusterUpgrades()), "ibm_app": cloudfoundry.ResourceIBMApp(), "ibm_app_domain_private": cloudfoundry.ResourceIBMAppDomainPrivate(), diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go index 2370f62db5..b77fdaab0f 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts.go @@ -369,13 +369,32 @@ func DataSourceIbmBackupRecoveryManagerGetAlerts() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getAlertsOptions := &backuprecoveryv1.GetAlertsOptions{} if _, ok := d.GetOk("alert_ids"); ok { @@ -467,7 +486,7 @@ func dataSourceIbmBackupRecoveryManagerGetAlertsRead(context context.Context, d getAlertsOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) } - alertList, _, err := managementSreApiClient.GetAlertsWithContext(context, getAlertsOptions) + alertList, _, err := managementApiClient.GetAlertsWithContext(context, getAlertsOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go index b342bf3cb2..55b7025db0 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution.go @@ -138,13 +138,32 @@ func DataSourceIbmBackupRecoveryManagerGetAlertsResolution() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetAlertsResolutionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_alerts_resolution", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_alerts_resolution", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getManagementAlertResolutionOptions := &backuprecoveryv1.GetManagementAlertResolutionOptions{} getManagementAlertResolutionOptions.SetMaxResolutions(int64(d.Get("max_resolutions").(int))) @@ -155,7 +174,7 @@ func dataSourceIbmBackupRecoveryManagerGetAlertsResolutionRead(context context.C getManagementAlertResolutionOptions.SetResolutionID(d.Get("resolution_id").(string)) } - alertResolutionsList, _, err := managementSreApiClient.GetManagementAlertResolutionWithContext(context, getManagementAlertResolutionOptions) + alertResolutionsList, _, err := managementApiClient.GetManagementAlertResolutionWithContext(context, getManagementAlertResolutionOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertResolutionWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -173,7 +192,7 @@ func dataSourceIbmBackupRecoveryManagerGetAlertsResolutionRead(context context.C } alertResolutionsListResult = append(alertResolutionsListResult, alertResolutionsListItemMap) } - if err = d.Set("alert_resolutions_list", alertResolutionsList); err != nil { + if err = d.Set("alert_resolutions_list", alertResolutionsListResult); err != nil { return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alert_resolutions_list: %s", err), "(Data) ibm_backup_recovery_manager_get_alerts_resolution", "read", "set-alert_resolutions_list").GetDiag() } } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go index a9ebf45896..f7a822ae14 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats.go @@ -365,13 +365,32 @@ func DataSourceIbmBackupRecoveryManagerGetAlertsStats() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetAlertsStatsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_alerts_stats", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_alerts_stats", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getManagementAlertsStatsOptions := &backuprecoveryv1.GetManagementAlertsStatsOptions{} getManagementAlertsStatsOptions.SetStartTimeUsecs(int64(d.Get("start_time_usecs").(int))) @@ -415,7 +434,7 @@ func dataSourceIbmBackupRecoveryManagerGetAlertsStatsRead(context context.Contex getManagementAlertsStatsOptions.SetTenantIds(tenantIds) } - mcmActiveAlertsStats, _, err := managementSreApiClient.GetManagementAlertsStatsWithContext(context, getManagementAlertsStatsOptions) + mcmActiveAlertsStats, _, err := managementApiClient.GetManagementAlertsStatsWithContext(context, getManagementAlertsStatsOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsStatsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_stats", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go index 341a69a5fb..7c71cc194f 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary.go @@ -107,13 +107,32 @@ func DataSourceIbmBackupRecoveryManagerGetAlertsSummary() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getAlertSummaryOptions := &backuprecoveryv1.GetAlertSummaryOptions{} if _, ok := d.GetOk("start_time_usecs"); ok { @@ -145,7 +164,7 @@ func dataSourceIbmBackupRecoveryManagerGetAlertsSummaryRead(context context.Cont getAlertSummaryOptions.SetXScopeIdentifier(d.Get("x_scope_identifier").(string)) } - alertsSummaryResponse, _, err := managementSreApiClient.GetAlertSummaryWithContext(context, getAlertSummaryOptions) + alertsSummaryResponse, _, err := managementApiClient.GetAlertSummaryWithContext(context, getAlertSummaryOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetAlertSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_alerts_summary", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go index 534a2600ae..ec01c59735 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_cluster_info.go @@ -289,16 +289,35 @@ func DataSourceIbmBackupRecoveryManagerGetClusterInfo() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetClusterInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_cluster_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_cluster_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getClustersInfoOptions := &backuprecoveryv1.GetClustersInfoOptions{} - clusterDetails, _, err := managementSreApiClient.GetClustersInfoWithContext(context, getClustersInfoOptions) + clusterDetails, _, err := managementApiClient.GetClustersInfoWithContext(context, getClustersInfoOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetClustersInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_cluster_info", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go index 626bed087d..da920a59f7 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters.go @@ -64,20 +64,39 @@ func DataSourceIbmBackupRecoveryManagerGetCompatibleClusters() *schema.Resource } func dataSourceIbmBackupRecoveryManagerGetCompatibleClustersRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_compatible_clusters", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_compatible_clusters", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + compatibleClustersForReleaseOptions := &backuprecoveryv1.CompatibleClustersForReleaseOptions{} if _, ok := d.GetOk("release_version"); ok { compatibleClustersForReleaseOptions.SetReleaseVersion(d.Get("release_version").(string)) } - compatibleClusters, _, err := managementSreApiClient.CompatibleClustersForReleaseWithContext(context, compatibleClustersForReleaseOptions) + compatibleClusters, _, err := managementApiClient.CompatibleClustersForReleaseWithContext(context, compatibleClustersForReleaseOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CompatibleClustersForReleaseWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -95,7 +114,7 @@ func dataSourceIbmBackupRecoveryManagerGetCompatibleClustersRead(context context } compatibleClustersResult = append(compatibleClustersResult, compatibleClustersItemMap) } - if err = d.Set("compatible_clusters", compatibleClusters); err != nil { + if err = d.Set("compatible_clusters", compatibleClustersResult); err != nil { return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting compatible_clusters: %s", err), "(Data) ibm_backup_recovery_manager_get_compatible_clusters", "read", "set-compatible_clusters").GetDiag() } } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go index 438fc1c5d6..a96fbb68bc 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts.go @@ -321,13 +321,32 @@ func DataSourceIbmBackupRecoveryManagerGetManagementAlerts() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetManagementAlertsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_management_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_management_alerts", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getManagementAlertsOptions := &backuprecoveryv1.GetManagementAlertsOptions{} if _, ok := d.GetOk("alert_id_list"); ok { @@ -439,7 +458,7 @@ func dataSourceIbmBackupRecoveryManagerGetManagementAlertsRead(context context.C getManagementAlertsOptions.SetServiceInstanceIds(serviceInstanceIds) } - alertsList, _, err := managementSreApiClient.GetManagementAlertsWithContext(context, getManagementAlertsOptions) + alertsList, _, err := managementApiClient.GetManagementAlertsWithContext(context, getManagementAlertsOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -456,7 +475,7 @@ func dataSourceIbmBackupRecoveryManagerGetManagementAlertsRead(context context.C } alertsListResult = append(alertsListResult, alertsListItemMap) } - if err = d.Set("alerts_list", alertsList); err != nil { + if err = d.Set("alerts_list", alertsListResult); err != nil { return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting alerts_list: %s", err), "(Data) ibm_backup_recovery_manager_get_management_alerts", "read", "set-alerts_list").GetDiag() } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go index d7259e2e84..b133295dc2 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary.go @@ -97,13 +97,32 @@ func DataSourceIbmBackupRecoveryManagerGetManagementAlertsSummary() *schema.Reso } func dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_management_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_management_alerts_summary", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + getManagementAlertsSummaryOptions := &backuprecoveryv1.GetManagementAlertsSummaryOptions{} if _, ok := d.GetOk("cluster_identifiers"); ok { @@ -129,7 +148,7 @@ func dataSourceIbmBackupRecoveryManagerGetManagementAlertsSummaryRead(context co getManagementAlertsSummaryOptions.SetStatesList(statesList) } - alertsManagementSummaryResponse, _, err := managementSreApiClient.GetManagementAlertsSummaryWithContext(context, getManagementAlertsSummaryOptions) + alertsManagementSummaryResponse, _, err := managementApiClient.GetManagementAlertsSummaryWithContext(context, getManagementAlertsSummaryOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetManagementAlertsSummaryWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_management_alerts_summary", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go index fc832c226e..65273e6fdd 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info.go @@ -116,13 +116,32 @@ func DataSourceIbmBackupRecoveryManagerGetUpgradesInfo() *schema.Resource { } func dataSourceIbmBackupRecoveryManagerGetUpgradesInfoRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_get_upgrades_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_get_upgrades_info", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + clustersUpgradesInfoOptions := &backuprecoveryv1.ClustersUpgradesInfoOptions{} if _, ok := d.GetOk("cluster_identifiers"); ok { @@ -134,7 +153,7 @@ func dataSourceIbmBackupRecoveryManagerGetUpgradesInfoRead(context context.Conte clustersUpgradesInfoOptions.SetClusterIdentifiers(clusterIdentifiers) } - upgradesInfo, _, err := managementSreApiClient.ClustersUpgradesInfoWithContext(context, clustersUpgradesInfoOptions) + upgradesInfo, _, err := managementApiClient.ClustersUpgradesInfoWithContext(context, clustersUpgradesInfoOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ClustersUpgradesInfoWithContext failed: %s", err.Error()), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -152,7 +171,7 @@ func dataSourceIbmBackupRecoveryManagerGetUpgradesInfoRead(context context.Conte } upgradesInfoResult = append(upgradesInfoResult, upgradesInfoItemMap) } - if err = d.Set("upgrades_info", upgradesInfo); err != nil { + if err = d.Set("upgrades_info", upgradesInfoResult); err != nil { return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting upgrades_info: %s", err), "(Data) ibm_backup_recovery_manager_get_upgrades_info", "read", "set-upgrades_info").GetDiag() } } diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go index 23013ea156..4b55bfd39d 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go @@ -27,6 +27,7 @@ func ResourceIbmBackupRecoveryManagerCancelClusterUpgrades() *schema.Resource { CreateContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesCreate, ReadContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesRead, DeleteContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesDelete, + UpdateContext: resourceIbmBackupRecoveryManagerCancelClusterUpgradesUpdate, Importer: &schema.ResourceImporter{}, Schema: map[string]*schema.Schema{ @@ -75,13 +76,32 @@ func ResourceIbmBackupRecoveryManagerCancelClusterUpgrades() *schema.Resource { } func resourceIbmBackupRecoveryManagerCancelClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + deleteClustersUpgradesOptions := &backuprecoveryv1.DeleteClustersUpgradesOptions{} if _, ok := d.GetOk("cluster_identifiers"); ok { @@ -93,7 +113,7 @@ func resourceIbmBackupRecoveryManagerCancelClusterUpgradesCreate(context context deleteClustersUpgradesOptions.SetClusterIdentifiers(clusterIdentifiers) } - upgradesCancelResponse, _, err := managementSreApiClient.DeleteClustersUpgradesWithContext(context, deleteClustersUpgradesOptions) + upgradesCancelResponse, _, err := managementApiClient.DeleteClustersUpgradesWithContext(context, deleteClustersUpgradesOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "read") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -129,6 +149,19 @@ func resourceIbmBackupRecoveryManagerCancelClusterUpgradesRead(context context.C return nil } +func resourceIbmBackupRecoveryManagerCancelClusterUpgradesUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Update Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + func resourceIbmBackupRecoveryManagerCancelClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { // This resource does not support a "delete" operation. var diags diag.Diagnostics diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go index b8e764366f..6a43f79885 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go @@ -27,6 +27,7 @@ func ResourceIbmBackupRecoveryManagerCreateClusterUpgrades() *schema.Resource { CreateContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesCreate, ReadContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesRead, DeleteContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesDelete, + UpdateContext: resourceIbmBackupRecoveryManagerCreateClusterUpgradesUpdate, Importer: &schema.ResourceImporter{}, Schema: map[string]*schema.Schema{ @@ -190,13 +191,32 @@ func ResourceIbmBackupRecoveryManagerCreateClusterUpgrades() *schema.Resource { } func resourceIbmBackupRecoveryManagerCreateClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_create_cluster_upgrades", "create", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_cancel_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_create_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + createClustersUpgradesOptions := &backuprecoveryv1.CreateClustersUpgradesOptions{} if _, ok := d.GetOk("auth_headers"); ok { @@ -246,7 +266,7 @@ func resourceIbmBackupRecoveryManagerCreateClusterUpgradesCreate(context context createClustersUpgradesOptions.SetType(d.Get("type").(string)) } - upgradesResponse, _, err := managementSreApiClient.CreateClustersUpgradesWithContext(context, createClustersUpgradesOptions) + upgradesResponse, _, err := managementApiClient.CreateClustersUpgradesWithContext(context, createClustersUpgradesOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_create_cluster_upgrades", "create") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -298,6 +318,19 @@ func resourceIbmBackupRecoveryManagerCreateClusterUpgradesRead(context context.C return nil } +func resourceIbmBackupRecoveryManagerCreateClusterUpgradesUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Update Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + func resourceIbmBackupRecoveryManagerCreateClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { // This resource does not support a "delete" operation. var diags diag.Diagnostics diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go index 581c97f918..8d8a090ec9 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go @@ -27,6 +27,7 @@ func ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades() *schema.Resource { CreateContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesCreate, ReadContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesRead, DeleteContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesDelete, + UpdateContext: resourceIbmBackupRecoveryManagerUpdateClusterUpgradesUpdate, Importer: &schema.ResourceImporter{}, Schema: map[string]*schema.Schema{ @@ -190,13 +191,32 @@ func ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades() *schema.Resource { } func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - managementSreApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() + managementApiClient, err := meta.(conns.ClientSession).BackupRecoveryManagerV1() if err != nil { tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_manager_update_cluster_upgrades", "create", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_manager_update_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + managementApiClient, err = setManagerClientAuth(managementApiClient, bmxsession, region, endpointType) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to set authenticator for clientSession: %s", err), "ibm_backup_recovery_manager_update_cluster_upgrades", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + if instanceId != "" { + managementApiClient = getManagerClientWithInstanceEndpoint(managementApiClient, bmxsession, instanceId, region, endpointType) + } + updateClustersUpgradesOptions := &backuprecoveryv1.UpdateClustersUpgradesOptions{} if _, ok := d.GetOk("auth_headers"); ok { @@ -246,7 +266,7 @@ func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesCreate(context context updateClustersUpgradesOptions.SetType(d.Get("type").(string)) } - upgradesResponse, _, err := managementSreApiClient.UpdateClustersUpgradesWithContext(context, updateClustersUpgradesOptions) + upgradesResponse, _, err := managementApiClient.UpdateClustersUpgradesWithContext(context, updateClustersUpgradesOptions) if err != nil { tfErr := flex.TerraformErrorf(err, fmt.Sprintf("UpdateClustersUpgradesWithContext failed: %s", err.Error()), "ibm_backup_recovery_manager_update_cluster_upgrades", "create") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) @@ -298,6 +318,19 @@ func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesRead(context context.C return nil } +func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // This resource does not support a "delete" operation. + var diags diag.Diagnostics + warning := diag.Diagnostic{ + Severity: diag.Warning, + Summary: "Update Not Supported", + Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + } + diags = append(diags, warning) + d.SetId("") + return diags +} + func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { // This resource does not support a "delete" operation. var diags diag.Diagnostics diff --git a/ibm/service/backuprecovery/utils.go b/ibm/service/backuprecovery/utils.go index f0edc9e302..bb99ca61c1 100644 --- a/ibm/service/backuprecovery/utils.go +++ b/ibm/service/backuprecovery/utils.go @@ -1,6 +1,7 @@ package backuprecovery import ( + "encoding/json" "fmt" "os" "strings" @@ -93,3 +94,91 @@ func AddInstanceFields(resource *schema.Resource) *schema.Resource { return resource } + +func BackupRecoverManagerEnvFallBack(endpointsFile, endpointType, region, str string) string { + if v := os.Getenv(str); v != "" { + return v + } + return fileFallBack(endpointsFile, endpointType, region, "IBMCLOUD_BACKUP_RECOVERY_MANAGER_API_KEY") + +} + +func fileFallBack(f, visibility, region, key string) string { + fileMap := map[string]interface{}{} + err := json.Unmarshal([]byte(f), &fileMap) + if err != nil { + return "" + } + if val, ok := fileMap[key]; ok { + if v, ok := val.(map[string]interface{})[visibility]; ok { + if r, ok := v.(map[string]interface{})[region]; ok && r.(string) != "" { + return r.(string) + } + } + } + return "" +} + +// Clone the base backup recovery client and set the API endpoint per the instance +func setManagerClientAuth(originalClient *backuprecoveryv1.BackupRecoveryManagementSreApiV1, bmxsession *session.Session, region, endpointType string) (*backuprecoveryv1.BackupRecoveryManagementSreApiV1, error) { + // build the api endpoint + + endpointsFile := bmxsession.Config.EndpointsFile + + apiKey := BackupRecoverManagerEnvFallBack(endpointsFile, endpointType, region, "IBMCLOUD_BACKUP_RECOVERY_MANAGER_API_KEY") + + if apiKey == "" { + err := fmt.Errorf("IBMCLOUD_BACKUP_RECOVERY_MANAGER_API_KEY not set in env or endpoints file") + return nil, err + } + authconfig := &backuprecoveryv1.ManagementSreAuthenticatorConfig{ + ApiKey: apiKey, + } + authenticator, err := backuprecoveryv1.NewManagementSreAuthenticator(authconfig) + if err != nil { + return nil, err + } + + // clone the client and set endpoint + newClient := &backuprecoveryv1.BackupRecoveryManagementSreApiV1{ + Service: originalClient.Service.Clone(), + } + newClient.Service.Options.Authenticator = authenticator + return newClient, nil +} + +// Clone the base backup recovery client and set the API endpoint per the instance +func getManagerClientWithInstanceEndpoint(originalClient *backuprecoveryv1.BackupRecoveryManagementSreApiV1, bmxsession *session.Session, instanceId, region, endpointType string) *backuprecoveryv1.BackupRecoveryManagementSreApiV1 { + // build the api endpoint + + // default endpoint_type is set to public + if instanceId == "" { + return originalClient + } + + domain := "cloud.ibm.com" + serviceName := "backup-recovery" + endpointsFile := bmxsession.Config.EndpointsFile + + iamUrl := os.Getenv("IBMCLOUD_IAM_API_ENDPOINT") + if iamUrl == "" { + iamUrl = conns.FileFallBack(endpointsFile, endpointType, "IBMCLOUD_IAM_API_ENDPOINT", region, "https://iam.cloud.ibm.com") + } + if strings.Contains(iamUrl, "test") { + domain = "test.cloud.ibm.com" + } + + var endpoint string + if endpointType == "private" { + endpoint = fmt.Sprintf("https://%s.sre.private.%s.%s.%s/v2", instanceId, region, serviceName, domain) + } else { + endpoint = fmt.Sprintf("https://%s.sre.%s.%s.%s/v2", instanceId, region, serviceName, domain) + } + + // clone the client and set endpoint + newClient := &backuprecoveryv1.BackupRecoveryManagementSreApiV1{ + Service: originalClient.Service.Clone(), + } + newClient.Service.SetServiceURL(endpoint) + return newClient +} diff --git a/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown new file mode 100644 index 0000000000..098c8e4b71 --- /dev/null +++ b/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown @@ -0,0 +1,47 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_cancel_cluster_upgrades" +description: |- + Manages backup_recovery_manager_cancel_cluster_upgrades. +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_cancel_cluster_upgrades + +Create, update, and delete backup_recovery_manager_cancel_cluster_upgradess with this resource. + +## Example Usage + +```hcl +resource "ibm_backup_recovery_manager_cancel_cluster_upgrades" "backup_recovery_manager_cancel_cluster_upgrades_instance" { +} +``` + +## Argument Reference + +You can specify the following arguments for this resource. + +* `cluster_identifiers` - (Optional, Forces new resource, List) Specifies the list of cluster identifiers. The format is clusterId:clusterIncarnationId. + * Constraints: The list items must match regular expression `/^([0-9]+:[0-9]+)$/`. + +## Attribute Reference + +After your resource is created, you can read values from the listed arguments and the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_cancel_cluster_upgrades. +* `cancelled_upgrade_response_list` - (List) Specifies list of cluster scheduled uprgade cancel response. +Nested schema for **cancelled_upgrade_response_list**: + * `cluster_id` - (Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Integer) Specifies cluster incarnation id. + * `error_message` - (String) Specifies an error message if failed to cancel a scheduled upgrade. + * `is_upgrade_cancel_successful` - (Boolean) Specifies if scheduled upgrade cancelling was successful. + + +## Import + +You can import the `ibm_backup_recovery_manager_cancel_cluster_upgrades` resource by using `id`. Specifies the ID of the object. + +# Syntax +
+$ terraform import ibm_backup_recovery_manager_cancel_cluster_upgrades.backup_recovery_manager_cancel_cluster_upgrades <id>
+
diff --git a/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown new file mode 100644 index 0000000000..d4546a48f5 --- /dev/null +++ b/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown @@ -0,0 +1,82 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_backup_recovery_manager_update_cluster_upgrades" +description: |- + Manages backup_recovery_manager_update_cluster_upgrades. +subcategory: "IBM REST API" +--- + +# ibm_backup_recovery_manager_update_cluster_upgrades + +Create, update, and delete backup_recovery_manager_update_cluster_upgradess with this resource. + +## Example Usage + +```hcl +resource "ibm_backup_recovery_manager_update_cluster_upgrades" "backup_recovery_manager_update_cluster_upgrades_instance" { + auth_headers { + key = "key" + value = "value" + } + clusters { + cluster_id = 1 + cluster_incarnation_id = 1 + current_version = "current_version" + } + patch_upgrade_params { + auth_headers { + key = "key" + value = "value" + } + ignore_pre_checks_failure = true + package_url = "package_url" + target_version = "target_version" + } +} +``` + +## Argument Reference + +You can specify the following arguments for this resource. + +* `auth_headers` - (Optional, Forces new resource, List) Specifies the optional headers for upgrade request. +Nested schema for **auth_headers**: + * `key` - (Required, String) Specifies the key or name of the header. + * `value` - (Required, String) Specifies the value of the header. +* `clusters` - (Optional, Forces new resource, List) Array for clusters to be upgraded. +Nested schema for **clusters**: + * `cluster_id` - (Optional, Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Optional, Integer) Specifies cluster incarnation id. + * `current_version` - (Optional, String) Specifies current version of cluster. +* `interval_for_rolling_upgrade_in_hours` - (Optional, Forces new resource, Integer) Specifies the difference of time between two cluster's upgrade. +* `package_url` - (Optional, Forces new resource, String) Specifies URL from which package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM). +* `patch_upgrade_params` - (Optional, Forces new resource, List) Specifies the parameters for patch upgrade request. +Nested schema for **patch_upgrade_params**: + * `auth_headers` - (Optional, List) Specifies the optional headers for the patch cluster request. + Nested schema for **auth_headers**: + * `key` - (Required, String) Specifies the key or name of the header. + * `value` - (Required, String) Specifies the value of the header. + * `ignore_pre_checks_failure` - (Optional, Boolean) Specify if pre check results can be ignored. + * Constraints: The default value is `false`. + * `package_url` - (Optional, String) Specifies URL from which patch package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM). + * `target_version` - (Optional, String) Specifies target patch version to which clusters are to be upgraded. +* `target_version` - (Optional, Forces new resource, String) Specifies target version to which clusters are to be upgraded. +* `time_stamp_to_upgrade_at_msecs` - (Optional, Forces new resource, Integer) Specifies the time in msecs at which the cluster has to be upgraded. +* `type` - (Optional, Forces new resource, String) Specifies the type of upgrade to be performed on a cluster. + * Constraints: The default value is `Upgrade`. Allowable values are: `Upgrade`, `Patch`, `UpgradePatch`. + +## Attribute Reference + +After your resource is created, you can read values from the listed arguments and the following attributes. + +* `id` - The unique identifier of the backup_recovery_manager_update_cluster_upgrades. + + +## Import + +You can import the `ibm_backup_recovery_manager_update_cluster_upgrades` resource by using `id`. Specifies the ID of the object. + +# Syntax +
+$ terraform import ibm_backup_recovery_manager_update_cluster_upgrades.backup_recovery_manager_update_cluster_upgrades <id>
+
diff --git a/website/docs/r/backup_recovery_source_registration.html.markdown b/website/docs/r/backup_recovery_source_registration.html.markdown index bea802dc09..0128eadad6 100644 --- a/website/docs/r/backup_recovery_source_registration.html.markdown +++ b/website/docs/r/backup_recovery_source_registration.html.markdown @@ -18,12 +18,9 @@ resource "ibm_backup_recovery_source_registration" "backup_recovery_source_regis key = "key" value = "value" } - connections { - connection_id = 1 - entity_id = 1 - connector_group_id = 1 - data_source_connection_id = "data_source_connection_id" - } + + connection_id = 1 + environment = "kPhysical" kubernetes_params { auto_protect_config { From f0d20ff9f8a6ceea5d76ed7388bb231df74d70df Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Thu, 20 Nov 2025 22:56:19 +0530 Subject: [PATCH 12/15] address comments --- ..._recovery_connection_registration_token.go | 32 +++++++++++++++- ...ecovery_manager_cancel_cluster_upgrades.go | 2 +- ...ecovery_manager_create_cluster_upgrades.go | 2 +- ...ecovery_manager_update_cluster_upgrades.go | 2 +- ...ager_cancel_cluster_upgrades.html.markdown | 10 +---- ...ager_create_cluster_upgrades.html.markdown | 38 +++++++++++++++---- ...ager_update_cluster_upgrades.html.markdown | 10 +---- 7 files changed, 68 insertions(+), 28 deletions(-) diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_connection_registration_token.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_connection_registration_token.go index 6c245d2da9..5bfa9cf2f0 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_connection_registration_token.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_connection_registration_token.go @@ -74,11 +74,23 @@ func checkDiffResourceIbmBackupRecoveryConnectionRegistrationToken(context conte func resourceIbmBackupRecoveryConnectionRegistrationTokenCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { backupRecoveryClient, err := meta.(conns.ClientSession).BackupRecoveryV1() if err != nil { - tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_connection_registration_token", "read", "initialize-client") + tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_connection_registration_token", "create", "initialize-client") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + endpointType := d.Get("endpoint_type").(string) + instanceId, region := getInstanceIdAndRegion(d) + if instanceId != "" && region != "" { + bmxsession, err := meta.(conns.ClientSession).BluemixSession() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("unable to get clientSession"), "ibm_backup_recovery_connection_registration_token", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + backupRecoveryClient = getClientWithInstanceEndpoint(backupRecoveryClient, bmxsession, instanceId, region, endpointType) + } + generateDataSourceConnectionRegistrationTokenOptions := &backuprecoveryv1.GenerateDataSourceConnectionRegistrationTokenOptions{} generateDataSourceConnectionRegistrationTokenOptions.SetConnectionID(d.Get("connection_id").(string)) @@ -86,11 +98,27 @@ func resourceIbmBackupRecoveryConnectionRegistrationTokenCreate(context context. connectionRegistrationTokenString, _, err := backupRecoveryClient.GenerateDataSourceConnectionRegistrationTokenWithContext(context, generateDataSourceConnectionRegistrationTokenOptions) if err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GenerateDataSourceConnectionRegistrationTokenWithContext failed: %s", err.Error()), "ibm_backup_recovery_connection_registration_token", "read") + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GenerateDataSourceConnectionRegistrationTokenWithContext failed: %s", err.Error()), "ibm_backup_recovery_connection_registration_token", "create") log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + if instanceId != "" { + if err := d.Set("instance_id", instanceId); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting instance_id: %s", err), "(Resource) ibm_backup_recovery_connection_registration_token", "create", "set-instance-id").GetDiag() + } + } + if region != "" { + if err := d.Set("region", region); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting region: %s", err), "(Resource) ibm_backup_recovery_connection_registration_token", "create", "set-region").GetDiag() + } + } + + if err = d.Set("endpoint_type", d.Get("endpoint_type").(string)); err != nil { + err = fmt.Errorf("Error setting endpoint_type: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_backup_recovery_connection_registration_token", "create", "set-endpoint-type").GetDiag() + } + d.SetId(resourceIbmBackupRecoveryConnectionRegistrationTokenID(d)) if !core.IsNil(connectionRegistrationTokenString) { diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go index 4b55bfd39d..7066eb2891 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go @@ -33,7 +33,7 @@ func ResourceIbmBackupRecoveryManagerCancelClusterUpgrades() *schema.Resource { Schema: map[string]*schema.Schema{ "cluster_identifiers": &schema.Schema{ Type: schema.TypeList, - Optional: true, + Required: true, ForceNew: true, Description: "Specifies the list of cluster identifiers. The format is clusterId:clusterIncarnationId.", Elem: &schema.Schema{Type: schema.TypeString}, diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go index 6a43f79885..d52a88cb8e 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go @@ -53,7 +53,7 @@ func ResourceIbmBackupRecoveryManagerCreateClusterUpgrades() *schema.Resource { }, "clusters": &schema.Schema{ Type: schema.TypeList, - Optional: true, + Required: true, ForceNew: true, Description: "Array for clusters to be upgraded.", Elem: &schema.Resource{ diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go index 8d8a090ec9..fb0ff63776 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go @@ -53,7 +53,7 @@ func ResourceIbmBackupRecoveryManagerUpdateClusterUpgrades() *schema.Resource { }, "clusters": &schema.Schema{ Type: schema.TypeList, - Optional: true, + Required: true, ForceNew: true, Description: "Array for clusters to be upgraded.", Elem: &schema.Resource{ diff --git a/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown index 098c8e4b71..4065fa09f4 100644 --- a/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown +++ b/website/docs/r/backup_recovery_manager_cancel_cluster_upgrades.html.markdown @@ -21,7 +21,7 @@ resource "ibm_backup_recovery_manager_cancel_cluster_upgrades" "backup_recovery_ You can specify the following arguments for this resource. -* `cluster_identifiers` - (Optional, Forces new resource, List) Specifies the list of cluster identifiers. The format is clusterId:clusterIncarnationId. +* `cluster_identifiers` - (Required, Forces new resource, List) Specifies the list of cluster identifiers. The format is clusterId:clusterIncarnationId. * Constraints: The list items must match regular expression `/^([0-9]+:[0-9]+)$/`. ## Attribute Reference @@ -38,10 +38,4 @@ Nested schema for **cancelled_upgrade_response_list**: ## Import - -You can import the `ibm_backup_recovery_manager_cancel_cluster_upgrades` resource by using `id`. Specifies the ID of the object. - -# Syntax -
-$ terraform import ibm_backup_recovery_manager_cancel_cluster_upgrades.backup_recovery_manager_cancel_cluster_upgrades <id>
-
+Not Supported diff --git a/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown index c51618e30a..e467cb3a23 100644 --- a/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown +++ b/website/docs/r/backup_recovery_manager_create_cluster_upgrades.html.markdown @@ -17,6 +17,36 @@ resource "ibm_backup_recovery_manager_create_cluster_upgrades" "backup_recovery_ } ``` +## Argument Reference + +You can specify the following arguments for this resource. + +* `auth_headers` - (Optional, Forces new resource, List) Specifies the optional headers for upgrade request. +Nested schema for **auth_headers**: + * `key` - (Required, String) Specifies the key or name of the header. + * `value` - (Required, String) Specifies the value of the header. +* `clusters` - (Required, Forces new resource, List) Array for clusters to be upgraded. +Nested schema for **clusters**: + * `cluster_id` - (Optional, Integer) Specifies cluster id. + * `cluster_incarnation_id` - (Optional, Integer) Specifies cluster incarnation id. + * `current_version` - (Optional, String) Specifies current version of cluster. +* `interval_for_rolling_upgrade_in_hours` - (Optional, Forces new resource, Integer) Specifies the difference of time between two cluster's upgrade. +* `package_url` - (Optional, Forces new resource, String) Specifies URL from which package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM). +* `patch_upgrade_params` - (Optional, Forces new resource, List) Specifies the parameters for patch upgrade request. +Nested schema for **patch_upgrade_params**: + * `auth_headers` - (Optional, List) Specifies the optional headers for the patch cluster request. + Nested schema for **auth_headers**: + * `key` - (Required, String) Specifies the key or name of the header. + * `value` - (Required, String) Specifies the value of the header. + * `ignore_pre_checks_failure` - (Optional, Boolean) Specify if pre check results can be ignored. + * Constraints: The default value is `false`. + * `package_url` - (Optional, String) Specifies URL from which patch package can be downloaded. Note: This option is only supported in Multi-Cluster Manager (MCM). + * `target_version` - (Optional, String) Specifies target patch version to which clusters are to be upgraded. +* `target_version` - (Optional, Forces new resource, String) Specifies target version to which clusters are to be upgraded. +* `time_stamp_to_upgrade_at_msecs` - (Optional, Forces new resource, Integer) Specifies the time in msecs at which the cluster has to be upgraded. +* `type` - (Optional, Forces new resource, String) Specifies the type of upgrade to be performed on a cluster. + * Constraints: The default value is `Upgrade`. Allowable values are: `Upgrade`, `Patch`, `UpgradePatch`. + ## Attribute Reference @@ -32,10 +62,4 @@ Nested schema for **upgrade_response_list**: ## Import - -You can import the `ibm_backup_recovery_manager_create_cluster_upgrades` resource by using `id`. Specifies the ID of the object. - -# Syntax -
-$ terraform import ibm_backup_recovery_manager_create_cluster_upgrades.backup_recovery_manager_create_cluster_upgrades <id>
-
+Not Supported diff --git a/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown b/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown index d4546a48f5..283d84c5e7 100644 --- a/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown +++ b/website/docs/r/backup_recovery_manager_update_cluster_upgrades.html.markdown @@ -43,7 +43,7 @@ You can specify the following arguments for this resource. Nested schema for **auth_headers**: * `key` - (Required, String) Specifies the key or name of the header. * `value` - (Required, String) Specifies the value of the header. -* `clusters` - (Optional, Forces new resource, List) Array for clusters to be upgraded. +* `clusters` - (Required, Forces new resource, List) Array for clusters to be upgraded. Nested schema for **clusters**: * `cluster_id` - (Optional, Integer) Specifies cluster id. * `cluster_incarnation_id` - (Optional, Integer) Specifies cluster incarnation id. @@ -73,10 +73,4 @@ After your resource is created, you can read values from the listed arguments an ## Import - -You can import the `ibm_backup_recovery_manager_update_cluster_upgrades` resource by using `id`. Specifies the ID of the object. - -# Syntax -
-$ terraform import ibm_backup_recovery_manager_update_cluster_upgrades.backup_recovery_manager_update_cluster_upgrades <id>
-
+Not Supported From 70745f3e8fe6c2ccdae1bf7ad3648745fcea4ecf Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Mon, 8 Dec 2025 00:20:32 +0530 Subject: [PATCH 13/15] update code --- go.mod | 26 +++++----- go.sum | 52 ++++++++++--------- ...very_manager_get_alerts_resolution_test.go | 4 +- ..._recovery_manager_get_alerts_stats_test.go | 10 +--- ...ecovery_manager_get_alerts_summary_test.go | 8 +-- ...backup_recovery_manager_get_alerts_test.go | 16 ------ ...ry_manager_get_compatible_clusters_test.go | 1 - ...ager_get_management_alerts_summary_test.go | 4 -- ...very_manager_get_management_alerts_test.go | 17 +----- ...recovery_manager_get_upgrades_info_test.go | 2 +- 10 files changed, 48 insertions(+), 92 deletions(-) diff --git a/go.mod b/go.mod index cc47348a47..96123d3d2f 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/IBM/event-notifications-go-admin-sdk v0.20.0 github.com/IBM/eventstreams-go-sdk v1.4.0 github.com/IBM/go-sdk-core/v5 v5.21.0 - github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 + github.com/IBM/ibm-backup-recovery-sdk-go v1.1.0 github.com/IBM/ibm-cos-sdk-go v1.12.2 github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20250305134146-e023c2e84762 @@ -44,7 +44,7 @@ require ( github.com/akamai/AkamaiOPEN-edgegrid-golang/v5 v5.0.0 github.com/apache/openwhisk-client-go v0.0.0-20200201143223-a804fb82d105 github.com/apparentlymart/go-cidr v1.1.0 - github.com/go-openapi/strfmt v0.23.0 + github.com/go-openapi/strfmt v0.25.0 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 @@ -60,7 +60,7 @@ require ( github.com/rook/rook/pkg/apis v0.0.0-20250619203122-80563e28b685 github.com/softlayer/softlayer-go v1.0.3 github.com/stretchr/testify v1.11.1 - golang.org/x/crypto v0.41.0 + golang.org/x/crypto v0.44.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible k8s.io/api v0.33.4 @@ -78,7 +78,6 @@ require ( github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect github.com/apex/log v1.9.0 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cloudflare/circl v1.6.1 // indirect github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect @@ -98,7 +97,7 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.23.0 // indirect - github.com/go-openapi/errors v0.22.1 // indirect + github.com/go-openapi/errors v0.22.4 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/loads v0.22.0 // indirect @@ -110,6 +109,7 @@ require ( github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.27.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect @@ -188,7 +188,7 @@ require ( github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/zclconf/go-cty v1.16.3 // indirect - go.mongodb.org/mongo-driver v1.17.4 // indirect + go.mongodb.org/mongo-driver v1.17.6 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect @@ -196,15 +196,15 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.43.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.46.0 // indirect golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/term v0.34.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sync v0.18.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/term v0.37.0 // indirect + golang.org/x/text v0.31.0 // indirect golang.org/x/time v0.9.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.38.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect google.golang.org/grpc v1.72.1 // indirect diff --git a/go.sum b/go.sum index 3d8218723c..384a82283b 100644 --- a/go.sum +++ b/go.sum @@ -127,8 +127,8 @@ github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2y github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= github.com/IBM/go-sdk-core/v5 v5.21.0 h1:DUnYhvC4SoC8T84rx5omnhY3+xcQg/Whyoa3mDPIMkk= github.com/IBM/go-sdk-core/v5 v5.21.0/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 h1:bVf67pkGi5dp8SQXMcam8c1JrEwNRkXVcz3FkaalmYg= -github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5/go.mod h1:m+7lHOrXJwYPbrdxMmKl96tT7OJMMhpyKnQgnaCcy+w= +github.com/IBM/ibm-backup-recovery-sdk-go v1.1.0 h1:dIMtzTCUqRpbTANTMWLjqBetULO5mwpo2guKKkle37c= +github.com/IBM/ibm-backup-recovery-sdk-go v1.1.0/go.mod h1:W2qIMaQerMNKtseRFyi+UmYAhRQI+YL1VqgWclnYcsI= github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA= github.com/IBM/ibm-cos-sdk-go v1.12.2/go.mod h1:ODYcmrmdpjo5hVguq9RbD6xmC8xb1XZMG7NefUbJNcc= github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 h1:956Nqk0eKI3lq+AkzWXZDid4UZHRz0wWh1LwkleBsWk= @@ -413,8 +413,8 @@ github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.20.0/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.21.0/go.mod h1:jxNTMUxRCKj65yb/okJGEtahVd7uvWnuWfj53bse4ho= -github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU= -github.com/go-openapi/errors v0.22.1/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= +github.com/go-openapi/errors v0.22.4 h1:oi2K9mHTOb5DPW2Zjdzs/NIvwi2N3fARKaTJLdNabaM= +github.com/go-openapi/errors v0.22.4/go.mod h1:z9S8ASTUqx7+CP1Q8dD8ewGH/1JWFFLX/2PmAYNQLgk= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= @@ -459,8 +459,8 @@ github.com/go-openapi/strfmt v0.20.1/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicA github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/strfmt v0.22.1/go.mod h1:OfVoytIXJasDkkGvkb1Cceb3BPyMOwk1FgmyyEw7NYg= -github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= -github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= +github.com/go-openapi/strfmt v0.25.0 h1:7R0RX7mbKLa9EYCTHRcCuIPcaqlyQiWNPTXwClK0saQ= +github.com/go-openapi/strfmt v0.25.0/go.mod h1:nNXct7OzbwrMY9+5tLX4I21pzcmE6ccMGXl3jFdPfn8= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= @@ -468,6 +468,8 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= @@ -498,6 +500,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -1234,8 +1238,8 @@ go.mongodb.org/mongo-driver v1.7.0/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8N go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= -go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw= -go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= +go.mongodb.org/mongo-driver v1.17.6 h1:87JUG1wZfWsr6rIz3ZmpH90rL5tea7O3IHuSwHUpsss= +go.mongodb.org/mongo-driver v1.17.6/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1312,8 +1316,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1358,8 +1362,8 @@ golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1437,8 +1441,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1478,8 +1482,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1597,8 +1601,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1617,8 +1621,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1640,8 +1644,8 @@ golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1732,8 +1736,8 @@ golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= -golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go index 538f3871e5..3f6455e280 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_resolution_test.go @@ -35,9 +35,7 @@ func TestAccIbmBackupRecoveryManagerGetAlertsResolutionDataSourceBasic(t *testin func testAccCheckIbmBackupRecoveryManagerGetAlertsResolutionDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_alerts_resolution" "backup_recovery_manager_get_alerts_resolution_instance" { - maxResolutions = 1 - resolutionName = "resolutionName" - resolutionId = "resolutionId" + max_resolutions = 1 } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go index b6811db2fa..a8c7a99177 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_stats_test.go @@ -36,14 +36,8 @@ func TestAccIbmBackupRecoveryManagerGetAlertsStatsDataSourceBasic(t *testing.T) func testAccCheckIbmBackupRecoveryManagerGetAlertsStatsDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_alerts_stats" "backup_recovery_manager_get_alerts_stats_instance" { - startTimeUsecs = 1 - endTimeUsecs = 1 - clusterIds = [ 1 ] - serviceInstanceIds = [ "serviceInstanceIds" ] - regionIds = [ "regionIds" ] - excludeStatsByCluster = true - alertSource = "kCluster" - tenantIds = [ "tenantIds" ] + start_time_usecs = 1748739600000 + end_time_usecs = 1848739600000 } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go index fa08187d81..c09fd5cded 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_summary_test.go @@ -34,12 +34,8 @@ func TestAccIbmBackupRecoveryManagerGetAlertsSummaryDataSourceBasic(t *testing.T func testAccCheckIbmBackupRecoveryManagerGetAlertsSummaryDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_alerts_summary" "backup_recovery_manager_get_alerts_summary_instance" { - startTimeUsecs = 1 - endTimeUsecs = 1 - includeTenants = true - tenantIds = [ "tenantIds" ] - statesList = [ "kResolved" ] - X-Scope-Identifier = "X-Scope-Identifier" + start_time_usecs = 1748739600000 + end_time_usecs = 1848739600000 } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go index ad1f751849..fdcf925f71 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_alerts_test.go @@ -35,22 +35,6 @@ func TestAccIbmBackupRecoveryManagerGetAlertsDataSourceBasic(t *testing.T) { func testAccCheckIbmBackupRecoveryManagerGetAlertsDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_alerts" "backup_recovery_manager_get_alerts_instance" { - alertIds = [ "alertIds" ] - alertTypes = [ 1 ] - alertCategories = [ "kDisk" ] - alertStates = [ "kResolved" ] - alertSeverities = [ "kCritical" ] - alertTypeBuckets = [ "kHardware" ] - startTimeUsecs = 1 - endTimeUsecs = 1 - maxAlerts = 1 - propertyKey = "propertyKey" - propertyValue = "propertyValue" - alertName = "alertName" - resolutionIds = [ 1 ] - tenantIds = [ "tenantIds" ] - allUnderHierarchy = true - X-Scope-Identifier = "X-Scope-Identifier" } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go index c194fee10b..052503292b 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_compatible_clusters_test.go @@ -34,7 +34,6 @@ func TestAccIbmBackupRecoveryManagerGetCompatibleClustersDataSourceBasic(t *test func testAccCheckIbmBackupRecoveryManagerGetCompatibleClustersDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_compatible_clusters" "backup_recovery_manager_get_compatible_clusters_instance" { - releaseVersion = "releaseVersion" } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go index 01d8daf234..c1d3d3c8c0 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_summary_test.go @@ -34,10 +34,6 @@ func TestAccIbmBackupRecoveryManagerGetManagementAlertsSummaryDataSourceBasic(t func testAccCheckIbmBackupRecoveryManagerGetManagementAlertsSummaryDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_management_alerts_summary" "backup_recovery_manager_get_management_alerts_summary_instance" { - clusterIdentifiers = [ "clusterIdentifiers" ] - startTimeUsecs = 1 - endTimeUsecs = 1 - statesList = [ "kResolved" ] } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go index 554b28c59e..9071f1af5f 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_management_alerts_test.go @@ -35,22 +35,7 @@ func TestAccIbmBackupRecoveryManagerGetManagementAlertsDataSourceBasic(t *testin func testAccCheckIbmBackupRecoveryManagerGetManagementAlertsDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_management_alerts" "backup_recovery_manager_get_management_alerts_instance" { - alertIdList = [ "alertIdList" ] - alertStateList = [ "alertStateList" ] - alertTypeList = [ 1 ] - alertSeverityList = [ "kCritical" ] - regionIds = [ "regionIds" ] - clusterIdentifiers = [ "clusterIdentifiers" ] - startDateUsecs = 1 - endDateUsecs = 1 - maxAlerts = 1 - alertCategoryList = [ "kDisk" ] - tenantIds = [ "tenantIds" ] - alertTypeBucketList = [ "kHardware" ] - alertPropertyKeyList = [ "alertPropertyKeyList" ] - alertPropertyValueList = [ "alertPropertyValueList" ] - alertName = "alertName" - serviceInstanceIds = [ "serviceInstanceIds" ] + } `) } diff --git a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go index 9368535dcc..1b5de04e8c 100644 --- a/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go +++ b/ibm/service/backuprecovery/data_source_ibm_backup_recovery_manager_get_upgrades_info_test.go @@ -34,7 +34,7 @@ func TestAccIbmBackupRecoveryManagerGetUpgradesInfoDataSourceBasic(t *testing.T) func testAccCheckIbmBackupRecoveryManagerGetUpgradesInfoDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_backup_recovery_manager_get_upgrades_info" "backup_recovery_manager_get_upgrades_info_instance" { - clusterIdentifiers = [ "clusterIdentifiers" ] + cluster_identifiers = [ "3524800407225868","8305184241232842","7463743295903869","1589079364046703","90858563991288","4532338433036076" ] } `) } From f04d8b640104236d30ccb819415d9606f78fc0fe Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Mon, 8 Dec 2025 12:26:49 +0530 Subject: [PATCH 14/15] fix update --- ...urce_ibm_backup_recovery_manager_cancel_cluster_upgrades.go | 3 +-- ...urce_ibm_backup_recovery_manager_create_cluster_upgrades.go | 3 +-- ...urce_ibm_backup_recovery_manager_update_cluster_upgrades.go | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go index 7066eb2891..af78a3348d 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades.go @@ -155,10 +155,9 @@ func resourceIbmBackupRecoveryManagerCancelClusterUpgradesUpdate(context context warning := diag.Diagnostic{ Severity: diag.Warning, Summary: "Update Not Supported", - Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + Detail: "Update operation for this resource is not supported and will only affect the terraform statefile. No changes will be made to the backend resource.", } diags = append(diags, warning) - d.SetId("") return diags } diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go index d52a88cb8e..06ffbba028 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades.go @@ -324,10 +324,9 @@ func resourceIbmBackupRecoveryManagerCreateClusterUpgradesUpdate(context context warning := diag.Diagnostic{ Severity: diag.Warning, Summary: "Update Not Supported", - Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + Detail: "Update operation for this resource is not supported and will only affect the terraform statefile. No changes will be made to the backend resource. ", } diags = append(diags, warning) - d.SetId("") return diags } diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go index fb0ff63776..618aa4d10e 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades.go @@ -324,10 +324,9 @@ func resourceIbmBackupRecoveryManagerUpdateClusterUpgradesUpdate(context context warning := diag.Diagnostic{ Severity: diag.Warning, Summary: "Update Not Supported", - Detail: "The resource definition will be only be removed from the terraform statefile. This resource cannot be deleted from the backend. ", + Detail: "Update operation for this resource is not supported and will only affect the terraform statefile. No changes will be made to the backend resource.", } diags = append(diags, warning) - d.SetId("") return diags } From d666f2b65a9c8321da98668766313e66a7b5b96a Mon Sep 17 00:00:00 2001 From: Deeksha Sharma Date: Mon, 8 Dec 2025 12:57:03 +0530 Subject: [PATCH 15/15] update code --- ...ry_manager_cancel_cluster_upgrades_test.go | 8 ++++++-- ...ry_manager_create_cluster_upgrades_test.go | 15 +++++++++------ ...ry_manager_update_cluster_upgrades_test.go | 19 ++++++++++++------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go index 95830632a1..0ca935172d 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_cancel_cluster_upgrades_test.go @@ -19,8 +19,11 @@ func TestAccIbmBackupRecoveryManagerCancelClusterUpgradesBasic(t *testing.T) { Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerCancelClusterUpgradesConfigBasic(), - Check: resource.ComposeAggregateTestCheckFunc(), + Config: testAccCheckIbmBackupRecoveryManagerCancelClusterUpgradesConfigBasic(), + Destroy: false, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("resource.ibm_backup_recovery_manager_cancel_cluster_upgrades.backup_recovery_manager_cancel_cluster_upgrades_instance", "id"), + ), }, }, }) @@ -29,6 +32,7 @@ func TestAccIbmBackupRecoveryManagerCancelClusterUpgradesBasic(t *testing.T) { func testAccCheckIbmBackupRecoveryManagerCancelClusterUpgradesConfigBasic() string { return fmt.Sprintf(` resource "ibm_backup_recovery_manager_cancel_cluster_upgrades" "backup_recovery_manager_cancel_cluster_upgrades_instance" { + cluster_identifiers = ["3524800407225868"] } `) } diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go index 43f8584121..8d92f0b727 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_create_cluster_upgrades_test.go @@ -20,12 +20,10 @@ func TestAccIbmBackupRecoveryManagerCreateClusterUpgradesBasic(t *testing.T) { Steps: []resource.TestStep{ resource.TestStep{ Config: testAccCheckIbmBackupRecoveryManagerCreateClusterUpgradesConfigBasic(), - Check: resource.ComposeAggregateTestCheckFunc(), - }, - resource.TestStep{ - ResourceName: "ibm_backup_recovery_manager_create_cluster_upgrades.backup_recovery_manager_create_cluster_upgrades", - ImportState: true, - ImportStateVerify: true, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("resource.ibm_backup_recovery_manager_create_cluster_upgrades.backup_recovery_manager_create_cluster_upgrades_instance", "id"), + ), + Destroy: false, }, }, }) @@ -34,6 +32,11 @@ func TestAccIbmBackupRecoveryManagerCreateClusterUpgradesBasic(t *testing.T) { func testAccCheckIbmBackupRecoveryManagerCreateClusterUpgradesConfigBasic() string { return fmt.Sprintf(` resource "ibm_backup_recovery_manager_create_cluster_upgrades" "backup_recovery_manager_create_cluster_upgrades_instance" { + clusters { + cluster_id = "3524800407225868" + cluster_incarnation_id = "1758305184241232842" + } + package_url = "https://s3.us-east.cloud-object-storage.appdomain.cloud/7.2.15/cluster_artifacts/cohesity-7.2.15_release-20250721_6aa24701.tar.gz" } `) } diff --git a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go index 62d4a5ecb2..18f1240458 100644 --- a/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go +++ b/ibm/service/backuprecovery/resource_ibm_backup_recovery_manager_update_cluster_upgrades_test.go @@ -19,13 +19,11 @@ func TestAccIbmBackupRecoveryManagerUpdateClusterUpgradesBasic(t *testing.T) { Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIbmBackupRecoveryManagerUpdateClusterUpgradesConfigBasic(), - Check: resource.ComposeAggregateTestCheckFunc(), - }, - resource.TestStep{ - ResourceName: "ibm_backup_recovery_manager_update_cluster_upgrades.backup_recovery_manager_update_cluster_upgrades", - ImportState: true, - ImportStateVerify: true, + Config: testAccCheckIbmBackupRecoveryManagerUpdateClusterUpgradesConfigBasic(), + Destroy: false, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("resource.ibm_backup_recovery_manager_update_cluster_upgrades.backup_recovery_manager_update_cluster_upgrades_instance", "id"), + ), }, }, }) @@ -34,6 +32,13 @@ func TestAccIbmBackupRecoveryManagerUpdateClusterUpgradesBasic(t *testing.T) { func testAccCheckIbmBackupRecoveryManagerUpdateClusterUpgradesConfigBasic() string { return fmt.Sprintf(` resource "ibm_backup_recovery_manager_update_cluster_upgrades" "backup_recovery_manager_update_cluster_upgrades_instance" { + resource "ibm_backup_recovery_manager_create_cluster_upgrades" "backup_recovery_manager_create_cluster_upgrades_instance" { + clusters { + cluster_id = "3524800407225868" + cluster_incarnation_id = "1758305184241232842" + } + package_url = "https://s3.us-east.cloud-object-storage.appdomain.cloud/7.2.16/cluster_artifacts/cohesity-7.2.16.tar.gz" + } } `) }