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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions ec/acc/acc_prereq.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ func protoV5ProviderFactories() map[string]func() (tfprotov5.ProviderServer, err
func() tfprotov5.ProviderServer {
return ec.LegacyProvider().GRPCProvider()
},
func() tfprotov5.ProviderServer {
return providerserver.NewProtocol5(ec.New("acc-tests"))()
},
providerserver.NewProtocol5(ec.New("acc-tests")),
)
},
}
Expand Down
58 changes: 58 additions & 0 deletions ec/acc/deployment_traffic_filter_association_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,64 @@ func TestAccDeploymentTrafficFilterAssociation_basic(t *testing.T) {
})
}

func TestAccDeploymentTrafficFilterAssociation_UpgradeFrom0_4_1(t *testing.T) {
resName := "ec_deployment_traffic_filter.tf_assoc"
resAssocName := "ec_deployment_traffic_filter_association.tf_assoc"
randomName := acctest.RandomWithPrefix(prefix)
startCfg := "testdata/deployment_traffic_filter_association_basic.tf"
ignoreChangesCfgFile := "testdata/deployment_traffic_filter_association_basic_ignore_changes.tf"
cfg := fixtureAccDeploymentTrafficFilterResourceAssociationBasic(t, startCfg, randomName, getRegion(), defaultTemplate)
ignoreChangesCfg := fixtureAccDeploymentTrafficFilterResourceAssociationBasic(t, ignoreChangesCfgFile, randomName, getRegion(), defaultTemplate)

// Required because of a bug - see https://discuss.hashicorp.com/t/acceptance-testing-sdk-framework-upgrade-issue/44166/2
externalProviderConfig := `
terraform {
required_providers {
ec = {
source = "elastic/ec"
version = "0.4.1"
}
}
}`
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
CheckDestroy: testAccDeploymentTrafficFilterDestroy,
Steps: []resource.TestStep{
{
ExternalProviders: map[string]resource.ExternalProvider{
"ec": {
VersionConstraint: "0.4.1",
Source: "elastic/ec",
},
},
// Expects a non-empty plan since "ec_deployment.traffic_filter"
// will have changes due to the traffic filter association.
ExpectNonEmptyPlan: true,
Config: cfg + externalProviderConfig,
Check: checkBasicDeploymentTrafficFilterAssociationResource(
resName, resAssocName, randomName,
resource.TestCheckResourceAttr(resName, "include_by_default", "false"),
resource.TestCheckResourceAttr(resName, "type", "ip"),
resource.TestCheckResourceAttr(resName, "rule.#", "1"),
resource.TestCheckResourceAttr(resName, "rule.0.source", "0.0.0.0/0"),
),
},
{
PlanOnly: true,
ProtoV5ProviderFactories: testAccProviderFactory,
Config: ignoreChangesCfg,
Check: checkBasicDeploymentTrafficFilterAssociationResource(
resName, resAssocName, randomName,
resource.TestCheckResourceAttr(resName, "include_by_default", "false"),
resource.TestCheckResourceAttr(resName, "type", "ip"),
resource.TestCheckResourceAttr(resName, "rule.#", "1"),
resource.TestCheckResourceAttr(resName, "rule.0.source", "0.0.0.0/0"),
),
},
},
})
}

func fixtureAccDeploymentTrafficFilterResourceAssociationBasic(t *testing.T, fileName, name, region, depTpl string) string {
t.Helper()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
data "ec_stack" "latest" {
version_regex = "latest"
region = "%s"
}

resource "ec_deployment" "tf_assoc" {
name = "%s"
region = "%s"
version = data.ec_stack.latest.version
deployment_template_id = "%s"

elasticsearch {
topology {
id = "hot_content"
size = "1g"
}
}

kibana {}

lifecycle {
ignore_changes = [traffic_filter]
}
}

resource "ec_deployment_traffic_filter" "tf_assoc" {
name = "%s"
region = "%s"
type = "ip"

rule {
source = "0.0.0.0/0"
}
}

resource "ec_deployment_traffic_filter_association" "tf_assoc" {
traffic_filter_id = ec_deployment_traffic_filter.tf_assoc.id
deployment_id = ec_deployment.tf_assoc.id
}
42 changes: 24 additions & 18 deletions ec/ecresource/trafficfilterassocresource/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,35 @@ package trafficfilterassocresource

import (
"context"
"strconv"
"strings"

"github.com/elastic/cloud-sdk-go/pkg/api"
"fmt"
"github.com/elastic/cloud-sdk-go/pkg/api/deploymentapi/trafficfilterapi"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/types"
)

// create will create a new deployment traffic filter ruleset association.
func create(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*api.API)
params := expand(d)
params.API = client
func (t trafficFilterAssocResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) {
var newState modelV0

if err := trafficfilterapi.CreateAssociation(params); err != nil {
return diag.FromErr(err)
diags := request.Plan.Get(ctx, &newState)
response.Diagnostics.Append(diags...)
if response.Diagnostics.HasError() {
return
}

d.SetId(hashID(params.EntityID, params.ID))
return read(ctx, d, meta)
}
if err := trafficfilterapi.CreateAssociation(trafficfilterapi.CreateAssociationParams{
API: t.provider.GetClient(),
ID: newState.TrafficFilterID.Value,
EntityID: newState.DeploymentID.Value,
EntityType: entityTypeDeployment,
}); err != nil {
response.Diagnostics.AddError(err.Error(), err.Error())
return
}

func hashID(elem ...string) string {
return strconv.Itoa(schema.HashString(strings.Join(elem, "-")))
newState.ID = types.String{Value: fmt.Sprintf("%v-%v", newState.DeploymentID.Value, newState.TrafficFilterID.Value)}
diags = response.State.Set(ctx, newState)
response.Diagnostics.Append(diags...)
if response.Diagnostics.HasError() {
return
}
}
34 changes: 19 additions & 15 deletions ec/ecresource/trafficfilterassocresource/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,35 @@ package trafficfilterassocresource
import (
"context"
"errors"

"github.com/elastic/cloud-sdk-go/pkg/api"
"github.com/elastic/cloud-sdk-go/pkg/api/deploymentapi/trafficfilterapi"
"github.com/elastic/cloud-sdk-go/pkg/client/deployments_traffic_filter"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-framework/resource"
)

// delete will delete an existing deployment traffic filter ruleset association.
func delete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var client = meta.(*api.API)
func (t trafficFilterAssocResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) {
var state modelV0

params := expand(d)
params.API = client
diags := request.State.Get(ctx, &state)
response.Diagnostics.Append(diags...)
if response.Diagnostics.HasError() {
return
}

if err := trafficfilterapi.DeleteAssociation(trafficfilterapi.DeleteAssociationParams(params)); err != nil {
if err := trafficfilterapi.DeleteAssociation(trafficfilterapi.DeleteAssociationParams{
API: t.provider.GetClient(),
ID: state.TrafficFilterID.Value,
EntityID: state.DeploymentID.Value,
EntityType: entityTypeDeployment,
}); err != nil {
if associationDeleted(err) {
d.SetId("")
return nil
response.State.RemoveResource(ctx)
return
}
return diag.FromErr(err)
response.Diagnostics.AddError(err.Error(), err.Error())
return
}

d.SetId("")
return nil
response.State.RemoveResource(ctx)
}

func associationDeleted(err error) bool {
Expand Down
113 changes: 0 additions & 113 deletions ec/ecresource/trafficfilterassocresource/delete_test.go

This file was deleted.

33 changes: 0 additions & 33 deletions ec/ecresource/trafficfilterassocresource/expanders.go

This file was deleted.

Loading