From 607d90c27701c23746fdec9b460d4a5e191ead53 Mon Sep 17 00:00:00 2001 From: Salvatore Orlando Date: Wed, 25 Sep 2024 19:10:53 +0200 Subject: [PATCH] Disable MP Resources from NSX 9.0.0 onwards This change disables deperecate NSX MP resources and data sources when NSX manager version is higher or equal to 9.0.0 For MP resources, with NSX >= 9.0.0: - terraform apply and import operations will fail with an error like the following one: "MP resource was deprecated and has been removed in NSX 9.0.0"; - terraform plan and delete operations for MP resources already in the state will not be impacted as read and delete operations are no-op when the NSX version is 9.0.0 or higher. This will allow users to easily remove these resources from the terraform state; - all terraform operations involving MP data sources will fail with the error above; - terraform plan operations for resource not yet in the Terraform state will succeed, but will then fail at the apply stage. This because Terraform won't perform a read from the backend if the resource is not present at all in the state. Signed-off-by: Salvatore Orlando --- nsxt/data_source_nsxt_ip_pool_test.go | 31 +++++- nsxt/provider.go | 136 +++++++++++++------------- nsxt/removed_resource_wrapper.go | 102 +++++++++++++++++++ nsxt/resource_nsxt_ip_set_test.go | 69 ++++++++++++- nsxt/utils.go | 8 ++ 5 files changed, 274 insertions(+), 72 deletions(-) create mode 100644 nsxt/removed_resource_wrapper.go diff --git a/nsxt/data_source_nsxt_ip_pool_test.go b/nsxt/data_source_nsxt_ip_pool_test.go index 5a974fd89..963ed5174 100644 --- a/nsxt/data_source_nsxt_ip_pool_test.go +++ b/nsxt/data_source_nsxt_ip_pool_test.go @@ -5,6 +5,7 @@ package nsxt import ( "fmt" + "regexp" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -18,7 +19,12 @@ func TestAccDataSourceNsxtIPPool_basic(t *testing.T) { testResourceName := "data.nsxt_ip_pool.test" resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccOnlyLocalManager(t); testAccTestDeprecated(t); testAccPreCheck(t) }, + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersionLessThan(t, "9.0.0") + }, Providers: testAccProviders, Steps: []resource.TestStep{ { @@ -32,6 +38,29 @@ func TestAccDataSourceNsxtIPPool_basic(t *testing.T) { }) } +func TestAccDataSourceNsxtIPPool_basic_900(t *testing.T) { + ipPoolName := getIPPoolName() + if ipPoolName == "" { + t.Skipf("No NSXT_TEST_IP_POOL set - skipping test") + } + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersion(t, "9.0.0") + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccNSXIPPoolReadTemplate(ipPoolName), + ExpectError: regexp.MustCompile("MP data source.*has been removed in NSX"), + }, + }, + }) +} + func testAccNSXIPPoolReadTemplate(name string) string { return fmt.Sprintf(` data "nsxt_ip_pool" "test" { diff --git a/nsxt/provider.go b/nsxt/provider.go index 89a2815fc..af2c05488 100644 --- a/nsxt/provider.go +++ b/nsxt/provider.go @@ -246,18 +246,18 @@ func Provider() *schema.Provider { DataSourcesMap: map[string]*schema.Resource{ "nsxt_provider_info": dataSourceNsxtProviderInfo(), "nsxt_transport_zone": dataSourceNsxtTransportZone(), - "nsxt_switching_profile": dataSourceNsxtSwitchingProfile(), - "nsxt_logical_tier0_router": dataSourceNsxtLogicalTier0Router(), - "nsxt_logical_tier1_router": dataSourceNsxtLogicalTier1Router(), - "nsxt_mac_pool": dataSourceNsxtMacPool(), - "nsxt_ns_group": dataSourceNsxtNsGroup(), - "nsxt_ns_groups": dataSourceNsxtNsGroups(), - "nsxt_ns_service": dataSourceNsxtNsService(), - "nsxt_ns_services": dataSourceNsxtNsServices(), + "nsxt_switching_profile": removedDataSourceWrapper(dataSourceNsxtSwitchingProfile, "nsxt_switching_profile"), + "nsxt_logical_tier0_router": removedDataSourceWrapper(dataSourceNsxtLogicalTier0Router, "nsxt_logical_tier0_router"), + "nsxt_logical_tier1_router": removedDataSourceWrapper(dataSourceNsxtLogicalTier1Router, "nsxt_logical_tier1_router"), + "nsxt_mac_pool": removedDataSourceWrapper(dataSourceNsxtMacPool, "nsxt_mac_pool"), + "nsxt_ns_group": removedDataSourceWrapper(dataSourceNsxtNsGroup, "nsxt_ns_group"), + "nsxt_ns_groups": removedDataSourceWrapper(dataSourceNsxtNsGroups, "nsxt_ns_groups"), + "nsxt_ns_service": removedDataSourceWrapper(dataSourceNsxtNsService, "nsxt_ns_service"), + "nsxt_ns_services": removedDataSourceWrapper(dataSourceNsxtNsServices, "nsxt_ns_services"), "nsxt_edge_cluster": dataSourceNsxtEdgeCluster(), "nsxt_certificate": dataSourceNsxtCertificate(), - "nsxt_ip_pool": dataSourceNsxtIPPool(), - "nsxt_firewall_section": dataSourceNsxtFirewallSection(), + "nsxt_ip_pool": removedDataSourceWrapper(dataSourceNsxtIPPool, "nsxt_ip_pool"), + "nsxt_firewall_section": removedDataSourceWrapper(dataSourceNsxtFirewallSection, "nsxt_firewall_section"), "nsxt_management_cluster": dataSourceNsxtManagementCluster(), "nsxt_policy_edge_cluster": dataSourceNsxtPolicyEdgeCluster(), "nsxt_policy_edge_node": dataSourceNsxtPolicyEdgeNode(), @@ -331,64 +331,64 @@ func Provider() *schema.Provider { }, ResourcesMap: map[string]*schema.Resource{ - "nsxt_dhcp_relay_profile": resourceNsxtDhcpRelayProfile(), - "nsxt_dhcp_relay_service": resourceNsxtDhcpRelayService(), - "nsxt_dhcp_server_profile": resourceNsxtDhcpServerProfile(), - "nsxt_logical_dhcp_server": resourceNsxtLogicalDhcpServer(), - "nsxt_dhcp_server_ip_pool": resourceNsxtDhcpServerIPPool(), - "nsxt_logical_switch": resourceNsxtLogicalSwitch(), - "nsxt_vlan_logical_switch": resourceNsxtVlanLogicalSwitch(), - "nsxt_logical_dhcp_port": resourceNsxtLogicalDhcpPort(), - "nsxt_logical_port": resourceNsxtLogicalPort(), - "nsxt_logical_tier0_router": resourceNsxtLogicalTier0Router(), - "nsxt_logical_tier1_router": resourceNsxtLogicalTier1Router(), - "nsxt_logical_router_centralized_service_port": resourceNsxtLogicalRouterCentralizedServicePort(), - "nsxt_logical_router_downlink_port": resourceNsxtLogicalRouterDownLinkPort(), - "nsxt_logical_router_link_port_on_tier0": resourceNsxtLogicalRouterLinkPortOnTier0(), - "nsxt_logical_router_link_port_on_tier1": resourceNsxtLogicalRouterLinkPortOnTier1(), - "nsxt_ip_discovery_switching_profile": resourceNsxtIPDiscoverySwitchingProfile(), - "nsxt_mac_management_switching_profile": resourceNsxtMacManagementSwitchingProfile(), - "nsxt_qos_switching_profile": resourceNsxtQosSwitchingProfile(), - "nsxt_spoofguard_switching_profile": resourceNsxtSpoofGuardSwitchingProfile(), - "nsxt_switch_security_switching_profile": resourceNsxtSwitchSecuritySwitchingProfile(), - "nsxt_l4_port_set_ns_service": resourceNsxtL4PortSetNsService(), - "nsxt_algorithm_type_ns_service": resourceNsxtAlgorithmTypeNsService(), - "nsxt_icmp_type_ns_service": resourceNsxtIcmpTypeNsService(), - "nsxt_igmp_type_ns_service": resourceNsxtIgmpTypeNsService(), - "nsxt_ether_type_ns_service": resourceNsxtEtherTypeNsService(), - "nsxt_ip_protocol_ns_service": resourceNsxtIPProtocolNsService(), - "nsxt_ns_service_group": resourceNsxtNsServiceGroup(), - "nsxt_ns_group": resourceNsxtNsGroup(), - "nsxt_firewall_section": resourceNsxtFirewallSection(), - "nsxt_nat_rule": resourceNsxtNatRule(), - "nsxt_ip_block": resourceNsxtIPBlock(), - "nsxt_ip_block_subnet": resourceNsxtIPBlockSubnet(), - "nsxt_ip_pool": resourceNsxtIPPool(), - "nsxt_ip_pool_allocation_ip_address": resourceNsxtIPPoolAllocationIPAddress(), - "nsxt_ip_set": resourceNsxtIPSet(), - "nsxt_static_route": resourceNsxtStaticRoute(), - "nsxt_vm_tags": resourceNsxtVMTags(), - "nsxt_lb_icmp_monitor": resourceNsxtLbIcmpMonitor(), - "nsxt_lb_tcp_monitor": resourceNsxtLbTCPMonitor(), - "nsxt_lb_udp_monitor": resourceNsxtLbUDPMonitor(), - "nsxt_lb_http_monitor": resourceNsxtLbHTTPMonitor(), - "nsxt_lb_https_monitor": resourceNsxtLbHTTPSMonitor(), - "nsxt_lb_passive_monitor": resourceNsxtLbPassiveMonitor(), - "nsxt_lb_pool": resourceNsxtLbPool(), - "nsxt_lb_tcp_virtual_server": resourceNsxtLbTCPVirtualServer(), - "nsxt_lb_udp_virtual_server": resourceNsxtLbUDPVirtualServer(), - "nsxt_lb_http_virtual_server": resourceNsxtLbHTTPVirtualServer(), - "nsxt_lb_http_forwarding_rule": resourceNsxtLbHTTPForwardingRule(), - "nsxt_lb_http_request_rewrite_rule": resourceNsxtLbHTTPRequestRewriteRule(), - "nsxt_lb_http_response_rewrite_rule": resourceNsxtLbHTTPResponseRewriteRule(), - "nsxt_lb_cookie_persistence_profile": resourceNsxtLbCookiePersistenceProfile(), - "nsxt_lb_source_ip_persistence_profile": resourceNsxtLbSourceIPPersistenceProfile(), - "nsxt_lb_client_ssl_profile": resourceNsxtLbClientSslProfile(), - "nsxt_lb_server_ssl_profile": resourceNsxtLbServerSslProfile(), - "nsxt_lb_service": resourceNsxtLbService(), - "nsxt_lb_fast_tcp_application_profile": resourceNsxtLbFastTCPApplicationProfile(), - "nsxt_lb_fast_udp_application_profile": resourceNsxtLbFastUDPApplicationProfile(), - "nsxt_lb_http_application_profile": resourceNsxtLbHTTPApplicationProfile(), + "nsxt_dhcp_relay_profile": removedResourceWrapper(resourceNsxtDhcpRelayProfile, "nsxt_dhcp_relay_profile"), + "nsxt_dhcp_relay_service": removedResourceWrapper(resourceNsxtDhcpRelayService, "nsxt_dhcp_relay_service"), + "nsxt_dhcp_server_profile": removedResourceWrapper(resourceNsxtDhcpServerProfile, "nsxt_dhcp_server_profile"), + "nsxt_logical_dhcp_server": removedResourceWrapper(resourceNsxtLogicalDhcpServer, "nsxt_logical_dhcp_server"), + "nsxt_dhcp_server_ip_pool": removedResourceWrapper(resourceNsxtDhcpServerIPPool, "nsxt_dhcp_server_ip_pool"), + "nsxt_logical_switch": removedResourceWrapper(resourceNsxtLogicalSwitch, "nsxt_logical_switch"), + "nsxt_vlan_logical_switch": removedResourceWrapper(resourceNsxtVlanLogicalSwitch, "nsxt_vlan_logical_switch"), + "nsxt_logical_dhcp_port": removedResourceWrapper(resourceNsxtLogicalDhcpPort, "nsxt_logical_dhcp_port"), + "nsxt_logical_port": removedResourceWrapper(resourceNsxtLogicalPort, "nsxt_logical_port"), + "nsxt_logical_tier0_router": removedResourceWrapper(resourceNsxtLogicalTier0Router, "nsxt_logical_tier0_router"), + "nsxt_logical_tier1_router": removedResourceWrapper(resourceNsxtLogicalTier1Router, "nsxt_logical_tier1_router"), + "nsxt_logical_router_centralized_service_port": removedResourceWrapper(resourceNsxtLogicalRouterCentralizedServicePort, "nsxt_logical_router_centralized_service_port"), + "nsxt_logical_router_downlink_port": removedResourceWrapper(resourceNsxtLogicalRouterDownLinkPort, "nsxt_logical_router_downlink_port"), + "nsxt_logical_router_link_port_on_tier0": removedResourceWrapper(resourceNsxtLogicalRouterLinkPortOnTier0, "nsxt_logical_router_link_port_on_tier0"), + "nsxt_logical_router_link_port_on_tier1": removedResourceWrapper(resourceNsxtLogicalRouterLinkPortOnTier1, "nsxt_logical_router_link_port_on_tier1"), + "nsxt_ip_discovery_switching_profile": removedResourceWrapper(resourceNsxtIPDiscoverySwitchingProfile, "nsxt_ip_discovery_switching_profile"), + "nsxt_mac_management_switching_profile": removedResourceWrapper(resourceNsxtMacManagementSwitchingProfile, "nsxt_mac_management_switching_profile"), + "nsxt_qos_switching_profile": removedResourceWrapper(resourceNsxtQosSwitchingProfile, "nsxt_qos_switching_profile"), + "nsxt_spoofguard_switching_profile": removedResourceWrapper(resourceNsxtSpoofGuardSwitchingProfile, "nsxt_spoofguard_switching_profile"), + "nsxt_switch_security_switching_profile": removedResourceWrapper(resourceNsxtSwitchSecuritySwitchingProfile, "nsxt_switch_security_switching_profile"), + "nsxt_l4_port_set_ns_service": removedResourceWrapper(resourceNsxtL4PortSetNsService, "nsxt_l4_port_set_ns_service"), + "nsxt_algorithm_type_ns_service": removedResourceWrapper(resourceNsxtAlgorithmTypeNsService, "nsxt_algorithm_type_ns_service"), + "nsxt_icmp_type_ns_service": removedResourceWrapper(resourceNsxtIcmpTypeNsService, "nsxt_icmp_type_ns_service"), + "nsxt_igmp_type_ns_service": removedResourceWrapper(resourceNsxtIgmpTypeNsService, "nsxt_igmp_type_ns_service"), + "nsxt_ether_type_ns_service": removedResourceWrapper(resourceNsxtEtherTypeNsService, "nsxt_ether_type_ns_service"), + "nsxt_ip_protocol_ns_service": removedResourceWrapper(resourceNsxtIPProtocolNsService, "nsxt_ip_protocol_ns_service"), + "nsxt_ns_service_group": removedResourceWrapper(resourceNsxtNsServiceGroup, "nsxt_ns_service_group"), + "nsxt_ns_group": removedResourceWrapper(resourceNsxtNsGroup, "nsxt_ns_group"), + "nsxt_firewall_section": removedResourceWrapper(resourceNsxtFirewallSection, "nsxt_firewall_section"), + "nsxt_nat_rule": removedResourceWrapper(resourceNsxtNatRule, "nsxt_nat_rule"), + "nsxt_ip_block": removedResourceWrapper(resourceNsxtIPBlock, "nsxt_ip_block"), + "nsxt_ip_block_subnet": removedResourceWrapper(resourceNsxtIPBlockSubnet, "nsxt_ip_block_subnet"), + "nsxt_ip_pool": removedResourceWrapper(resourceNsxtIPPool, "nsxt_ip_pool"), + "nsxt_ip_pool_allocation_ip_address": removedResourceWrapper(resourceNsxtIPPoolAllocationIPAddress, "nsxt_ip_pool_allocation_ip_address"), + "nsxt_ip_set": removedResourceWrapper(resourceNsxtIPSet, "nsxt_ip_set"), + "nsxt_static_route": removedResourceWrapper(resourceNsxtStaticRoute, "nsxt_static_route"), + "nsxt_vm_tags": removedResourceWrapper(resourceNsxtVMTags, "nsxt_vm_tags"), + "nsxt_lb_icmp_monitor": removedResourceWrapper(resourceNsxtLbIcmpMonitor, "nsxt_lb_icmp_monitor"), + "nsxt_lb_tcp_monitor": removedResourceWrapper(resourceNsxtLbTCPMonitor, "nsxt_lb_tcp_monitor"), + "nsxt_lb_udp_monitor": removedResourceWrapper(resourceNsxtLbUDPMonitor, "nsxt_lb_udp_monitor"), + "nsxt_lb_http_monitor": removedResourceWrapper(resourceNsxtLbHTTPMonitor, "nsxt_lb_http_monitor"), + "nsxt_lb_https_monitor": removedResourceWrapper(resourceNsxtLbHTTPSMonitor, "nsxt_lb_https_monitor"), + "nsxt_lb_passive_monitor": removedResourceWrapper(resourceNsxtLbPassiveMonitor, "nsxt_lb_passive_monitor"), + "nsxt_lb_pool": removedResourceWrapper(resourceNsxtLbPool, "nsxt_lb_pool"), + "nsxt_lb_tcp_virtual_server": removedResourceWrapper(resourceNsxtLbTCPVirtualServer, "nsxt_lb_tcp_virtual_server"), + "nsxt_lb_udp_virtual_server": removedResourceWrapper(resourceNsxtLbUDPVirtualServer, "nsxt_lb_udp_virtual_server"), + "nsxt_lb_http_virtual_server": removedResourceWrapper(resourceNsxtLbHTTPVirtualServer, "nsxt_lb_http_virtual_server"), + "nsxt_lb_http_forwarding_rule": removedResourceWrapper(resourceNsxtLbHTTPForwardingRule, "nsxt_lb_http_forwarding_rule"), + "nsxt_lb_http_request_rewrite_rule": removedResourceWrapper(resourceNsxtLbHTTPRequestRewriteRule, "nsxt_lb_http_request_rewrite_rule"), + "nsxt_lb_http_response_rewrite_rule": removedResourceWrapper(resourceNsxtLbHTTPResponseRewriteRule, "nsxt_lb_http_response_rewrite_rule"), + "nsxt_lb_cookie_persistence_profile": removedResourceWrapper(resourceNsxtLbCookiePersistenceProfile, "nsxt_lb_cookie_persistence_profile"), + "nsxt_lb_source_ip_persistence_profile": removedResourceWrapper(resourceNsxtLbSourceIPPersistenceProfile, "nsxt_lb_source_ip_persistence_profile"), + "nsxt_lb_client_ssl_profile": removedResourceWrapper(resourceNsxtLbClientSslProfile, "nsxt_lb_client_ssl_profile"), + "nsxt_lb_server_ssl_profile": removedResourceWrapper(resourceNsxtLbServerSslProfile, "nsxt_lb_server_ssl_profile"), + "nsxt_lb_service": removedResourceWrapper(resourceNsxtLbService, "nsxt_lb_service"), + "nsxt_lb_fast_tcp_application_profile": removedResourceWrapper(resourceNsxtLbFastTCPApplicationProfile, "nsxt_lb_fast_tcp_application_profile"), + "nsxt_lb_fast_udp_application_profile": removedResourceWrapper(resourceNsxtLbFastUDPApplicationProfile, "nsxt_lb_fast_udp_application_profile"), + "nsxt_lb_http_application_profile": removedResourceWrapper(resourceNsxtLbHTTPApplicationProfile, "nsxt_lb_http_application_profile"), "nsxt_policy_tier1_gateway": resourceNsxtPolicyTier1Gateway(), "nsxt_policy_tier1_gateway_interface": resourceNsxtPolicyTier1GatewayInterface(), "nsxt_policy_tier0_gateway": resourceNsxtPolicyTier0Gateway(), diff --git a/nsxt/removed_resource_wrapper.go b/nsxt/removed_resource_wrapper.go new file mode 100644 index 000000000..7bd9d9de9 --- /dev/null +++ b/nsxt/removed_resource_wrapper.go @@ -0,0 +1,102 @@ +package nsxt + +import ( + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/vmware/terraform-provider-nsxt/nsxt/util" +) + +type resourceFunc func() *schema.Resource + +func commonVersionCheck(m interface{}) bool { + initNSXVersion(getPolicyConnector(m)) + return !util.NsxVersionHigherOrEqual("9.0.0") +} + +func readWrapper(originalFunc schema.ReadFunc, name string, fail bool) schema.ReadFunc { + wrappedFunc := func(d *schema.ResourceData, m interface{}) error { + if commonVersionCheck(m) { + return originalFunc(d, m) + + } + if fail { + // We fail for data source only + log.Printf("[INFO] Failing read for data source %s: removed from NSX 9.0.0", name) + return mpDataSourceRemovedError(name) + } + log.Printf("[INFO] Skipping read for resource %s: removed from NSX 9.0.0", name) + return nil + } + return wrappedFunc +} + +func createWrapper(originalFunc schema.CreateFunc, name string) schema.CreateFunc { + wrappedFunc := func(d *schema.ResourceData, m interface{}) error { + if commonVersionCheck(m) { + return originalFunc(d, m) + } + log.Printf("[INFO] Failing write for resource %s: removed from NSX 9.0.0", name) + return mpResourceRemovedError(name) + } + return wrappedFunc +} + +func updateWrapper(originalFunc schema.UpdateFunc, name string) schema.UpdateFunc { + wrappedFunc := func(d *schema.ResourceData, m interface{}) error { + if commonVersionCheck(m) { + return originalFunc(d, m) + } + log.Printf("[INFO] Failing update for resource %s: removed from NSX 9.0.0", name) + return mpResourceRemovedError(name) + } + return wrappedFunc +} + +func deleteWrapper(originalFunc schema.DeleteFunc, name string) schema.DeleteFunc { + wrappedFunc := func(d *schema.ResourceData, m interface{}) error { + if commonVersionCheck(m) { + return originalFunc(d, m) + } + log.Printf("[INFO] Skipping delete for resource %s: removed from NSX 9.0.0", name) + return nil + } + return wrappedFunc +} + +func importerWrapper(originalImporter *schema.ResourceImporter, name string) *schema.ResourceImporter { + wrappedFunc := func(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { + if commonVersionCheck(m) { + return originalImporter.State(d, m) + } + log.Printf("[INFO] Failing import for resource %s: removed from NSX 9.0.0", name) + return nil, mpResourceRemovedError(name) + } + originalImporter.State = wrappedFunc + return originalImporter +} + +func removedResourceWrapper(realResourceFunc resourceFunc, name string) *schema.Resource { + resource := realResourceFunc() + resource.Read = readWrapper(resource.Read, name, false) + if resource.Delete != nil { + resource.Delete = deleteWrapper(resource.Delete, name) + } + if resource.Create != nil { + resource.Create = createWrapper(resource.Create, name) + } + if resource.Update != nil { + resource.Update = updateWrapper(resource.Update, name) + } + if resource.Importer != nil { + resource.Importer = importerWrapper(resource.Importer, name) + } + return resource +} + +func removedDataSourceWrapper(realDataSourceFunc resourceFunc, name string) *schema.Resource { + resource := realDataSourceFunc() + resource.Read = readWrapper(resource.Read, name, true) + return resource +} diff --git a/nsxt/resource_nsxt_ip_set_test.go b/nsxt/resource_nsxt_ip_set_test.go index 78ae26f72..2f1e18543 100644 --- a/nsxt/resource_nsxt_ip_set_test.go +++ b/nsxt/resource_nsxt_ip_set_test.go @@ -6,6 +6,7 @@ package nsxt import ( "fmt" "net/http" + "regexp" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -18,7 +19,12 @@ func TestAccResourceNsxtIpSet_basic(t *testing.T) { testResourceName := "nsxt_ip_set.test" resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccOnlyLocalManager(t); testAccTestDeprecated(t); testAccPreCheck(t) }, + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersionLessThan(t, "9.0.0") + }, Providers: testAccProviders, CheckDestroy: func(state *terraform.State) error { return testAccNSXIpSetCheckDestroy(state, updateName) @@ -48,12 +54,41 @@ func TestAccResourceNsxtIpSet_basic(t *testing.T) { }) } +func TestAccResourceNsxtIpSet_basic_900(t *testing.T) { + name := getAccTestResourceName() + resourceName := getAccTestResourceName() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersion(t, "9.0.0") + }, + Providers: testAccProviders, + CheckDestroy: func(state *terraform.State) error { + return testAccNSXIpSetCheckDestroy(state, resourceName) + }, + Steps: []resource.TestStep{ + { + Config: testAccNSXIpSetCreateTemplate(name), + ExpectError: regexp.MustCompile("MP resource.*has been removed in NSX"), + }, + }, + }) +} + func TestAccResourceNsxtIpSet_noName(t *testing.T) { name := "" testResourceName := "nsxt_ip_set.test" resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccOnlyLocalManager(t); testAccTestDeprecated(t); testAccPreCheck(t) }, + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersionLessThan(t, "9.0.0") + }, Providers: testAccProviders, CheckDestroy: func(state *terraform.State) error { return testAccNSXIpSetCheckDestroy(state, name) @@ -88,7 +123,12 @@ func TestAccResourceNsxtIpSet_importBasic(t *testing.T) { testResourceName := "nsxt_ip_set.test" resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccOnlyLocalManager(t); testAccTestDeprecated(t); testAccPreCheck(t) }, + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersionLessThan(t, "9.0.0") + }, Providers: testAccProviders, CheckDestroy: func(state *terraform.State) error { return testAccNSXIpSetCheckDestroy(state, name) @@ -106,6 +146,29 @@ func TestAccResourceNsxtIpSet_importBasic(t *testing.T) { }) } +func TestAccResourceNsxtIpSet_importBasic_900(t *testing.T) { + name := getAccTestResourceName() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccOnlyLocalManager(t) + testAccTestDeprecated(t) + testAccPreCheck(t) + testAccNSXVersion(t, "9.0.0") + }, + Providers: testAccProviders, + CheckDestroy: func(state *terraform.State) error { + return testAccNSXIpSetCheckDestroy(state, name) + }, + Steps: []resource.TestStep{ + { + Config: testAccNSXIpSetCreateTemplate(name), + ExpectError: regexp.MustCompile("MP resource.*has been removed in NSX"), + }, + }, + }) +} + func testAccNSXIpSetExists(displayName string, resourceName string) resource.TestCheckFunc { return func(state *terraform.State) error { diff --git a/nsxt/utils.go b/nsxt/utils.go index e0d40b73a..8bfe75f08 100644 --- a/nsxt/utils.go +++ b/nsxt/utils.go @@ -623,6 +623,14 @@ func dataSourceNotSupportedError() error { return fmt.Errorf("This data source is not supported with given provider settings") } +func mpResourceRemovedError(resourceName string) error { + return fmt.Errorf("MP resource %s was deprecated and has been removed in NSX 9.0.0", resourceName) +} + +func mpDataSourceRemovedError(dataSourceName string) error { + return fmt.Errorf("MP data source %s was deprecated and has been removed in NSX 9.0.0", dataSourceName) +} + func stringInList(target string, list []string) bool { // util to check if target string is in list for _, value := range list {