From 2daa9affb3913ec5d516915440dcdb37b446ed6b Mon Sep 17 00:00:00 2001 From: Marc Lopez Rubio Date: Thu, 6 May 2021 07:29:24 +0500 Subject: [PATCH] ec_deployment: Add support for deployment aliases (#298) Adds support for deployment aliases on both the `ec_deployment` resource and `ec_deployment` datasource. Signed-off-by: Marc Lopez --- .changelog/298.txt | 3 + docs/data-sources/ec_deployment.md | 1 + docs/resources/ec_deployment.md | 1 + ec/acc/datasource_deployment_basic_test.go | 8 +- ec/acc/deployment_basic_test.go | 26 ++- .../testdata/datasource_deployment_basic.tf | 1 + ec/acc/testdata/deployment_basic.tf | 1 + .../deployment_basic_settings_config_1.tf | 36 ++++ .../deploymentdatasource/datasource.go | 6 + .../deploymentdatasource/datasource_test.go | 2 + .../deploymentdatasource/schema.go | 4 + ec/ecresource/deploymentresource/expanders.go | 1 + .../deploymentresource/expanders_test.go | 12 +- .../deploymentresource/flatteners.go | 4 + .../deploymentresource/flatteners_test.go | 187 ++++++++++-------- ec/ecresource/deploymentresource/schema.go | 6 + ...deployment-aws-io-optimized-extension.json | 1 + .../deployment-aws-io-optimized-tags.json | 1 + .../testdata/deployment-aws-io-optimized.json | 1 + .../deployment-azure-io-optimized.json | 1 + .../testdata/deployment-gcp-io-optimized.json | 1 + .../deploymentresource/testutil_datastruct.go | 5 + 22 files changed, 213 insertions(+), 96 deletions(-) create mode 100644 .changelog/298.txt create mode 100644 ec/acc/testdata/deployment_basic_settings_config_1.tf diff --git a/.changelog/298.txt b/.changelog/298.txt new file mode 100644 index 000000000..7d3da9e9d --- /dev/null +++ b/.changelog/298.txt @@ -0,0 +1,3 @@ +```release-note:feature +resource/ec_deployment: Supports deployment aliases in a new top level field `alias`. +``` \ No newline at end of file diff --git a/docs/data-sources/ec_deployment.md b/docs/data-sources/ec_deployment.md index 8e481b377..de0c68f34 100644 --- a/docs/data-sources/ec_deployment.md +++ b/docs/data-sources/ec_deployment.md @@ -25,6 +25,7 @@ data "ec_deployment" "example" { ~> **NOTE:** Depending on the deployment definition, some values may not be set. These will not be available for interpolation. +* `alias` - Deployment alias. * `healthy` - Overall health status of the deployment. * `id` - The unique ID of the deployment. * `name` - The name of the deployment. diff --git a/docs/resources/ec_deployment.md b/docs/resources/ec_deployment.md index cddbfa481..fda4d51ff 100644 --- a/docs/resources/ec_deployment.md +++ b/docs/resources/ec_deployment.md @@ -200,6 +200,7 @@ The following arguments are supported: -> Read the [ESS stack version policy](https://www.elastic.co/guide/en/cloud/current/ec-version-policy.html#ec-version-policy-available) to understand which versions are available. * `name` - (Optional) Name of the deployment. +* `alias` - (Optional) Deployment alias, affects the format of the resource URLs. * `request_id` - (Optional) Request ID to set when you create the deployment. Use it only when previous attempts return an error and `request_id` is returned as part of the error. * `elasticsearch` (Required) Elasticsearch cluster definition, can only be specified once. For multi-node Elasticsearch clusters, use multiple `topology` blocks. * `kibana` (Optional) Kibana instance definition, can only be specified once. diff --git a/ec/acc/datasource_deployment_basic_test.go b/ec/acc/datasource_deployment_basic_test.go index 80df387ed..137b67f5d 100644 --- a/ec/acc/datasource_deployment_basic_test.go +++ b/ec/acc/datasource_deployment_basic_test.go @@ -32,8 +32,9 @@ func TestAccDatasourceDeployment_basic(t *testing.T) { depsDatasourceName := "data.ec_deployments.query" randomName := prefix + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) secondRandomName := prefix + "-" + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) + randomAlias := "alias" + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) depCfg := "testdata/datasource_deployment_basic.tf" - cfg := fixtureAccDeploymentDatasourceBasic(t, depCfg, randomName, secondRandomName, getRegion(), computeOpTemplate) + cfg := fixtureAccDeploymentDatasourceBasicAlias(t, depCfg, randomAlias, randomName, secondRandomName, getRegion(), computeOpTemplate) var namePrefix = secondRandomName[:22] resource.ParallelTest(t, resource.TestCase{ @@ -45,6 +46,7 @@ func TestAccDatasourceDeployment_basic(t *testing.T) { Config: cfg, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrPair(datasourceName, "name", resourceName, "name"), + resource.TestCheckResourceAttrPair(datasourceName, "alias", resourceName, "alias"), resource.TestCheckResourceAttrPair(datasourceName, "region", resourceName, "region"), resource.TestCheckResourceAttrPair(datasourceName, "deployment_template_id", resourceName, "deployment_template_id"), resource.TestCheckResourceAttrPair(datasourceName, "traffic_filter.#", resourceName, "traffic_filter.#"), @@ -118,7 +120,7 @@ func TestAccDatasourceDeployment_basic(t *testing.T) { }) } -func fixtureAccDeploymentDatasourceBasic(t *testing.T, fileName, name, secondName, region, depTpl string) string { +func fixtureAccDeploymentDatasourceBasicAlias(t *testing.T, fileName, alias, name, secondName, region, depTpl string) string { t.Helper() deploymentTpl := setDefaultTemplate(region, depTpl) @@ -127,6 +129,6 @@ func fixtureAccDeploymentDatasourceBasic(t *testing.T, fileName, name, secondNam t.Fatal(err) } return fmt.Sprintf(string(b), - region, name, region, deploymentTpl, secondName, region, deploymentTpl, secondName, region, deploymentTpl, + region, name, region, deploymentTpl, alias, secondName, region, deploymentTpl, secondName, region, deploymentTpl, ) } diff --git a/ec/acc/deployment_basic_test.go b/ec/acc/deployment_basic_test.go index c03a82bc3..5474b4df4 100644 --- a/ec/acc/deployment_basic_test.go +++ b/ec/acc/deployment_basic_test.go @@ -30,9 +30,10 @@ func TestAccDeployment_basic_tf(t *testing.T) { resName := "ec_deployment.basic" randomName := prefix + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) startCfg := "testdata/deployment_basic.tf" + randomAlias := "alias" + acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum) trafficFilterCfg := "testdata/deployment_basic_with_traffic_filter_2.tf" trafficFilterUpdateCfg := "testdata/deployment_basic_with_traffic_filter_3.tf" - cfg := fixtureAccDeploymentResourceBasicWithApps(t, startCfg, randomName, getRegion(), defaultTemplate) + cfg := fixtureAccDeploymentResourceBasicWithAppsAlias(t, startCfg, randomAlias, randomName, getRegion(), defaultTemplate) cfgWithTrafficFilter := fixtureAccDeploymentResourceBasicWithTF(t, trafficFilterCfg, randomName, getRegion(), defaultTemplate) cfgWithTrafficFilterUpdate := fixtureAccDeploymentResourceBasicWithTF(t, trafficFilterUpdateCfg, randomName, getRegion(), defaultTemplate) deploymentVersion, err := latestStackVersion() @@ -48,6 +49,7 @@ func TestAccDeployment_basic_tf(t *testing.T) { { Config: cfg, Check: checkBasicDeploymentResource(resName, randomName, deploymentVersion, + resource.TestCheckResourceAttr(resName, "alias", randomAlias), resource.TestCheckResourceAttr(resName, "apm.0.config.#", "0"), resource.TestCheckResourceAttr(resName, "elasticsearch.0.config.#", "0"), resource.TestCheckResourceAttr(resName, "enterprise_search.0.config.#", "0"), @@ -82,7 +84,7 @@ func TestAccDeployment_basic_tf(t *testing.T) { func TestAccDeployment_basic_config(t *testing.T) { resName := "ec_deployment.basic" randomName := prefix + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) - startCfg := "testdata/deployment_basic.tf" + startCfg := "testdata/deployment_basic_settings_config_1.tf" settingsConfig := "testdata/deployment_basic_settings_config_2.tf" cfg := fixtureAccDeploymentResourceBasicWithApps(t, startCfg, randomName, getRegion(), defaultTemplate) settingsConfigCfg := fixtureAccDeploymentResourceBasicWithApps(t, settingsConfig, randomName, getRegion(), defaultTemplate) @@ -149,6 +151,26 @@ func fixtureAccDeploymentResourceBasicWithApps(t *testing.T, fileName, name, reg ) } +func fixtureAccDeploymentResourceBasicWithAppsAlias(t *testing.T, fileName, alias, name, region, depTpl string) string { + t.Helper() + requiresAPIConn(t) + + deploymentTpl := setDefaultTemplate(region, depTpl) + // esIC is no longer needed + _, kibanaIC, apmIC, essIC, err := setInstanceConfigurations(deploymentTpl) + if err != nil { + t.Fatal(err) + } + + b, err := os.ReadFile(fileName) + if err != nil { + t.Fatal(err) + } + return fmt.Sprintf(string(b), + region, alias, name, region, deploymentTpl, kibanaIC, apmIC, essIC, + ) +} + func fixtureAccDeploymentResourceBasicWithTF(t *testing.T, fileName, name, region, depTpl string) string { t.Helper() diff --git a/ec/acc/testdata/datasource_deployment_basic.tf b/ec/acc/testdata/datasource_deployment_basic.tf index a21c952b4..4692944e1 100644 --- a/ec/acc/testdata/datasource_deployment_basic.tf +++ b/ec/acc/testdata/datasource_deployment_basic.tf @@ -19,6 +19,7 @@ resource "ec_deployment" "basic_observability" { } resource "ec_deployment" "basic_datasource" { + alias = "%s" name = "%s" region = "%s" version = data.ec_stack.latest.version diff --git a/ec/acc/testdata/deployment_basic.tf b/ec/acc/testdata/deployment_basic.tf index d54ed1440..5ef30a6b4 100644 --- a/ec/acc/testdata/deployment_basic.tf +++ b/ec/acc/testdata/deployment_basic.tf @@ -4,6 +4,7 @@ data "ec_stack" "latest" { } resource "ec_deployment" "basic" { + alias = "%s" name = "%s" region = "%s" version = data.ec_stack.latest.version diff --git a/ec/acc/testdata/deployment_basic_settings_config_1.tf b/ec/acc/testdata/deployment_basic_settings_config_1.tf new file mode 100644 index 000000000..d54ed1440 --- /dev/null +++ b/ec/acc/testdata/deployment_basic_settings_config_1.tf @@ -0,0 +1,36 @@ +data "ec_stack" "latest" { + version_regex = "latest" + region = "%s" +} + +resource "ec_deployment" "basic" { + name = "%s" + region = "%s" + version = data.ec_stack.latest.version + deployment_template_id = "%s" + + elasticsearch { + topology { + id = "hot_content" + size = "1g" + } + } + + kibana { + topology { + instance_configuration_id = "%s" + } + } + + apm { + topology { + instance_configuration_id = "%s" + } + } + + enterprise_search { + topology { + instance_configuration_id = "%s" + } + } +} \ No newline at end of file diff --git a/ec/ecdatasource/deploymentdatasource/datasource.go b/ec/ecdatasource/deploymentdatasource/datasource.go index 9c3ed7ca9..b0a460294 100644 --- a/ec/ecdatasource/deploymentdatasource/datasource.go +++ b/ec/ecdatasource/deploymentdatasource/datasource.go @@ -83,6 +83,12 @@ func modelToState(d *schema.ResourceData, res *models.DeploymentGetResponse) err return err } + if res.Alias != "" { + if err := d.Set("alias", res.Alias); err != nil { + return err + } + } + es := res.Resources.Elasticsearch[0] if es.Region != nil { diff --git a/ec/ecdatasource/deploymentdatasource/datasource_test.go b/ec/ecdatasource/deploymentdatasource/datasource_test.go index 9eec9022e..bebc4a63c 100644 --- a/ec/ecdatasource/deploymentdatasource/datasource_test.go +++ b/ec/ecdatasource/deploymentdatasource/datasource_test.go @@ -55,6 +55,7 @@ func Test_modelToState(t *testing.T) { args: args{ d: deploymentSchemaArg, res: &models.DeploymentGetResponse{ + Alias: "some-alias", ID: &mock.ValidClusterID, Healthy: ec.Bool(true), Name: ec.String("my_deployment_name"), @@ -145,6 +146,7 @@ func newSampleDeployment() map[string]interface{} { return map[string]interface{}{ "id": mock.ValidClusterID, "name": "my_deployment_name", + "alias": "some-alias", "deployment_template_id": "aws-io-optimized", "healthy": true, "region": "us-east-1", diff --git a/ec/ecdatasource/deploymentdatasource/schema.go b/ec/ecdatasource/deploymentdatasource/schema.go index 25471c23e..71181a20f 100644 --- a/ec/ecdatasource/deploymentdatasource/schema.go +++ b/ec/ecdatasource/deploymentdatasource/schema.go @@ -23,6 +23,10 @@ import ( func newSchema() map[string]*schema.Schema { return map[string]*schema.Schema{ + "alias": { + Type: schema.TypeString, + Computed: true, + }, "healthy": { Type: schema.TypeBool, Computed: true, diff --git a/ec/ecresource/deploymentresource/expanders.go b/ec/ecresource/deploymentresource/expanders.go index e4ef369fa..800524154 100644 --- a/ec/ecresource/deploymentresource/expanders.go +++ b/ec/ecresource/deploymentresource/expanders.go @@ -35,6 +35,7 @@ import ( func createResourceToModel(d *schema.ResourceData, client *api.API) (*models.DeploymentCreateRequest, error) { var result = models.DeploymentCreateRequest{ Name: d.Get("name").(string), + Alias: d.Get("alias").(string), Resources: &models.DeploymentCreateResources{}, Settings: &models.DeploymentCreateSettings{}, Metadata: &models.DeploymentCreateMetadata{}, diff --git a/ec/ecresource/deploymentresource/expanders_test.go b/ec/ecresource/deploymentresource/expanders_test.go index 7688de14f..6544a6d47 100644 --- a/ec/ecresource/deploymentresource/expanders_test.go +++ b/ec/ecresource/deploymentresource/expanders_test.go @@ -182,7 +182,8 @@ func Test_createResourceToModel(t *testing.T) { ), }, want: &models.DeploymentCreateRequest{ - Name: "my_deployment_name", + Name: "my_deployment_name", + Alias: "my-deployment", Settings: &models.DeploymentCreateSettings{ TrafficFilterSettings: &models.TrafficFilterSettings{ Rulesets: []string{"0.0.0.0/0", "192.168.10.0/24"}, @@ -379,7 +380,8 @@ func Test_createResourceToModel(t *testing.T) { ), }, want: &models.DeploymentCreateRequest{ - Name: "my_deployment_name", + Name: "my_deployment_name", + Alias: "my-deployment", Settings: &models.DeploymentCreateSettings{ TrafficFilterSettings: &models.TrafficFilterSettings{ Rulesets: []string{"0.0.0.0/0", "192.168.10.0/24"}, @@ -815,7 +817,8 @@ func Test_createResourceToModel(t *testing.T) { client: api.NewMock(mock.New200Response(ioOptimizedTpl())), }, want: &models.DeploymentCreateRequest{ - Name: "my_deployment_name", + Name: "my_deployment_name", + Alias: "my-deployment", Settings: &models.DeploymentCreateSettings{ TrafficFilterSettings: &models.TrafficFilterSettings{ Rulesets: []string{"0.0.0.0/0", "192.168.10.0/24"}, @@ -941,7 +944,8 @@ func Test_createResourceToModel(t *testing.T) { client: api.NewMock(mock.New200Response(ioOptimizedTpl())), }, want: &models.DeploymentCreateRequest{ - Name: "my_deployment_name", + Name: "my_deployment_name", + Alias: "my-deployment", Settings: &models.DeploymentCreateSettings{ TrafficFilterSettings: &models.TrafficFilterSettings{ Rulesets: []string{"0.0.0.0/0", "192.168.10.0/24"}, diff --git a/ec/ecresource/deploymentresource/flatteners.go b/ec/ecresource/deploymentresource/flatteners.go index 130b757de..3934c22ad 100644 --- a/ec/ecresource/deploymentresource/flatteners.go +++ b/ec/ecresource/deploymentresource/flatteners.go @@ -34,6 +34,10 @@ func modelToState(d *schema.ResourceData, res *models.DeploymentGetResponse, rem return err } + if err := d.Set("alias", res.Alias); err != nil { + return err + } + if res.Metadata != nil { if err := d.Set("tags", flattenTags(res.Metadata.Tags)); err != nil { return err diff --git a/ec/ecresource/deploymentresource/flatteners_test.go b/ec/ecresource/deploymentresource/flatteners_test.go index a36d38d66..065d4aa6f 100644 --- a/ec/ecresource/deploymentresource/flatteners_test.go +++ b/ec/ecresource/deploymentresource/flatteners_test.go @@ -46,6 +46,7 @@ func Test_modelToState(t *testing.T) { wantAzureIOOptimizedDeployment := util.NewResourceData(t, util.ResDataParams{ ID: mock.ValidClusterID, State: map[string]interface{}{ + "alias": "my-deployment", "deployment_template_id": "azure-io-optimized", "id": "123b7b540dfc967a7a649c18e2fce4ed", "name": "up2d", @@ -111,6 +112,7 @@ func Test_modelToState(t *testing.T) { wantAwsIOOptimizedDeployment := util.NewResourceData(t, util.ResDataParams{ ID: mock.ValidClusterID, State: map[string]interface{}{ + "alias": "my-deployment", "deployment_template_id": "aws-io-optimized-v2", "id": "123b7b540dfc967a7a649c18e2fce4ed", "name": "up2d", @@ -179,6 +181,7 @@ func Test_modelToState(t *testing.T) { wantAwsIOOptimizedDeploymentTags := util.NewResourceData(t, util.ResDataParams{ ID: mock.ValidClusterID, State: map[string]interface{}{ + "alias": "my-deployment", "deployment_template_id": "aws-io-optimized-v2", "id": "123b7b540dfc967a7a649c18e2fce4ed", "name": "up2d", @@ -249,6 +252,7 @@ func Test_modelToState(t *testing.T) { wantGcpIOOptimizedDeployment := util.NewResourceData(t, util.ResDataParams{ ID: mock.ValidClusterID, State: map[string]interface{}{ + "alias": "my-deployment", "deployment_template_id": "gcp-io-optimized", "id": "123b7b540dfc967a7a649c18e2fce4ed", "name": "up2d", @@ -389,6 +393,96 @@ func Test_modelToState(t *testing.T) { }, Schema: newSchema(), }) + _ = wantGcpHotWarmDeployment.Set("alias", "") + + wantGcpIOOptAutoscale := util.NewResourceData(t, util.ResDataParams{ + ID: mock.ValidClusterID, + State: map[string]interface{}{ + "alias": "", + "deployment_template_id": "gcp-io-optimized", + "id": "123b7b540dfc967a7a649c18e2fce4ed", + "name": "up2d", + "region": "gcp-asia-east1", + "version": "7.9.2", + "apm": []interface{}{map[string]interface{}{ + "elasticsearch_cluster_ref_id": "main-elasticsearch", + "ref_id": "main-apm", + "region": "gcp-asia-east1", + "resource_id": "12307c6c304949b8a9f3682b80900879", + "version": "7.9.2", + "http_endpoint": "http://12307c6c304949b8a9f3682b80900879.apm.asia-east1.gcp.elastic-cloud.com:80", + "https_endpoint": "https://12307c6c304949b8a9f3682b80900879.apm.asia-east1.gcp.elastic-cloud.com:443", + "topology": []interface{}{map[string]interface{}{ + "instance_configuration_id": "gcp.apm.1", + "size": "0.5g", + "size_resource": "memory", + "zone_count": 1, + }}, + }}, + "elasticsearch": []interface{}{map[string]interface{}{ + "autoscale": "true", + "cloud_id": "up2d:someCloudID", + "http_endpoint": "http://123695e76d914005bf90b717e668ad4b.asia-east1.gcp.elastic-cloud.com:9200", + "https_endpoint": "https://123695e76d914005bf90b717e668ad4b.asia-east1.gcp.elastic-cloud.com:9243", + "ref_id": "main-elasticsearch", + "region": "gcp-asia-east1", + "resource_id": "123695e76d914005bf90b717e668ad4b", + "topology": []interface{}{ + map[string]interface{}{ + "id": "hot_content", + "instance_configuration_id": "gcp.data.highio.1", + "node_type_data": "true", + "node_type_ingest": "true", + "node_type_master": "true", + "node_type_ml": "false", + "size": "8g", + "size_resource": "memory", + "zone_count": 2, + "autoscaling": []interface{}{map[string]interface{}{ + "max_size": "29g", + "max_size_resource": "memory", + "policy_override_json": `{"proactive_storage":{"forecast_window":"3 h"}}`, + }}, + }, + map[string]interface{}{ + "id": "ml", + "instance_configuration_id": "gcp.ml.1", + "node_type_data": "false", + "node_type_ingest": "false", + "node_type_master": "false", + "node_type_ml": "true", + "size": "1g", + "size_resource": "memory", + "zone_count": 1, + "autoscaling": []interface{}{map[string]interface{}{ + "max_size": "30g", + "max_size_resource": "memory", + + "min_size": "1g", + "min_size_resource": "memory", + }}, + }, + }, + }}, + "kibana": []interface{}{map[string]interface{}{ + "elasticsearch_cluster_ref_id": "main-elasticsearch", + "ref_id": "main-kibana", + "region": "gcp-asia-east1", + "resource_id": "12365046781e4d729a07df64fe67c8c6", + "version": "7.9.2", + "http_endpoint": "http://12365046781e4d729a07df64fe67c8c6.asia-east1.gcp.elastic-cloud.com:9200", + "https_endpoint": "https://12365046781e4d729a07df64fe67c8c6.asia-east1.gcp.elastic-cloud.com:9243", + "topology": []interface{}{map[string]interface{}{ + "instance_configuration_id": "gcp.kibana.1", + "size": "1g", + "size_resource": "memory", + "zone_count": 1, + }}, + }}, + }, + Schema: newSchema(), + }) + _ = wantGcpIOOptAutoscale.Set("alias", "") gcpHotWarmNodeRolesRes := openDeploymentGet(t, "testdata/deployment-gcp-hot-warm-node_roles.json") gcpHotWarmNodeRolesRD := schema.TestResourceDataRaw(t, newSchema(), nil) @@ -471,6 +565,7 @@ func Test_modelToState(t *testing.T) { }, Schema: newSchema(), }) + _ = wantGcpHotWarmNodeRolesDeployment.Set("alias", "") awsCCSRes := openDeploymentGet(t, "testdata/deployment-aws-ccs.json") awsCCSRD := schema.TestResourceDataRaw(t, newSchema(), nil) @@ -533,6 +628,7 @@ func Test_modelToState(t *testing.T) { }, Schema: newSchema(), }) + _ = wantAWSCCSDeployment.Set("alias", "") argCCSRemotes := models.RemoteResources{Resources: []*models.RemoteResourceRef{ { Alias: ec.String("alias"), @@ -563,7 +659,8 @@ func Test_modelToState(t *testing.T) { args: args{ d: deploymentSchemaArg, res: &models.DeploymentGetResponse{ - Name: ec.String("my_deployment_name"), + Alias: "my-deployment", + Name: ec.String("my_deployment_name"), Settings: &models.DeploymentSettings{ TrafficFilterSettings: &models.TrafficFilterSettings{ Rulesets: []string{"0.0.0.0/0", "192.168.10.0/24"}, @@ -766,6 +863,7 @@ func Test_modelToState(t *testing.T) { want: util.NewResourceData(t, util.ResDataParams{ ID: mock.ValidClusterID, State: map[string]interface{}{ + "alias": "my-deployment", "deployment_template_id": "aws-io-optimized-v2", "id": "123b7b540dfc967a7a649c18e2fce4ed", "name": "up2d", @@ -864,92 +962,7 @@ func Test_modelToState(t *testing.T) { { name: "flattens a gcp plan with autoscale set (io-optimized)", args: args{d: gcpIOOptimizedRD, res: gcpIOOptimizedAutoscaleRes}, - want: util.NewResourceData(t, util.ResDataParams{ - ID: mock.ValidClusterID, - State: map[string]interface{}{ - "deployment_template_id": "gcp-io-optimized", - "id": "123b7b540dfc967a7a649c18e2fce4ed", - "name": "up2d", - "region": "gcp-asia-east1", - "version": "7.9.2", - "apm": []interface{}{map[string]interface{}{ - "elasticsearch_cluster_ref_id": "main-elasticsearch", - "ref_id": "main-apm", - "region": "gcp-asia-east1", - "resource_id": "12307c6c304949b8a9f3682b80900879", - "version": "7.9.2", - "http_endpoint": "http://12307c6c304949b8a9f3682b80900879.apm.asia-east1.gcp.elastic-cloud.com:80", - "https_endpoint": "https://12307c6c304949b8a9f3682b80900879.apm.asia-east1.gcp.elastic-cloud.com:443", - "topology": []interface{}{map[string]interface{}{ - "instance_configuration_id": "gcp.apm.1", - "size": "0.5g", - "size_resource": "memory", - "zone_count": 1, - }}, - }}, - "elasticsearch": []interface{}{map[string]interface{}{ - "autoscale": "true", - "cloud_id": "up2d:someCloudID", - "http_endpoint": "http://123695e76d914005bf90b717e668ad4b.asia-east1.gcp.elastic-cloud.com:9200", - "https_endpoint": "https://123695e76d914005bf90b717e668ad4b.asia-east1.gcp.elastic-cloud.com:9243", - "ref_id": "main-elasticsearch", - "region": "gcp-asia-east1", - "resource_id": "123695e76d914005bf90b717e668ad4b", - "topology": []interface{}{ - map[string]interface{}{ - "id": "hot_content", - "instance_configuration_id": "gcp.data.highio.1", - "node_type_data": "true", - "node_type_ingest": "true", - "node_type_master": "true", - "node_type_ml": "false", - "size": "8g", - "size_resource": "memory", - "zone_count": 2, - "autoscaling": []interface{}{map[string]interface{}{ - "max_size": "29g", - "max_size_resource": "memory", - "policy_override_json": `{"proactive_storage":{"forecast_window":"3 h"}}`, - }}, - }, - map[string]interface{}{ - "id": "ml", - "instance_configuration_id": "gcp.ml.1", - "node_type_data": "false", - "node_type_ingest": "false", - "node_type_master": "false", - "node_type_ml": "true", - "size": "1g", - "size_resource": "memory", - "zone_count": 1, - "autoscaling": []interface{}{map[string]interface{}{ - "max_size": "30g", - "max_size_resource": "memory", - - "min_size": "1g", - "min_size_resource": "memory", - }}, - }, - }, - }}, - "kibana": []interface{}{map[string]interface{}{ - "elasticsearch_cluster_ref_id": "main-elasticsearch", - "ref_id": "main-kibana", - "region": "gcp-asia-east1", - "resource_id": "12365046781e4d729a07df64fe67c8c6", - "version": "7.9.2", - "http_endpoint": "http://12365046781e4d729a07df64fe67c8c6.asia-east1.gcp.elastic-cloud.com:9200", - "https_endpoint": "https://12365046781e4d729a07df64fe67c8c6.asia-east1.gcp.elastic-cloud.com:9243", - "topology": []interface{}{map[string]interface{}{ - "instance_configuration_id": "gcp.kibana.1", - "size": "1g", - "size_resource": "memory", - "zone_count": 1, - }}, - }}, - }, - Schema: newSchema(), - }), + want: wantGcpIOOptAutoscale, }, { name: "flattens a gcp plan (hot-warm)", diff --git a/ec/ecresource/deploymentresource/schema.go b/ec/ecresource/deploymentresource/schema.go index a5b82a797..14d5ac9ba 100644 --- a/ec/ecresource/deploymentresource/schema.go +++ b/ec/ecresource/deploymentresource/schema.go @@ -32,6 +32,12 @@ const ( // newSchema returns the schema for an "ec_deployment" resource. func newSchema() map[string]*schema.Schema { return map[string]*schema.Schema{ + "alias": { + Type: schema.TypeString, + Description: "Optional deployment alias that affects the format of the resource URLs", + Optional: true, + Computed: true, + }, "version": { Type: schema.TypeString, Description: "Required Elastic Stack version to use for all of the deployment resources", diff --git a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-extension.json b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-extension.json index 852b65012..9352aa36f 100644 --- a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-extension.json +++ b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-extension.json @@ -1,4 +1,5 @@ { + "alias": "my-deployment", "healthy": true, "id": "123365f2805e46808d40849b1c0b266b", "name": "up2d", diff --git a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-tags.json b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-tags.json index c3e40e358..1693c2d8b 100644 --- a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-tags.json +++ b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized-tags.json @@ -1,4 +1,5 @@ { + "alias": "my-deployment", "healthy": true, "id": "123365f2805e46808d40849b1c0b266b", "name": "up2d", diff --git a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized.json b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized.json index 8b6e5f8a8..527ecf0c3 100644 --- a/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized.json +++ b/ec/ecresource/deploymentresource/testdata/deployment-aws-io-optimized.json @@ -1,4 +1,5 @@ { + "alias": "my-deployment", "healthy": true, "id": "123365f2805e46808d40849b1c0b266b", "name": "up2d", diff --git a/ec/ecresource/deploymentresource/testdata/deployment-azure-io-optimized.json b/ec/ecresource/deploymentresource/testdata/deployment-azure-io-optimized.json index ca9dc9243..61407b369 100644 --- a/ec/ecresource/deploymentresource/testdata/deployment-azure-io-optimized.json +++ b/ec/ecresource/deploymentresource/testdata/deployment-azure-io-optimized.json @@ -1,4 +1,5 @@ { + "alias": "my-deployment", "healthy": true, "id": "123e79d8109c4a0790b0b333110bf715", "name": "up2d", diff --git a/ec/ecresource/deploymentresource/testdata/deployment-gcp-io-optimized.json b/ec/ecresource/deploymentresource/testdata/deployment-gcp-io-optimized.json index 92c231f23..c7ccee783 100644 --- a/ec/ecresource/deploymentresource/testdata/deployment-gcp-io-optimized.json +++ b/ec/ecresource/deploymentresource/testdata/deployment-gcp-io-optimized.json @@ -1,4 +1,5 @@ { + "alias": "my-deployment", "healthy": true, "id": "1239e402d6df471ea374bd68e3f91cc5", "name": "up2d", diff --git a/ec/ecresource/deploymentresource/testutil_datastruct.go b/ec/ecresource/deploymentresource/testutil_datastruct.go index c96c823e4..13c475d27 100644 --- a/ec/ecresource/deploymentresource/testutil_datastruct.go +++ b/ec/ecresource/deploymentresource/testutil_datastruct.go @@ -23,6 +23,7 @@ import ( func newSampleDeployment() map[string]interface{} { return map[string]interface{}{ + "alias": "my-deployment", "name": "my_deployment_name", "deployment_template_id": "aws-hot-warm-v2", "region": "us-east-1", @@ -72,6 +73,7 @@ func newSampleDeployment() map[string]interface{} { func newSampleLegacyDeployment() map[string]interface{} { return map[string]interface{}{ + "alias": "my-deployment", "name": "my_deployment_name", "deployment_template_id": "aws-io-optimized-v2", "region": "us-east-1", @@ -87,6 +89,7 @@ func newSampleLegacyDeployment() map[string]interface{} { func newSampleDeploymentEmptyRD() map[string]interface{} { return map[string]interface{}{ + "alias": "my-deployment", "name": "my_deployment_name", "deployment_template_id": "aws-io-optimized-v2", "region": "us-east-1", @@ -101,6 +104,7 @@ func newSampleDeploymentEmptyRD() map[string]interface{} { func newSampleDeploymentOverrides() map[string]interface{} { return map[string]interface{}{ + "alias": "my-deployment", "name": "my_deployment_name", "deployment_template_id": "aws-io-optimized-v2", "region": "us-east-1", @@ -136,6 +140,7 @@ func newSampleDeploymentOverrides() map[string]interface{} { func newSampleDeploymentOverridesIC() map[string]interface{} { return map[string]interface{}{ + "alias": "my-deployment", "name": "my_deployment_name", "deployment_template_id": "aws-io-optimized-v2", "region": "us-east-1",