Skip to content
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

azurerm_lb_nat_pool: Add support for floating_ip_enabled, tcp_reset_enabled, idle_timeout_in_minutes #13674

Merged
merged 5 commits into from
Oct 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 104 additions & 14 deletions internal/services/loadbalancer/loadbalancer_nat_pool_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,50 @@ func TestAccAzureRMLoadBalancerNatPool_basic(t *testing.T) {

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data),
Config: r.basic(data, "Basic"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
})
}

func TestAccAzureRMLoadBalancerNatPool_complete(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_lb_nat_pool", "test")
r := LoadBalancerNatPool{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.complete(data, "Standard"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
})
}

func TestAccAzureRMLoadBalancerNatPool_update(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_lb_nat_pool", "test")
r := LoadBalancerNatPool{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data, "Standard"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
{
Config: r.complete(data, "Standard"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
{
Config: r.basic(data, "Standard"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
Expand All @@ -38,7 +81,7 @@ func TestAccAzureRMLoadBalancerNatPool_requiresImport(t *testing.T) {

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data),
Config: r.basic(data, "Basic"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
Expand All @@ -53,13 +96,15 @@ func TestAccAzureRMLoadBalancerNatPool_disappears(t *testing.T) {

data.ResourceTest(t, r, []acceptance.TestStep{
data.DisappearsStep(acceptance.DisappearsStepData{
Config: r.basic,
Config: func(data acceptance.TestData) string {
return r.basic(data, "Basic")
},
TestResource: r,
}),
})
}

func TestAccAzureRMLoadBalancerNatPool_update(t *testing.T) {
func TestAccAzureRMLoadBalancerNatPool_updateMultiplePools(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_lb_nat_pool", "test")
data2 := acceptance.BuildTestData(t, "azurerm_lb_nat_pool", "test2")

Expand Down Expand Up @@ -157,50 +202,95 @@ func (r LoadBalancerNatPool) Destroy(ctx context.Context, client *clients.Client
return utils.Bool(true), nil
}

func (r LoadBalancerNatPool) basic(data acceptance.TestData) string {
func (r LoadBalancerNatPool) basic(data acceptance.TestData, sku string) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}

resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "%s"
name = "acctestRG-%[1]d"
location = "%[2]s"
}

resource "azurerm_public_ip" "test" {
name = "test-ip-%d"
name = "test-ip-%[1]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
allocation_method = "Static"
sku = "%[3]s"
}

resource "azurerm_lb" "test" {
name = "arm-test-loadbalancer-%d"
name = "arm-test-loadbalancer-%[1]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku = "%[3]s"

frontend_ip_configuration {
name = "one-%d"
name = "one-%[1]d"
public_ip_address_id = azurerm_public_ip.test.id
}
}

resource "azurerm_lb_nat_pool" "test" {
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
name = "NatPool-%d"
name = "NatPool-%[1]d"
protocol = "Tcp"
frontend_port_start = 80
frontend_port_end = 81
backend_port = 3389
frontend_ip_configuration_name = "one-%d"
frontend_ip_configuration_name = "one-%[1]d"
}
`, data.RandomInteger, data.Locations.Primary, sku)
}

func (r LoadBalancerNatPool) complete(data acceptance.TestData, sku string) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "test" {
name = "acctestRG-%[1]d"
location = "%[2]s"
}
resource "azurerm_public_ip" "test" {
name = "test-ip-%[1]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
allocation_method = "Static"
sku = "%[3]s"
}
resource "azurerm_lb" "test" {
name = "arm-test-loadbalancer-%[1]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku = "%[3]s"

frontend_ip_configuration {
name = "one-%[1]d"
public_ip_address_id = azurerm_public_ip.test.id
}
}
resource "azurerm_lb_nat_pool" "test" {
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
name = "NatPool-%[1]d"
protocol = "Tcp"
frontend_port_start = 80
frontend_port_end = 81
backend_port = 3389
frontend_ip_configuration_name = "one-%[1]d"
floating_ip_enabled = true
tcp_reset_enabled = true
idle_timeout_in_minutes = 10
}
`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger)
`, data.RandomInteger, data.Locations.Primary, sku)
}

func (r LoadBalancerNatPool) requiresImport(data acceptance.TestData) string {
template := r.basic(data)
template := r.basic(data, "Basic")
return fmt.Sprintf(`
%s

Expand Down
30 changes: 30 additions & 0 deletions internal/services/loadbalancer/nat_pool_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,23 @@ func resourceArmLoadBalancerNatPool() *pluginsdk.Resource {
ValidateFunc: validation.StringIsNotEmpty,
},

"floating_ip_enabled": {
Type: pluginsdk.TypeBool,
Optional: true,
},

"tcp_reset_enabled": {
Type: pluginsdk.TypeBool,
Optional: true,
},

"idle_timeout_in_minutes": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 4,
ValidateFunc: validation.IntBetween(4, 30),
},

"frontend_ip_configuration_id": {
Type: pluginsdk.TypeString,
Computed: true,
Expand Down Expand Up @@ -203,6 +220,8 @@ func resourceArmLoadBalancerNatPoolRead(d *pluginsdk.ResourceData, meta interfac
backendPort = int(*props.BackendPort)
}
d.Set("backend_port", backendPort)
d.Set("floating_ip_enabled", props.EnableFloatingIP)
d.Set("tcp_reset_enabled", props.EnableTCPReset)

frontendIPConfigName := ""
frontendIPConfigID := ""
Expand All @@ -229,6 +248,7 @@ func resourceArmLoadBalancerNatPoolRead(d *pluginsdk.ResourceData, meta interfac
frontendPortRangeStart = int(*props.FrontendPortRangeStart)
}
d.Set("frontend_port_start", frontendPortRangeStart)
d.Set("idle_timeout_in_minutes", int(*props.IdleTimeoutInMinutes))
d.Set("protocol", string(props.Protocol))
}

Expand Down Expand Up @@ -288,6 +308,16 @@ func expandAzureRmLoadBalancerNatPool(d *pluginsdk.ResourceData, lb *network.Loa
BackendPort: utils.Int32(int32(d.Get("backend_port").(int))),
}

if v, ok := d.GetOk("floating_ip_enabled"); ok {
properties.EnableFloatingIP = utils.Bool(v.(bool))
}

if v, ok := d.GetOk("tcp_reset_enabled"); ok {
properties.EnableTCPReset = utils.Bool(v.(bool))
}

properties.IdleTimeoutInMinutes = utils.Int32(int32(d.Get("idle_timeout_in_minutes").(int)))

if v := d.Get("frontend_ip_configuration_name").(string); v != "" {
rule, exists := FindLoadBalancerFrontEndIpConfigurationByName(lb, v)
if !exists {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading