Skip to content

Commit

Permalink
Merge pull request #917 from ksamoray/gw_dns_fw_bug
Browse files Browse the repository at this point in the history
Error use of multitenancy with T0 gateways
  • Loading branch information
ksamoray authored Jul 12, 2023
2 parents 454445b + c7a8296 commit e9d63f8
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 17 deletions.
4 changes: 4 additions & 0 deletions nsxt/policy_errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
36 changes: 27 additions & 9 deletions nsxt/resource_nsxt_policy_gateway_dns_forwarder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 {
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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 {
Expand Down
26 changes: 22 additions & 4 deletions nsxt/resource_nsxt_policy_nat_rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}
Expand Down
24 changes: 20 additions & 4 deletions nsxt/resource_nsxt_policy_static_route.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}
Expand All @@ -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)
}
Expand Down

0 comments on commit e9d63f8

Please sign in to comment.