mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-07 22:53:08 -06:00
a085c8d71e
* provider/azurerm: Add AzureRM Loadbalancer resource Adds support for the elusive Azure LoadBalancer * [x] `azurerm_lb` * [x] `azurerm_lb_backend_address_pool` * [x] `azurerm_lb_rule` * [x] `azurerm_lb_nat_rule` * [x] `azurerm_lb_probe` * [x] `azurerm_lb_nat_pool` Test Results: ``` make testacc TEST=./builtin/providers/azurerm TESTARGS='-run=TestAccAzureRMLoadbalancer' ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) TF_ACC=1 go test ./builtin/providers/azurerm -v -run=TestAccAzureRMLoadbalancer -timeout 120m === RUN TestAccAzureRMLoadbalancerBackEndAddressPool_basic --- PASS: TestAccAzureRMLoadbalancerBackEndAddressPool_basic (207.26s) === RUN TestAccAzureRMLoadbalancerBackEndAddressPool_removal --- PASS: TestAccAzureRMLoadbalancerBackEndAddressPool_removal (165.89s) === RUN TestAccAzureRMLoadbalancerNatRule_basic --- PASS: TestAccAzureRMLoadbalancerNatRule_basic (179.30s) === RUN TestAccAzureRMLoadbalancerNatRule_removal --- PASS: TestAccAzureRMLoadbalancerNatRule_removal (180.73s) === RUN TestAccAzureRMLoadbalancerRule_basic --- PASS: TestAccAzureRMLoadbalancerRule_basic (170.40s) === RUN TestAccAzureRMLoadbalancerRule_removal --- PASS: TestAccAzureRMLoadbalancerRule_removal (204.23s) === RUN TestAccAzureRMLoadbalancer_basic --- PASS: TestAccAzureRMLoadbalancer_basic (136.03s) === RUN TestAccAzureRMLoadbalancer_frontEndConfig --- PASS: TestAccAzureRMLoadbalancer_frontEndConfig (214.47s) === RUN TestAccAzureRMLoadbalancer_tags --- PASS: TestAccAzureRMLoadbalancer_tags (215.52s) === RUN TestAccAzureRMLoadbalancerProbe_basic --- PASS: TestAccAzureRMLoadbalancerProbe_basic (183.36s) === RUN TestAccAzureRMLoadbalancerProbe_removal --- PASS: TestAccAzureRMLoadbalancerProbe_removal (185.86s) === RUN TestAccAzureRMLoadbalancerNatPool_basic --- PASS: TestAccAzureRMLoadbalancerNatPool_basic (161.47s) === RUN TestAccAzureRMLoadbalancerNatPool_removal --- PASS: TestAccAzureRMLoadbalancerNatPool_removal (167.38s) PASS ok github.com/hashicorp/terraform/builtin/providers/azurerm 1673.852s ``` * provider/azurerm: Documentation for the ARM LB resources
145 lines
4.1 KiB
Go
145 lines
4.1 KiB
Go
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))
|
|
if value != "static" && value != "dynamic" {
|
|
errors = append(errors, fmt.Errorf("LoadBalancer Allocations can only be Static or Dynamic"))
|
|
}
|
|
return
|
|
}
|