diff --git a/nsxt/policy_errors.go b/nsxt/policy_errors.go index 4b21a9ece..9186f9ca8 100644 --- a/nsxt/policy_errors.go +++ b/nsxt/policy_errors.go @@ -177,3 +177,7 @@ func handleDeleteError(resourceType string, resourceID string, err error) error msg := fmt.Sprintf("Failed to delete %s %s", resourceType, resourceID) return logAPIError(msg, err) } + +func handleMultitenancyTier0Error() error { + return fmt.Errorf("context use not supported with Tier0 gateways") +} diff --git a/nsxt/resource_nsxt_policy_gateway_dns_forwarder.go b/nsxt/resource_nsxt_policy_gateway_dns_forwarder.go index 5bb2dd4d8..c1108ed23 100644 --- a/nsxt/resource_nsxt_policy_gateway_dns_forwarder.go +++ b/nsxt/resource_nsxt_policy_gateway_dns_forwarder.go @@ -97,7 +97,12 @@ func resourceNsxtPolicyGatewayDNSForwarderRead(d *schema.ResourceData, m interfa return fmt.Errorf("gateway_path is not valid") } - obj, err := policyGatewayDNSForwarderGet(getSessionContext(d, m), connector, gwID, isT0) + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } + + obj, err := policyGatewayDNSForwarderGet(context, connector, gwID, isT0) if err != nil { return handleReadError(d, "Gateway Dns Forwarder", gwID, err) @@ -167,12 +172,17 @@ func resourceNsxtPolicyGatewayDNSForwarderCreate(d *schema.ResourceData, m inter // Verify DNS forwarder is not yet defined for this Gateway var err error - sessionContext := getSessionContext(d, m) + context := getSessionContext(d, m) + + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } + if isT0 { - client := tier0s.NewDnsForwarderClient(sessionContext, connector) + client := tier0s.NewDnsForwarderClient(context, connector) _, err = client.Get(gwID) } else { - client := tier1s.NewDnsForwarderClient(sessionContext, connector) + client := tier1s.NewDnsForwarderClient(context, connector) _, err = client.Get(gwID) } if err == nil { @@ -183,7 +193,7 @@ func resourceNsxtPolicyGatewayDNSForwarderCreate(d *schema.ResourceData, m inter log.Printf("[INFO] Creating Dns Forwarder for Gateway %s", gwID) - err = patchNsxtPolicyGatewayDNSForwarder(sessionContext, connector, d, gwID, isT0) + err = patchNsxtPolicyGatewayDNSForwarder(context, connector, d, gwID, isT0) if err != nil { return handleCreateError("Gateway Dns Forwarder", gwID, err) } @@ -201,8 +211,12 @@ func resourceNsxtPolicyGatewayDNSForwarderUpdate(d *schema.ResourceData, m inter return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } log.Printf("[INFO] Updating Gateway Dns Forwarder with ID %s", gwID) - err := patchNsxtPolicyGatewayDNSForwarder(getSessionContext(d, m), connector, d, gwID, isT0) + err := patchNsxtPolicyGatewayDNSForwarder(context, connector, d, gwID, isT0) if err != nil { return handleUpdateError("Gateway Dns Forwarder", gwID, err) } @@ -220,12 +234,16 @@ func resourceNsxtPolicyGatewayDNSForwarderDelete(d *schema.ResourceData, m inter } var err error - sessionContext := getSessionContext(d, m) + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } + if isT0 { - client := tier0s.NewDnsForwarderClient(sessionContext, connector) + client := tier0s.NewDnsForwarderClient(context, connector) err = client.Delete(gwID) } else { - client := tier1s.NewDnsForwarderClient(sessionContext, connector) + client := tier1s.NewDnsForwarderClient(context, connector) err = client.Delete(gwID) } if err != nil { diff --git a/nsxt/resource_nsxt_policy_nat_rule.go b/nsxt/resource_nsxt_policy_nat_rule.go index 9f8394f0e..4abebcc3e 100644 --- a/nsxt/resource_nsxt_policy_nat_rule.go +++ b/nsxt/resource_nsxt_policy_nat_rule.go @@ -155,10 +155,14 @@ func resourceNsxtPolicyNATRuleDelete(d *schema.ResourceData, m interface{}) erro if gwID == "" { return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } action := d.Get("action").(string) natType := getNatTypeByAction(action) - err := deleteNsxtPolicyNATRule(getSessionContext(d, m), getPolicyConnector(m), gwID, isT0, natType, id) + err := deleteNsxtPolicyNATRule(context, getPolicyConnector(m), gwID, isT0, natType, id) if err != nil { return handleDeleteError("NAT Rule", id, err) } @@ -224,9 +228,14 @@ func resourceNsxtPolicyNATRuleRead(d *schema.ResourceData, m interface{}) error return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } + action := d.Get("action").(string) natType := getNatTypeByAction(action) - obj, err := getNsxtPolicyNATRuleByID(getSessionContext(d, m), connector, gwID, isT0, natType, id) + obj, err := getNsxtPolicyNATRuleByID(context, connector, gwID, isT0, natType, id) if err != nil { return handleReadError(d, "NAT Rule", id, err) } @@ -271,11 +280,16 @@ func resourceNsxtPolicyNATRuleCreate(d *schema.ResourceData, m interface{}) erro return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } + id := d.Get("nsx_id").(string) if id == "" { id = newUUID() } else { - _, err := getNsxtPolicyNATRuleByID(getSessionContext(d, m), connector, gwID, isT0, natType, id) + _, err := getNsxtPolicyNATRuleByID(context, connector, gwID, isT0, natType, id) if err == nil { return fmt.Errorf("NAT Rule with nsx_id '%s' already exists", id) } else if !isNotFoundError(err) { @@ -347,6 +361,10 @@ func resourceNsxtPolicyNATRuleUpdate(d *schema.ResourceData, m interface{}) erro if gwID == "" { return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } displayName := d.Get("display_name").(string) description := d.Get("description").(string) @@ -388,7 +406,7 @@ func resourceNsxtPolicyNATRuleUpdate(d *schema.ResourceData, m interface{}) erro } log.Printf("[INFO] Updating NAT Rule with ID %s", id) - err := patchNsxtPolicyNATRule(getSessionContext(d, m), connector, gwID, ruleStruct, isT0) + err := patchNsxtPolicyNATRule(context, connector, gwID, ruleStruct, isT0) if err != nil { return handleUpdateError("NAT Rule", id, err) } diff --git a/nsxt/resource_nsxt_policy_static_route.go b/nsxt/resource_nsxt_policy_static_route.go index 18e151c8b..655dd2945 100644 --- a/nsxt/resource_nsxt_policy_static_route.go +++ b/nsxt/resource_nsxt_policy_static_route.go @@ -114,12 +114,16 @@ func resourceNsxtPolicyStaticRouteCreate(d *schema.ResourceData, m interface{}) if gwID == "" { return fmt.Errorf("gateway_path is not a valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } id := d.Get("nsx_id").(string) if id == "" { id = newUUID() } else { - _, err := getNsxtPolicyStaticRouteByID(getSessionContext(d, m), connector, gwID, isT0, id) + _, err := getNsxtPolicyStaticRouteByID(context, connector, gwID, isT0, id) if err == nil { return fmt.Errorf("Static Route with nsx_id '%s' already exists", id) } else if !isNotFoundError(err) { @@ -191,8 +195,12 @@ func resourceNsxtPolicyStaticRouteRead(d *schema.ResourceData, m interface{}) er if gwID == "" { return fmt.Errorf("gateway_path is not a valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } - obj, err := getNsxtPolicyStaticRouteByID(getSessionContext(d, m), connector, gwID, isT0, id) + obj, err := getNsxtPolicyStaticRouteByID(context, connector, gwID, isT0, id) if err != nil { return handleReadError(d, "Static Route", id, err) } @@ -245,6 +253,10 @@ func resourceNsxtPolicyStaticRouteUpdate(d *schema.ResourceData, m interface{}) if gwID == "" { return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } displayName := d.Get("display_name").(string) description := d.Get("description").(string) @@ -285,7 +297,7 @@ func resourceNsxtPolicyStaticRouteUpdate(d *schema.ResourceData, m interface{}) } log.Printf("[INFO] Updating Static Route with ID %s", id) - err := patchNsxtPolicyStaticRoute(getSessionContext(d, m), connector, gwID, routeStruct, isT0) + err := patchNsxtPolicyStaticRoute(context, connector, gwID, routeStruct, isT0) if err != nil { return handleUpdateError("Static Route", id, err) } @@ -307,8 +319,12 @@ func resourceNsxtPolicyStaticRouteDelete(d *schema.ResourceData, m interface{}) if gwID == "" { return fmt.Errorf("gateway_path is not valid") } + context := getSessionContext(d, m) + if isT0 && context.ClientType == utl.Multitenancy { + return handleMultitenancyTier0Error() + } - err := deleteNsxtPolicyStaticRoute(getSessionContext(d, m), getPolicyConnector(m), gwID, isT0, id) + err := deleteNsxtPolicyStaticRoute(context, getPolicyConnector(m), gwID, isT0, id) if err != nil { return handleDeleteError("Static Route", id, err) }