diff --git a/docs/data-sources/css_es_enabled_elb_certificates.md b/docs/data-sources/css_es_enabled_elb_certificates.md new file mode 100644 index 00000000000..c8c94c91c39 --- /dev/null +++ b/docs/data-sources/css_es_enabled_elb_certificates.md @@ -0,0 +1,49 @@ +--- +subcategory: "Cloud Search Service (CSS)" +layout: "huaweicloud" +page_title: "HuaweiCloud: huaweicloud_css_es_enabled_elb_certificates" +description: |- + Use this data source to get the list of CSS es cluster enabled certificates. +--- + +# huaweicloud_css_es_enabled_elb_certificates + +Use this data source to get the list of CSS es cluster enabled certificates. + +## Example Usage + +```hcl +variable "cluster_id" {} + +data "huaweicloud_css_es_enabled_elb_certificates" "test" { + cluster_id = var.cluster_id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `region` - (Optional, String) Specifies the region in which to query the resource. + If omitted, the provider-level region will be used. + +* `cluster_id` - (Required, String) Specifies the ID of the Elasticsearth cluster. + +## Attribute Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - The data source ID. + +* `certificates` - The certificates list. + + The [certificates](#certificates_struct) structure is documented below. + + +The `certificates` block supports: + +* `id` - The certificate ID. + +* `name` - The certificate name. + +* `type` - The type of SL certificate. Divided into server certificate and CA certificate. diff --git a/huaweicloud/provider.go b/huaweicloud/provider.go index 4637616f4fb..6f4b6902bd1 100644 --- a/huaweicloud/provider.go +++ b/huaweicloud/provider.go @@ -656,23 +656,24 @@ func Provider() *schema.Provider { "huaweicloud_cse_microservice_instances": cse.DataSourceMicroserviceInstances(), "huaweicloud_cse_nacos_namespaces": cse.DataSourceNacosNamespaces(), - "huaweicloud_csms_events": dew.DataSourceDewCsmsEvents(), - "huaweicloud_csms_secrets": dew.DataSourceDewCsmsSecrets(), - "huaweicloud_csms_secret_version": dew.DataSourceDewCsmsSecret(), - "huaweicloud_csms_secret_versions": dew.DataSourceDewCsmsSecretVersions(), - "huaweicloud_css_flavors": css.DataSourceCssFlavors(), - "huaweicloud_css_clusters": css.DataSourceCssClusters(), - "huaweicloud_css_logstash_pipelines": css.DataSourceCssLogstashPipelines(), - "huaweicloud_css_logstash_configurations": css.DataSourceCssLogstashConfigurations(), - "huaweicloud_css_elb_loadbalancers": css.DataSourceCssElbLoadbalancers(), - "huaweicloud_css_logstash_certificates": css.DataSourceCssLogstashCertificates(), - "huaweicloud_css_logstash_pipeline_actions": css.DataSourceCssLogstashPipelineActions(), - "huaweicloud_css_upgrade_target_images": css.DataSourceCssUpgradeTargetImages(), - "huaweicloud_css_logstash_templates": css.DataSourceCssLogstashTemplates(), - "huaweicloud_css_cluster_tags": css.DataSourceCssClusterTags(), - "huaweicloud_css_log_backup_records": css.DataSourceCssLogBackupRecords(), - "huaweicloud_css_scan_tasks": css.DataSourceCssScanTasks(), - "huaweicloud_css_snapshots": css.DataSourceCssSnapshots(), + "huaweicloud_csms_events": dew.DataSourceDewCsmsEvents(), + "huaweicloud_csms_secrets": dew.DataSourceDewCsmsSecrets(), + "huaweicloud_csms_secret_version": dew.DataSourceDewCsmsSecret(), + "huaweicloud_csms_secret_versions": dew.DataSourceDewCsmsSecretVersions(), + "huaweicloud_css_flavors": css.DataSourceCssFlavors(), + "huaweicloud_css_clusters": css.DataSourceCssClusters(), + "huaweicloud_css_logstash_pipelines": css.DataSourceCssLogstashPipelines(), + "huaweicloud_css_logstash_configurations": css.DataSourceCssLogstashConfigurations(), + "huaweicloud_css_elb_loadbalancers": css.DataSourceCssElbLoadbalancers(), + "huaweicloud_css_logstash_certificates": css.DataSourceCssLogstashCertificates(), + "huaweicloud_css_logstash_pipeline_actions": css.DataSourceCssLogstashPipelineActions(), + "huaweicloud_css_upgrade_target_images": css.DataSourceCssUpgradeTargetImages(), + "huaweicloud_css_logstash_templates": css.DataSourceCssLogstashTemplates(), + "huaweicloud_css_cluster_tags": css.DataSourceCssClusterTags(), + "huaweicloud_css_log_backup_records": css.DataSourceCssLogBackupRecords(), + "huaweicloud_css_scan_tasks": css.DataSourceCssScanTasks(), + "huaweicloud_css_snapshots": css.DataSourceCssSnapshots(), + "huaweicloud_css_es_enabled_elb_certificates": css.DataSourceCssEsEnabledElbCertificates(), "huaweicloud_dataarts_studio_data_connections": dataarts.DataSourceDataConnections(), "huaweicloud_dataarts_studio_workspaces": dataarts.DataSourceDataArtsStudioWorkspaces(), diff --git a/huaweicloud/services/acceptance/css/data_source_huaweicloud_css_es_enabled_elb_certificates_test.go b/huaweicloud/services/acceptance/css/data_source_huaweicloud_css_es_enabled_elb_certificates_test.go new file mode 100644 index 00000000000..87548f12ae8 --- /dev/null +++ b/huaweicloud/services/acceptance/css/data_source_huaweicloud_css_es_enabled_elb_certificates_test.go @@ -0,0 +1,47 @@ +package css + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance" +) + +func TestAccDataSourceCssEsEnabledElbCertificates_basic(t *testing.T) { + dataSource := "data.huaweicloud_css_es_enabled_elb_certificates.test" + rName := acceptance.RandomAccResourceName() + dc := acceptance.InitDataSourceCheck(dataSource) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acceptance.TestAccPreCheck(t) + }, + ProviderFactories: acceptance.TestAccProviderFactories, + Steps: []resource.TestStep{ + { + Config: testDataSourceCssEsEnabledElbCertificates_basic(rName), + Check: resource.ComposeTestCheckFunc( + dc.CheckResourceExists(), + resource.TestCheckResourceAttrSet(dataSource, "certificates.#"), + resource.TestCheckResourceAttrSet(dataSource, "certificates.0.id"), + resource.TestCheckResourceAttrSet(dataSource, "certificates.0.name"), + resource.TestCheckResourceAttrSet(dataSource, "certificates.0.type"), + ), + }, + }, + }) +} + +func testDataSourceCssEsEnabledElbCertificates_basic(name string) string { + return fmt.Sprintf(` +%[1]s + +data "huaweicloud_css_es_enabled_elb_certificates" "test" { + cluster_id = huaweicloud_css_cluster.test.id + + depends_on = [huaweicloud_css_es_loadbalancer_config.test] +} +`, testAccCssEsLoadbalancerConfig_basic(name)) +} diff --git a/huaweicloud/services/css/data_source_huaweicloud_css_es_enabled_elb_certificates.go b/huaweicloud/services/css/data_source_huaweicloud_css_es_enabled_elb_certificates.go new file mode 100644 index 00000000000..47d1fd3220a --- /dev/null +++ b/huaweicloud/services/css/data_source_huaweicloud_css_es_enabled_elb_certificates.go @@ -0,0 +1,127 @@ +// Generated by PMS #558 +package css + +import ( + "context" + "strings" + + "github.com/hashicorp/go-multierror" + "github.com/hashicorp/go-uuid" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tidwall/gjson" + + "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config" + "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/httphelper" + "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/schemas" +) + +func DataSourceCssEsEnabledElbCertificates() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceCssEsEnabledElbCertificatesRead, + + Schema: map[string]*schema.Schema{ + "region": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: `Specifies the region in which to query the resource. If omitted, the provider-level region will be used.`, + }, + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: `Specifies the ID of the Elasticsearth cluster.`, + }, + "certificates": { + Type: schema.TypeList, + Computed: true, + Description: `The certificates list.`, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: `The certificate ID.`, + }, + "name": { + Type: schema.TypeString, + Computed: true, + Description: `The certificate name.`, + }, + "type": { + Type: schema.TypeString, + Computed: true, + Description: `The type of SL certificate. Divided into server certificate and CA certificate.`, + }, + }, + }, + }, + }, + } +} + +type EsEnabledElbCertificatesDSWrapper struct { + *schemas.ResourceDataWrapper + Config *config.Config +} + +func newEsEnabledElbCertificatesDSWrapper(d *schema.ResourceData, meta interface{}) *EsEnabledElbCertificatesDSWrapper { + return &EsEnabledElbCertificatesDSWrapper{ + ResourceDataWrapper: schemas.NewSchemaWrapper(d), + Config: meta.(*config.Config), + } +} + +func dataSourceCssEsEnabledElbCertificatesRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + wrapper := newEsEnabledElbCertificatesDSWrapper(d, meta) + listElbCertsRst, err := wrapper.ListElbCerts() + if err != nil { + return diag.FromErr(err) + } + + id, err := uuid.GenerateUUID() + if err != nil { + return diag.FromErr(err) + } + d.SetId(id) + + err = wrapper.listElbCertsToSchema(listElbCertsRst) + if err != nil { + return diag.FromErr(err) + } + + return nil +} + +// @API CSS GET /v1.0/{project_id}/clusters/{cluster_id}/elb/certificates +func (w *EsEnabledElbCertificatesDSWrapper) ListElbCerts() (*gjson.Result, error) { + client, err := w.NewClient(w.Config, "css") + if err != nil { + return nil, err + } + + uri := "/v1.0/{project_id}/clusters/{cluster_id}/elb/certificates" + uri = strings.ReplaceAll(uri, "{cluster_id}", w.Get("cluster_id").(string)) + return httphelper.New(client). + Method("GET"). + URI(uri). + Request(). + Result() +} + +func (w *EsEnabledElbCertificatesDSWrapper) listElbCertsToSchema(body *gjson.Result) error { + d := w.ResourceData + mErr := multierror.Append(nil, + d.Set("region", w.Config.GetRegion(w.ResourceData)), + d.Set("certificates", schemas.SliceToList(body.Get("certificates"), + func(certificates gjson.Result) any { + return map[string]any{ + "id": certificates.Get("id").Value(), + "name": certificates.Get("name").Value(), + "type": certificates.Get("type").Value(), + } + }, + )), + ) + return mErr.ErrorOrNil() +}