-
Notifications
You must be signed in to change notification settings - Fork 9.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
provider/azurerm: Load Balancer resources #9199
Changes from 3 commits
5c93338
fd4aa3b
5444c27
7d3d707
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
package azurerm | ||
|
||
import ( | ||
"fmt" | ||
"net/http" | ||
"strings" | ||
|
||
"github.com/Azure/azure-sdk-for-go/arm/network" | ||
"github.com/hashicorp/errwrap" | ||
"github.com/hashicorp/terraform/helper/resource" | ||
) | ||
|
||
func resourceGroupAndLBNameFromId(loadBalancerId string) (string, string, error) { | ||
id, err := parseAzureResourceID(loadBalancerId) | ||
if err != nil { | ||
return "", "", err | ||
} | ||
name := id.Path["loadBalancers"] | ||
resGroup := id.ResourceGroup | ||
|
||
return resGroup, name, nil | ||
} | ||
|
||
func retrieveLoadbalancerById(loadBalancerId string, meta interface{}) (*network.LoadBalancer, bool, error) { | ||
loadBalancerClient := meta.(*ArmClient).loadBalancerClient | ||
|
||
resGroup, name, err := resourceGroupAndLBNameFromId(loadBalancerId) | ||
if err != nil { | ||
return nil, false, errwrap.Wrapf("Error Getting LoadBalancer Name and Group: {{err}}", err) | ||
} | ||
|
||
resp, err := loadBalancerClient.Get(resGroup, name, "") | ||
if err != nil { | ||
if resp.StatusCode == http.StatusNotFound { | ||
return nil, false, nil | ||
} | ||
return nil, false, fmt.Errorf("Error making Read request on Azure LoadBalancer %s: %s", name, err) | ||
} | ||
|
||
return &resp, true, nil | ||
} | ||
|
||
func findLoadBalancerBackEndAddressPoolByName(lb *network.LoadBalancer, name string) (*network.BackendAddressPool, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.BackendAddressPools == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, apc := range *lb.Properties.BackendAddressPools { | ||
if apc.Name != nil && *apc.Name == name { | ||
return &apc, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func findLoadBalancerFrontEndIpConfigurationByName(lb *network.LoadBalancer, name string) (*network.FrontendIPConfiguration, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.FrontendIPConfigurations == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, feip := range *lb.Properties.FrontendIPConfigurations { | ||
if feip.Name != nil && *feip.Name == name { | ||
return &feip, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func findLoadBalancerRuleByName(lb *network.LoadBalancer, name string) (*network.LoadBalancingRule, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.LoadBalancingRules == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, lbr := range *lb.Properties.LoadBalancingRules { | ||
if lbr.Name != nil && *lbr.Name == name { | ||
return &lbr, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func findLoadBalancerNatRuleByName(lb *network.LoadBalancer, name string) (*network.InboundNatRule, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.InboundNatRules == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, nr := range *lb.Properties.InboundNatRules { | ||
if nr.Name != nil && *nr.Name == name { | ||
return &nr, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func findLoadBalancerNatPoolByName(lb *network.LoadBalancer, name string) (*network.InboundNatPool, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.InboundNatPools == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, np := range *lb.Properties.InboundNatPools { | ||
if np.Name != nil && *np.Name == name { | ||
return &np, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func findLoadBalancerProbeByName(lb *network.LoadBalancer, name string) (*network.Probe, int, bool) { | ||
if lb == nil || lb.Properties == nil || lb.Properties.Probes == nil { | ||
return nil, -1, false | ||
} | ||
|
||
for i, p := range *lb.Properties.Probes { | ||
if p.Name != nil && *p.Name == name { | ||
return &p, i, true | ||
} | ||
} | ||
|
||
return nil, -1, false | ||
} | ||
|
||
func loadbalancerStateRefreshFunc(client *ArmClient, resourceGroupName string, loadbalancer string) resource.StateRefreshFunc { | ||
return func() (interface{}, string, error) { | ||
res, err := client.loadBalancerClient.Get(resourceGroupName, loadbalancer, "") | ||
if err != nil { | ||
return nil, "", fmt.Errorf("Error issuing read request in loadbalancerStateRefreshFunc to Azure ARM for LoadBalancer '%s' (RG: '%s'): %s", loadbalancer, resourceGroupName, err) | ||
} | ||
|
||
return res, *res.Properties.ProvisioningState, nil | ||
} | ||
} | ||
|
||
func validateLoadbalancerPrivateIpAddressAllocation(v interface{}, k string) (ws []string, errors []error) { | ||
value := strings.ToLower(v.(string)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems unnecessary complex for something that could be:
Even if we keep the map lookup pattern, it should be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shameless plug #8103 :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looks like #8103 has been merged, we'll merge this as is (pending review) and then go back and fix it up to use the new bits. |
||
if value != "static" && value != "dynamic" { | ||
errors = append(errors, fmt.Errorf("LoadBalancer Allocations can only be Static or Dynamic")) | ||
} | ||
return | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs
goimports
running on it.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍