feat(iaas): add experimental support for routing tables and routes (#896)
* Merged PR 788126: feat(iaas): Onboard routing tables feat(iaas): Onboard routing tables Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> * Merged PR 793350: fix(routingtable): region attribute is missing in scheme fix(routingtable): region attribute is missing in scheme Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> * Merged PR 797968: feat(iaas): onboarding of routing table routes relates to STACKITTPR-241 * use iaasalpha sdk from github * resolve todos * remove routes from routing table model * restructure packages * acc tests routing tables * add acc tests for routes * chore(iaas): mark routing table resources as experimental * chore(deps): use iaasalpha sdk v0.1.19-alpha * Review feedback Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> --------- Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> Co-authored-by: Alexander Dahmen (EXT) <Alexander.Dahmen_ext@external.mail.schwarz> Co-authored-by: Alexander Dahmen <alexander.dahmen@inovex.de>
This commit is contained in:
parent
d2c51afbe5
commit
9ff9b8f610
65 changed files with 5160 additions and 53 deletions
832
stackit/internal/services/iaasalpha/iaasalpha_acc_test.go
Normal file
832
stackit/internal/services/iaasalpha/iaasalpha_acc_test.go
Normal file
|
|
@ -0,0 +1,832 @@
|
|||
package iaasalpha_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
_ "embed"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-testing/config"
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
||||
"github.com/hashicorp/terraform-plugin-testing/terraform"
|
||||
stackitSdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config"
|
||||
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
|
||||
"github.com/stackitcloud/stackit-sdk-go/services/iaasalpha"
|
||||
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
|
||||
|
||||
"maps"
|
||||
|
||||
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
|
||||
)
|
||||
|
||||
// TODO: create network area using terraform resource instead once it's out of experimental stage and GA
|
||||
const (
|
||||
testNetworkAreaId = "25bbf23a-8134-4439-9f5e-1641caf8354e"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed testdata/resource-routingtable-min.tf
|
||||
resourceRoutingTableMinConfig string
|
||||
|
||||
//go:embed testdata/resource-routingtable-max.tf
|
||||
resourceRoutingTableMaxConfig string
|
||||
|
||||
//go:embed testdata/resource-routingtable-route-min.tf
|
||||
resourceRoutingTableRouteMinConfig string
|
||||
|
||||
//go:embed testdata/resource-routingtable-route-max.tf
|
||||
resourceRoutingTableRouteMaxConfig string
|
||||
)
|
||||
|
||||
var testConfigRoutingTableMin = config.Variables{
|
||||
"organization_id": config.StringVariable(testutil.OrganizationId),
|
||||
"network_area_id": config.StringVariable(testNetworkAreaId),
|
||||
"name": config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))),
|
||||
}
|
||||
|
||||
var testConfigRoutingTableMinUpdated = func() config.Variables {
|
||||
updatedConfig := config.Variables{}
|
||||
maps.Copy(updatedConfig, testConfigRoutingTableMin)
|
||||
updatedConfig["name"] = config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum)))
|
||||
return updatedConfig
|
||||
}()
|
||||
|
||||
var testConfigRoutingTableMax = config.Variables{
|
||||
"organization_id": config.StringVariable(testutil.OrganizationId),
|
||||
"network_area_id": config.StringVariable(testNetworkAreaId),
|
||||
"name": config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))),
|
||||
"description": config.StringVariable("This is the description of the routing table."),
|
||||
"label": config.StringVariable("routing-table-label-01"),
|
||||
"system_routes": config.BoolVariable(false),
|
||||
"region": config.StringVariable(testutil.Region),
|
||||
}
|
||||
|
||||
var testConfigRoutingTableMaxUpdated = func() config.Variables {
|
||||
updatedConfig := config.Variables{}
|
||||
for k, v := range testConfigRoutingTableMax {
|
||||
updatedConfig[k] = v
|
||||
}
|
||||
updatedConfig["name"] = config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum)))
|
||||
updatedConfig["description"] = config.StringVariable("This is the updated description of the routing table.")
|
||||
updatedConfig["label"] = config.StringVariable("routing-table-updated-label-01")
|
||||
return updatedConfig
|
||||
}()
|
||||
|
||||
var testConfigRoutingTableRouteMin = config.Variables{
|
||||
"organization_id": config.StringVariable(testutil.OrganizationId),
|
||||
"network_area_id": config.StringVariable(testNetworkAreaId),
|
||||
"routing_table_name": config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))),
|
||||
"destination_type": config.StringVariable("cidrv4"),
|
||||
"destination_value": config.StringVariable("192.168.178.0/24"),
|
||||
"next_hop_type": config.StringVariable("ipv4"),
|
||||
"next_hop_value": config.StringVariable("192.168.178.1"),
|
||||
}
|
||||
|
||||
var testConfigRoutingTableRouteMinUpdated = func() config.Variables {
|
||||
updatedConfig := config.Variables{}
|
||||
maps.Copy(updatedConfig, testConfigRoutingTableRouteMin)
|
||||
// nothing possible to update of the required attributes...
|
||||
return updatedConfig
|
||||
}()
|
||||
|
||||
var testConfigRoutingTableRouteMax = config.Variables{
|
||||
"organization_id": config.StringVariable(testutil.OrganizationId),
|
||||
"network_area_id": config.StringVariable(testNetworkAreaId),
|
||||
"routing_table_name": config.StringVariable(fmt.Sprintf("acc-test-%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))),
|
||||
"destination_type": config.StringVariable("cidrv4"), // TODO: use cidrv6 once it's supported as we already test cidrv4 in the min test
|
||||
"destination_value": config.StringVariable("192.168.178.0/24"),
|
||||
"next_hop_type": config.StringVariable("ipv4"), // TODO: use ipv6, internet or blackhole once they are supported as we already test ipv4 in the min test
|
||||
"next_hop_value": config.StringVariable("192.168.178.1"),
|
||||
"label": config.StringVariable("route-label-01"),
|
||||
}
|
||||
|
||||
var testConfigRoutingTableRouteMaxUpdated = func() config.Variables {
|
||||
updatedConfig := config.Variables{}
|
||||
maps.Copy(updatedConfig, testConfigRoutingTableRouteMax)
|
||||
updatedConfig["label"] = config.StringVariable("route-updated-label-01")
|
||||
return updatedConfig
|
||||
}()
|
||||
|
||||
// execute routingtable and routingtable route min and max tests with t.Run() to prevent parallel runs (needed for tests of stackit_routing_tables datasource)
|
||||
func TestAccRoutingTable(t *testing.T) {
|
||||
t.Run("TestAccRoutingTableMin", func(t *testing.T) {
|
||||
t.Logf("TestAccRoutingTableMin name: %s", testutil.ConvertConfigVariable(testConfigRoutingTableMin["name"]))
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
CheckDestroy: testAccCheckDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
// Creation
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMin,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableMinConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMin["name"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "region", testutil.Region),
|
||||
resource.TestCheckNoResourceAttr("stackit_routing_table.routing_table", "description"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "system_routes", "true"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Data sources
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMin,
|
||||
Config: fmt.Sprintf(`
|
||||
%s
|
||||
%s
|
||||
|
||||
# single routing table
|
||||
data "stackit_routing_table" "routing_table" {
|
||||
organization_id = stackit_routing_table.routing_table.organization_id
|
||||
network_area_id = stackit_routing_table.routing_table.network_area_id
|
||||
routing_table_id = stackit_routing_table.routing_table.routing_table_id
|
||||
}
|
||||
|
||||
# all routing tables in network area
|
||||
data "stackit_routing_tables" "routing_tables" {
|
||||
organization_id = stackit_routing_table.routing_table.organization_id
|
||||
network_area_id = stackit_routing_table.routing_table.network_area_id
|
||||
}
|
||||
`,
|
||||
testutil.IaaSProviderConfig(), resourceRoutingTableMinConfig,
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"data.stackit_routing_table.routing_table", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMin["name"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "region", testutil.Region),
|
||||
resource.TestCheckNoResourceAttr("data.stackit_routing_table.routing_table", "description"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "system_routes", "true"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "default", "false"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table.routing_table", "updated_at"),
|
||||
|
||||
// Routing tables
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "region", testutil.Region),
|
||||
// there will be always two routing tables because of the main routing table of the network area
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.#", "2"),
|
||||
|
||||
// default routing table
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.0.default", "true"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.0.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.0.updated_at"),
|
||||
|
||||
// second routing table managed via terraform
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"data.stackit_routing_tables.routing_tables", "items.1.routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.name", testutil.ConvertConfigVariable(testConfigRoutingTableMin["name"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.labels.%", "0"),
|
||||
resource.TestCheckNoResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.description"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.system_routes", "true"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.default", "false"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.1.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.1.updated_at"),
|
||||
),
|
||||
},
|
||||
// Import
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMinUpdated,
|
||||
ResourceName: "stackit_routing_table.routing_table",
|
||||
ImportStateIdFunc: func(s *terraform.State) (string, error) {
|
||||
r, ok := s.RootModule().Resources["stackit_routing_table.routing_table"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find resource stackit_routing_table.routing_table")
|
||||
}
|
||||
region, ok := r.Primary.Attributes["region"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute region")
|
||||
}
|
||||
networkAreaId, ok := r.Primary.Attributes["network_area_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute network_area_id")
|
||||
}
|
||||
routingTableId, ok := r.Primary.Attributes["routing_table_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute routing_table_id")
|
||||
}
|
||||
return fmt.Sprintf("%s,%s,%s,%s", testutil.OrganizationId, region, networkAreaId, routingTableId), nil
|
||||
},
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Update
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMinUpdated,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableMinConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMinUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMinUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMinUpdated["name"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "region", testutil.Region),
|
||||
resource.TestCheckNoResourceAttr("stackit_routing_table.routing_table", "description"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "system_routes", "true"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Deletion is done by the framework implicitly
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("TestAccRoutingTableMax", func(t *testing.T) {
|
||||
t.Logf("TestAccRoutingTableMax name: %s", testutil.ConvertConfigVariable(testConfigRoutingTableMax["name"]))
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
CheckDestroy: testAccCheckDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
// Creation
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMax,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableMaxConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMax["name"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableMax["label"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "region", testutil.ConvertConfigVariable(testConfigRoutingTableMax["region"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "description", testutil.ConvertConfigVariable(testConfigRoutingTableMax["description"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "system_routes", testutil.ConvertConfigVariable(testConfigRoutingTableMax["system_routes"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Data sources
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMax,
|
||||
Config: fmt.Sprintf(`
|
||||
%s
|
||||
%s
|
||||
|
||||
# single routing table
|
||||
data "stackit_routing_table" "routing_table" {
|
||||
organization_id = stackit_routing_table.routing_table.organization_id
|
||||
network_area_id = stackit_routing_table.routing_table.network_area_id
|
||||
routing_table_id = stackit_routing_table.routing_table.routing_table_id
|
||||
}
|
||||
|
||||
# all routing tables in network area
|
||||
data "stackit_routing_tables" "routing_tables" {
|
||||
organization_id = stackit_routing_table.routing_table.organization_id
|
||||
network_area_id = stackit_routing_table.routing_table.network_area_id
|
||||
}
|
||||
`,
|
||||
testutil.IaaSProviderConfig(), resourceRoutingTableMaxConfig,
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"data.stackit_routing_table.routing_table", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMax["name"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableMax["label"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "region", testutil.ConvertConfigVariable(testConfigRoutingTableMax["region"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "description", testutil.ConvertConfigVariable(testConfigRoutingTableMax["description"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "system_routes", testutil.ConvertConfigVariable(testConfigRoutingTableMax["system_routes"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table.routing_table", "default", "false"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table.routing_table", "updated_at"),
|
||||
|
||||
// Routing tables
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "region", testutil.ConvertConfigVariable(testConfigRoutingTableMax["region"])),
|
||||
// there will be always two routing tables because of the main routing table of the network area
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.#", "2"),
|
||||
|
||||
// default routing table
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.0.default", "true"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.0.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.0.updated_at"),
|
||||
|
||||
// second routing table managed via terraform
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"data.stackit_routing_tables.routing_tables", "items.1.routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.name", testutil.ConvertConfigVariable(testConfigRoutingTableMax["name"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableMax["label"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.description", testutil.ConvertConfigVariable(testConfigRoutingTableMax["description"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.system_routes", testutil.ConvertConfigVariable(testConfigRoutingTableMax["system_routes"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_tables.routing_tables", "items.1.default", "false"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.1.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_tables.routing_tables", "items.1.updated_at"),
|
||||
),
|
||||
},
|
||||
// Import
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMaxUpdated,
|
||||
ResourceName: "stackit_routing_table.routing_table",
|
||||
ImportStateIdFunc: func(s *terraform.State) (string, error) {
|
||||
r, ok := s.RootModule().Resources["stackit_routing_table.routing_table"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find resource stackit_routing_table.routing_table")
|
||||
}
|
||||
region, ok := r.Primary.Attributes["region"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute region")
|
||||
}
|
||||
networkAreaId, ok := r.Primary.Attributes["network_area_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute network_area_id")
|
||||
}
|
||||
routingTableId, ok := r.Primary.Attributes["routing_table_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute routing_table_id")
|
||||
}
|
||||
return fmt.Sprintf("%s,%s,%s,%s", testutil.OrganizationId, region, networkAreaId, routingTableId), nil
|
||||
},
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Update
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableMaxUpdated,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableMaxConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["name"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["label"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "region", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["region"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "description", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["description"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "system_routes", testutil.ConvertConfigVariable(testConfigRoutingTableMaxUpdated["system_routes"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Deletion is done by the framework implicitly
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("TestAccRoutingTableRouteMin", func(t *testing.T) {
|
||||
t.Logf("TestAccRoutingTableRouteMin")
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
CheckDestroy: testAccCheckDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
// Creation
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMin,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableRouteMinConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["routing_table_name"])),
|
||||
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "routing_table_id"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Data sources
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMin,
|
||||
Config: fmt.Sprintf(`
|
||||
%s
|
||||
%s
|
||||
|
||||
# single routing table route
|
||||
data "stackit_routing_table_route" "route" {
|
||||
organization_id = stackit_routing_table_route.route.organization_id
|
||||
network_area_id = stackit_routing_table_route.route.network_area_id
|
||||
routing_table_id = stackit_routing_table_route.route.routing_table_id
|
||||
route_id = stackit_routing_table_route.route.route_id
|
||||
}
|
||||
|
||||
# all routing table routes in routing table
|
||||
data "stackit_routing_table_routes" "routes" {
|
||||
organization_id = stackit_routing_table_route.route.organization_id
|
||||
network_area_id = stackit_routing_table_route.route.network_area_id
|
||||
routing_table_id = stackit_routing_table_route.route.routing_table_id
|
||||
}
|
||||
`,
|
||||
testutil.IaaSProviderConfig(), resourceRoutingTableRouteMinConfig,
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
"data.stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "route_id",
|
||||
"data.stackit_routing_table_route.route", "route_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_route.route", "updated_at"),
|
||||
|
||||
// Routing table routes
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["network_area_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.#", "1"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
"data.stackit_routing_table_routes.routes", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "route_id",
|
||||
"data.stackit_routing_table_routes.routes", "routes.0.route_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["destination_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMin["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.labels.%", "0"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_routes.routes", "routes.0.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_routes.routes", "routes.0.updated_at"),
|
||||
),
|
||||
},
|
||||
// Import
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMinUpdated,
|
||||
ResourceName: "stackit_routing_table_route.route",
|
||||
ImportStateIdFunc: func(s *terraform.State) (string, error) {
|
||||
r, ok := s.RootModule().Resources["stackit_routing_table_route.route"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find resource stackit_routing_table_route.route")
|
||||
}
|
||||
region, ok := r.Primary.Attributes["region"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute region")
|
||||
}
|
||||
networkAreaId, ok := r.Primary.Attributes["network_area_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute network_area_id")
|
||||
}
|
||||
routingTableId, ok := r.Primary.Attributes["routing_table_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute routing_table_id")
|
||||
}
|
||||
routeId, ok := r.Primary.Attributes["route_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute route_id")
|
||||
}
|
||||
return fmt.Sprintf("%s,%s,%s,%s,%s", testutil.OrganizationId, region, networkAreaId, routingTableId, routeId), nil
|
||||
},
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Update
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMinUpdated,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableRouteMinConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["routing_table_name"])),
|
||||
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "routing_table_id"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["destination_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["destination_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMinUpdated["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.%", "0"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Deletion is done by the framework implicitly
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("TestAccRoutingTableRouteMax", func(t *testing.T) {
|
||||
t.Logf("TestAccRoutingTableRouteMax")
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
CheckDestroy: testAccCheckDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
// Creation
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMax,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableRouteMaxConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["routing_table_name"])),
|
||||
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "routing_table_id"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["label"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Data sources
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMax,
|
||||
Config: fmt.Sprintf(`
|
||||
%s
|
||||
%s
|
||||
|
||||
# single routing table route
|
||||
data "stackit_routing_table_route" "route" {
|
||||
organization_id = stackit_routing_table_route.route.organization_id
|
||||
network_area_id = stackit_routing_table_route.route.network_area_id
|
||||
routing_table_id = stackit_routing_table_route.route.routing_table_id
|
||||
route_id = stackit_routing_table_route.route.route_id
|
||||
}
|
||||
|
||||
# all routing table routes in routing table
|
||||
data "stackit_routing_table_routes" "routes" {
|
||||
organization_id = stackit_routing_table_route.route.organization_id
|
||||
network_area_id = stackit_routing_table_route.route.network_area_id
|
||||
routing_table_id = stackit_routing_table_route.route.routing_table_id
|
||||
}
|
||||
`,
|
||||
testutil.IaaSProviderConfig(), resourceRoutingTableRouteMaxConfig,
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
"data.stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "route_id",
|
||||
"data.stackit_routing_table_route.route", "route_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_route.route", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["label"])),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_route.route", "updated_at"),
|
||||
|
||||
// Routing table routes
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["organization_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["network_area_id"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.#", "1"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
"data.stackit_routing_table_routes.routes", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table_route.route", "route_id",
|
||||
"data.stackit_routing_table_routes.routes", "routes.0.route_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["destination_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("data.stackit_routing_table_routes.routes", "routes.0.labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMax["label"])),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_routes.routes", "routes.0.created_at"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_routing_table_routes.routes", "routes.0.updated_at"),
|
||||
),
|
||||
},
|
||||
// Import
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMaxUpdated,
|
||||
ResourceName: "stackit_routing_table_route.route",
|
||||
ImportStateIdFunc: func(s *terraform.State) (string, error) {
|
||||
r, ok := s.RootModule().Resources["stackit_routing_table_route.route"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find resource stackit_routing_table_route.route")
|
||||
}
|
||||
region, ok := r.Primary.Attributes["region"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute region")
|
||||
}
|
||||
networkAreaId, ok := r.Primary.Attributes["network_area_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute network_area_id")
|
||||
}
|
||||
routingTableId, ok := r.Primary.Attributes["routing_table_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute routing_table_id")
|
||||
}
|
||||
routeId, ok := r.Primary.Attributes["route_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute route_id")
|
||||
}
|
||||
return fmt.Sprintf("%s,%s,%s,%s,%s", testutil.OrganizationId, region, networkAreaId, routingTableId, routeId), nil
|
||||
},
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Update
|
||||
{
|
||||
ConfigVariables: testConfigRoutingTableRouteMaxUpdated,
|
||||
Config: fmt.Sprintf("%s\n%s", testutil.IaaSProviderConfig(), resourceRoutingTableRouteMaxConfig),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Routing table
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table.routing_table", "routing_table_id"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table.routing_table", "name", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["routing_table_name"])),
|
||||
|
||||
// Routing table route
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "organization_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["organization_id"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "network_area_id", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["network_area_id"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "routing_table_id"),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_routing_table.routing_table", "routing_table_id",
|
||||
"stackit_routing_table_route.route", "routing_table_id",
|
||||
),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "region", testutil.Region),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["destination_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "destination.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["destination_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.type", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["next_hop_type"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "next_hop.value", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["next_hop_value"])),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.%", "1"),
|
||||
resource.TestCheckResourceAttr("stackit_routing_table_route.route", "labels.acc-test", testutil.ConvertConfigVariable(testConfigRoutingTableRouteMaxUpdated["label"])),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "created_at"),
|
||||
resource.TestCheckResourceAttrSet("stackit_routing_table_route.route", "updated_at"),
|
||||
),
|
||||
},
|
||||
// Deletion is done by the framework implicitly
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func testAccCheckDestroy(s *terraform.State) error {
|
||||
checkFunctions := []func(s *terraform.State) error{
|
||||
testAccCheckRoutingTableDestroy,
|
||||
testAccCheckRoutingTableRouteDestroy,
|
||||
}
|
||||
var errs []error
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(len(checkFunctions))
|
||||
|
||||
for _, f := range checkFunctions {
|
||||
go func() {
|
||||
err := f(s)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func testAccCheckRoutingTableDestroy(s *terraform.State) error {
|
||||
ctx := context.Background()
|
||||
var client *iaasalpha.APIClient
|
||||
var err error
|
||||
if testutil.IaaSCustomEndpoint == "" {
|
||||
client, err = iaasalpha.NewAPIClient()
|
||||
} else {
|
||||
client, err = iaasalpha.NewAPIClient(
|
||||
stackitSdkConfig.WithEndpoint(testutil.IaaSCustomEndpoint),
|
||||
)
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("creating client: %w", err)
|
||||
}
|
||||
|
||||
var errs []error
|
||||
// routing tables
|
||||
for _, rs := range s.RootModule().Resources {
|
||||
if rs.Type != "stackit_routing_table" {
|
||||
continue
|
||||
}
|
||||
routingTableId := strings.Split(rs.Primary.ID, core.Separator)[3]
|
||||
region := strings.Split(rs.Primary.ID, core.Separator)[1]
|
||||
err := client.DeleteRoutingTableFromAreaExecute(ctx, testutil.OrganizationId, testNetworkAreaId, region, routingTableId)
|
||||
if err != nil {
|
||||
var oapiErr *oapierror.GenericOpenAPIError
|
||||
if errors.As(err, &oapiErr) {
|
||||
if oapiErr.StatusCode == http.StatusNotFound {
|
||||
continue
|
||||
}
|
||||
}
|
||||
errs = append(errs, fmt.Errorf("cannot trigger routing table deletion %q: %w", routingTableId, err))
|
||||
}
|
||||
}
|
||||
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func testAccCheckRoutingTableRouteDestroy(s *terraform.State) error {
|
||||
ctx := context.Background()
|
||||
var client *iaasalpha.APIClient
|
||||
var err error
|
||||
if testutil.IaaSCustomEndpoint == "" {
|
||||
client, err = iaasalpha.NewAPIClient()
|
||||
} else {
|
||||
client, err = iaasalpha.NewAPIClient(
|
||||
stackitSdkConfig.WithEndpoint(testutil.IaaSCustomEndpoint),
|
||||
)
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("creating client: %w", err)
|
||||
}
|
||||
|
||||
var errs []error
|
||||
// routes
|
||||
for _, rs := range s.RootModule().Resources {
|
||||
if rs.Type != "stackit_routing_table_route" {
|
||||
continue
|
||||
}
|
||||
routingTableRouteId := strings.Split(rs.Primary.ID, core.Separator)[4]
|
||||
routingTableId := strings.Split(rs.Primary.ID, core.Separator)[3]
|
||||
region := strings.Split(rs.Primary.ID, core.Separator)[1]
|
||||
err := client.DeleteRouteFromRoutingTableExecute(ctx, testutil.OrganizationId, testNetworkAreaId, region, routingTableId, routingTableRouteId)
|
||||
if err != nil {
|
||||
var oapiErr *oapierror.GenericOpenAPIError
|
||||
if errors.As(err, &oapiErr) {
|
||||
if oapiErr.StatusCode == http.StatusNotFound {
|
||||
continue
|
||||
}
|
||||
}
|
||||
errs = append(errs, fmt.Errorf("cannot trigger routing table route deletion %q: %w", routingTableId, err))
|
||||
}
|
||||
}
|
||||
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue