diff --git a/.changelog/3189.txt b/.changelog/3189.txt new file mode 100644 index 0000000000..53c64d53a5 --- /dev/null +++ b/.changelog/3189.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_emr_cluster: support scene_name +``` \ No newline at end of file diff --git a/tencentcloud/services/emr/resource_tc_emr_cluster.go b/tencentcloud/services/emr/resource_tc_emr_cluster.go index d36a878524..9823048722 100644 --- a/tencentcloud/services/emr/resource_tc_emr_cluster.go +++ b/tencentcloud/services/emr/resource_tc_emr_cluster.go @@ -203,6 +203,16 @@ func ResourceTencentCloudEmrCluster() *schema.Resource { Optional: true, Description: "Access the external file system.", }, + "scene_name": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Scene-based value:\n" + + " - Hadoop-Kudu\n" + + " - Hadoop-Zookeeper\n" + + " - Hadoop-Presto\n" + + " - Hadoop-Hbase.", + }, "instance_id": { Type: schema.TypeString, Computed: true, @@ -307,7 +317,7 @@ func resourceTencentCloudEmrClusterUpdate(d *schema.ResourceData, meta interface logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - immutableFields := []string{"auto_renew", "placement", "placement_info", "display_strategy", "login_settings", "extend_fs_field"} + immutableFields := []string{"auto_renew", "placement", "placement_info", "display_strategy", "login_settings", "extend_fs_field", "scene_name"} for _, f := range immutableFields { if d.HasChange(f) { return fmt.Errorf("cannot update argument `%s`", f) @@ -632,6 +642,7 @@ func resourceTencentCloudEmrClusterRead(d *schema.ResourceData, meta interface{} return err } if instance != nil { + _ = d.Set("scene_name", instance.SceneName) _ = d.Set("product_id", instance.ProductId) _ = d.Set("vpc_settings", map[string]interface{}{ "vpc_id": *instance.UniqVpcId, diff --git a/tencentcloud/services/emr/resource_tc_emr_cluster_test.go b/tencentcloud/services/emr/resource_tc_emr_cluster_test.go index 2c641347bd..39078141f1 100644 --- a/tencentcloud/services/emr/resource_tc_emr_cluster_test.go +++ b/tencentcloud/services/emr/resource_tc_emr_cluster_test.go @@ -177,6 +177,29 @@ func TestAccTencentCloudEmrClusterResource_Basic(t *testing.T) { }) } +func TestAccTencentCloudEmrClusterResource_Zookeeper(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testEmrZookeeper, + Check: resource.ComposeTestCheckFunc( + testAccCheckEmrExists("tencentcloud_emr_cluster.emr_zookeeper"), + resource.TestCheckResourceAttr("tencentcloud_emr_cluster.emr_zookeeper", "scene_name", "Hadoop-Zookeeper"), + resource.TestCheckResourceAttr("tencentcloud_emr_cluster.emr_zookeeper", "resource_spec.0.common_count", "3"), + ), + }, + { + ResourceName: "tencentcloud_emr_cluster.emr_zookeeper", + ImportState: true, + ImportStateVerifyIgnore: []string{"display_strategy", "placement", "time_span", "time_unit", "login_settings", "terminate_node_info"}, + }, + }, + }) +} + func TestAccTencentCloudEmrClusterResource_PreExecutedFileSettings(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ @@ -668,3 +691,57 @@ resource "tencentcloud_emr_cluster" "emrrrr" { need_master_wan = "NOT_NEED_MASTER_WAN" } ` + +const testEmrZookeeper = tcacctest.DefaultEMRVariable + ` +data "tencentcloud_instance_types" "cvm2c4m" { + exclude_sold_out=true + cpu_core_count=2 + memory_size=4 + filter { + name = "instance-charge-type" + values = ["POSTPAID_BY_HOUR"] + } + filter { + name = "zone" + values = ["ap-guangzhou-3"] + } +} + +resource "tencentcloud_emr_cluster" "emr_zookeeper" { + product_id = 37 + vpc_settings = { + vpc_id = var.vpc_id + subnet_id = var.subnet_id + } + softwares = [ + "zookeeper-3.6.3", + ] + support_ha = 1 + instance_name = "emr-test-demo" + resource_spec { + common_resource_spec { + mem_size = 4096 + cpu = 2 + disk_size = 100 + disk_type = "CLOUD_SSD" + spec = "CVM.${data.tencentcloud_instance_types.cvm2c4m.instance_types.0.family}" + storage_type = 4 + root_size = 50 + } + common_count = 3 + } + login_settings = { + password = "Tencent@cloud123" + } + time_span = 3600 + time_unit = "s" + pay_mode = 0 + placement_info { + zone = "ap-guangzhou-3" + project_id = 0 + } + sg_id = var.sg_id + need_master_wan = "NOT_NEED_MASTER_WAN" + scene_name = "Hadoop-Zookeeper" +} +` diff --git a/tencentcloud/services/emr/service_tencentcloud_emr.go b/tencentcloud/services/emr/service_tencentcloud_emr.go index f77b9acb0c..a29277ce2b 100644 --- a/tencentcloud/services/emr/service_tencentcloud_emr.go +++ b/tencentcloud/services/emr/service_tencentcloud_emr.go @@ -77,6 +77,10 @@ func (me *EMRService) CreateInstance(ctx context.Context, d *schema.ResourceData logId := tccommon.GetLogId(ctx) request := emr.NewCreateInstanceRequest() + if v, ok := d.GetOk("scene_name"); ok { + request.SceneName = helper.String(v.(string)) + } + if v, ok := d.GetOk("auto_renew"); ok { request.AutoRenew = common.Uint64Ptr((uint64)(v.(int))) } diff --git a/website/docs/r/emr_cluster.html.markdown b/website/docs/r/emr_cluster.html.markdown index 97c83cb8e5..21b4dc92e6 100644 --- a/website/docs/r/emr_cluster.html.markdown +++ b/website/docs/r/emr_cluster.html.markdown @@ -138,6 +138,11 @@ The following arguments are supported: * `placement` - (Optional, Map, **Deprecated**) It will be deprecated in later versions. Use `placement_info` instead. The location of the instance. * `pre_executed_file_settings` - (Optional, List, ForceNew) Pre executed file settings. It can only be set at the time of creation, and cannot be modified. * `resource_spec` - (Optional, List) Resource specification of EMR instance. +* `scene_name` - (Optional, String) Scene-based value: + - Hadoop-Kudu + - Hadoop-Zookeeper + - Hadoop-Presto + - Hadoop-Hbase. * `sg_id` - (Optional, String, ForceNew) The ID of the security group to which the instance belongs, in the form of sg-xxxxxxxx. * `tags` - (Optional, Map) Tag description list. * `terminate_node_info` - (Optional, List) Terminate nodes. Note: it only works when the number of nodes decreases.