Skip to content
Merged
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
1 change: 1 addition & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ jobs:
uses: hashicorp/setup-terraform@v2
with:
terraform_version: "1.x.x"
terraform_wrapper: false

- name: Cache Go Modules
uses: actions/cache@v3
Expand Down
11 changes: 5 additions & 6 deletions ec/acc/acc_prereq.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@ package acc

import (
"context"
"github.com/hashicorp/terraform-plugin-framework/providerserver"
"github.com/hashicorp/terraform-plugin-go/tfprotov5"
"github.com/hashicorp/terraform-plugin-mux/tf5muxserver"
"net/http"
"os"
"testing"

"github.com/hashicorp/terraform-plugin-framework/providerserver"
"github.com/hashicorp/terraform-plugin-go/tfprotov5"
"github.com/hashicorp/terraform-plugin-mux/tf5muxserver"

"github.com/elastic/cloud-sdk-go/pkg/api"
"github.com/elastic/cloud-sdk-go/pkg/auth"
"github.com/elastic/terraform-provider-ec/ec"
Expand All @@ -44,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())()
},
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
}
16 changes: 11 additions & 5 deletions ec/ecdatasource/deploymentdatasource/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ package deploymentdatasource
import (
"context"
"fmt"
"github.com/elastic/terraform-provider-ec/ec/internal"

"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/provider"
Expand All @@ -30,17 +30,21 @@ import (
"github.com/elastic/cloud-sdk-go/pkg/api/deploymentapi/deputil"
"github.com/elastic/cloud-sdk-go/pkg/models"

"github.com/elastic/terraform-provider-ec/ec/internal"
"github.com/elastic/terraform-provider-ec/ec/internal/flatteners"
"github.com/elastic/terraform-provider-ec/ec/internal/util"
)

var _ provider.DataSourceType = (*DataSourceType)(nil)

type DataSourceType struct{}

func (s DataSourceType) NewDataSource(ctx context.Context, p provider.Provider) (datasource.DataSource, diag.Diagnostics) {
func (s DataSourceType) NewDataSource(ctx context.Context, in provider.Provider) (datasource.DataSource, diag.Diagnostics) {
p, diags := internal.ConvertProviderType(in)

return &deploymentDataSource{
p: p.(internal.Provider),
}, nil
p: p,
}, diags
}

var _ datasource.DataSource = (*deploymentDataSource)(nil)
Expand Down Expand Up @@ -115,7 +119,9 @@ func modelToState(ctx context.Context, res *models.DeploymentGetResponse, state
diags.Append(flattenIntegrationsServerResources(ctx, res.Resources.IntegrationsServer, &state.IntegrationsServer)...)
diags.Append(flattenEnterpriseSearchResources(ctx, res.Resources.EnterpriseSearch, &state.EnterpriseSearch)...)

state.Tags = flattenTags(res.Metadata)
if res.Metadata != nil {
state.Tags = flatteners.FlattenTags(res.Metadata.Tags)
}

return diags
}
11 changes: 7 additions & 4 deletions ec/ecdatasource/deploymentsdatasource/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ package deploymentsdatasource
import (
"context"
"fmt"
"strconv"

"github.com/elastic/terraform-provider-ec/ec/internal"
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/provider"
"github.com/hashicorp/terraform-plugin-framework/tfsdk"
"github.com/hashicorp/terraform-plugin-framework/types"
"strconv"

"github.com/elastic/cloud-sdk-go/pkg/api/deploymentapi"
"github.com/elastic/cloud-sdk-go/pkg/models"
Expand All @@ -37,10 +38,12 @@ var _ provider.DataSourceType = (*DataSourceType)(nil)

type DataSourceType struct{}

func (s DataSourceType) NewDataSource(ctx context.Context, p provider.Provider) (datasource.DataSource, diag.Diagnostics) {
func (s DataSourceType) NewDataSource(ctx context.Context, in provider.Provider) (datasource.DataSource, diag.Diagnostics) {
p, diags := internal.ConvertProviderType(in)

return &deploymentsDataSource{
p: p.(internal.Provider),
}, nil
p: p,
}, diags
}

var _ datasource.DataSource = (*deploymentsDataSource)(nil)
Expand Down
11 changes: 7 additions & 4 deletions ec/ecdatasource/stackdatasource/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ package stackdatasource
import (
"context"
"fmt"
"regexp"

"github.com/elastic/cloud-sdk-go/pkg/api/stackapi"
"github.com/elastic/cloud-sdk-go/pkg/models"
"github.com/elastic/terraform-provider-ec/ec/internal"
Expand All @@ -28,17 +30,18 @@ import (
"github.com/hashicorp/terraform-plugin-framework/provider"
"github.com/hashicorp/terraform-plugin-framework/tfsdk"
"github.com/hashicorp/terraform-plugin-framework/types"
"regexp"
)

var _ provider.DataSourceType = (*DataSourceType)(nil)

type DataSourceType struct{}

func (s DataSourceType) NewDataSource(ctx context.Context, p provider.Provider) (datasource.DataSource, diag.Diagnostics) {
func (s DataSourceType) NewDataSource(ctx context.Context, in provider.Provider) (datasource.DataSource, diag.Diagnostics) {
p, diags := internal.ConvertProviderType(in)

return &stackDataSource{
p: p.(internal.Provider),
}, nil
p: p,
}, diags
}

var _ datasource.DataSource = (*stackDataSource)(nil)
Expand Down
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: 17 additions & 17 deletions ec/ecresource/trafficfilterassocresource/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,31 @@ 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 associationDeleted(err) {
d.SetId("")
return 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) {
response.Diagnostics.AddError(err.Error(), err.Error())
return
}
return diag.FromErr(err)
}

d.SetId("")
return nil
}

func associationDeleted(err error) bool {
Expand Down
Loading