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 {