Skip to content

Commit

Permalink
Update r/azurerm_(linux|windows)_virtual_machine_scale_set: a… (#6346)
Browse files Browse the repository at this point in the history
This PR introduces the automatic instance repairs policy to resource azurerm_linux_virtual_machine_scale_set and azurerm_windows_virtual_machine_scale_set.
  • Loading branch information
ArcturusZhang committed Apr 23, 2020
1 parent e3b9374 commit 8dc7eca
Show file tree
Hide file tree
Showing 8 changed files with 500 additions and 39 deletions.
Expand Up @@ -95,6 +95,8 @@ func resourceArmLinuxVirtualMachineScaleSet() *schema.Resource {

"automatic_os_upgrade_policy": VirtualMachineScaleSetAutomatedOSUpgradePolicySchema(),

"automatic_instance_repair": VirtualMachineScaleSetAutomaticRepairsPolicySchema(),

"boot_diagnostics": bootDiagnosticsSchema(),

"computer_name_prefix": {
Expand Down Expand Up @@ -430,6 +432,8 @@ func resourceArmLinuxVirtualMachineScaleSetCreate(d *schema.ResourceData, meta i
}

scaleInPolicy := d.Get("scale_in_policy").(string)
automaticRepairsPolicyRaw := d.Get("automatic_instance_repair").([]interface{})
automaticRepairsPolicy := ExpandVirtualMachineScaleSetAutomaticRepairsPolicy(automaticRepairsPolicyRaw)

props := compute.VirtualMachineScaleSet{
Location: utils.String(location),
Expand All @@ -445,6 +449,7 @@ func resourceArmLinuxVirtualMachineScaleSetCreate(d *schema.ResourceData, meta i
Tags: tags.Expand(t),
VirtualMachineScaleSetProperties: &compute.VirtualMachineScaleSetProperties{
AdditionalCapabilities: additionalCapabilities,
AutomaticRepairsPolicy: automaticRepairsPolicy,
DoNotRunExtensionsOnOverprovisionedVMs: utils.Bool(d.Get("do_not_run_extensions_on_overprovisioned_machines").(bool)),
Overprovision: utils.Bool(d.Get("overprovision").(bool)),
SinglePlacementGroup: utils.Bool(d.Get("single_placement_group").(bool)),
Expand Down Expand Up @@ -681,6 +686,11 @@ func resourceArmLinuxVirtualMachineScaleSetUpdate(d *schema.ResourceData, meta i
updateProps.VirtualMachineProfile.ScheduledEventsProfile = ExpandVirtualMachineScaleSetScheduledEventsProfile(notificationRaw)
}

if d.HasChange("automatic_instance_repair") {
automaticRepairsPolicyRaw := d.Get("automatic_instance_repair").([]interface{})
updateProps.AutomaticRepairsPolicy = ExpandVirtualMachineScaleSetAutomaticRepairsPolicy(automaticRepairsPolicyRaw)
}

if d.HasChange("identity") {
identityRaw := d.Get("identity").([]interface{})
identity, err := ExpandVirtualMachineScaleSetIdentity(identityRaw)
Expand Down Expand Up @@ -792,6 +802,10 @@ func resourceArmLinuxVirtualMachineScaleSetRead(d *schema.ResourceData, meta int
return fmt.Errorf("Error setting `additional_capabilities`: %+v", props.AdditionalCapabilities)
}

if err := d.Set("automatic_instance_repair", FlattenVirtualMachineScaleSetAutomaticRepairsPolicy(props.AutomaticRepairsPolicy)); err != nil {
return fmt.Errorf("Error setting `automatic_instance_repair`: %+v", err)
}

d.Set("do_not_run_extensions_on_overprovisioned_machines", props.DoNotRunExtensionsOnOverprovisionedVMs)
d.Set("overprovision", props.Overprovision)
proximityPlacementGroupId := ""
Expand Down
Expand Up @@ -96,6 +96,8 @@ func resourceArmWindowsVirtualMachineScaleSet() *schema.Resource {

"automatic_os_upgrade_policy": VirtualMachineScaleSetAutomatedOSUpgradePolicySchema(),

"automatic_instance_repair": VirtualMachineScaleSetAutomaticRepairsPolicySchema(),

"boot_diagnostics": bootDiagnosticsSchema(),

"computer_name_prefix": {
Expand Down Expand Up @@ -456,6 +458,8 @@ func resourceArmWindowsVirtualMachineScaleSetCreate(d *schema.ResourceData, meta
}

scaleInPolicy := d.Get("scale_in_policy").(string)
automaticRepairsPolicyRaw := d.Get("automatic_instance_repair").([]interface{})
automaticRepairsPolicy := ExpandVirtualMachineScaleSetAutomaticRepairsPolicy(automaticRepairsPolicyRaw)

props := compute.VirtualMachineScaleSet{
Location: utils.String(location),
Expand All @@ -471,6 +475,7 @@ func resourceArmWindowsVirtualMachineScaleSetCreate(d *schema.ResourceData, meta
Tags: tags.Expand(t),
VirtualMachineScaleSetProperties: &compute.VirtualMachineScaleSetProperties{
AdditionalCapabilities: additionalCapabilities,
AutomaticRepairsPolicy: automaticRepairsPolicy,
DoNotRunExtensionsOnOverprovisionedVMs: utils.Bool(d.Get("do_not_run_extensions_on_overprovisioned_machines").(bool)),
Overprovision: utils.Bool(d.Get("overprovision").(bool)),
SinglePlacementGroup: utils.Bool(d.Get("single_placement_group").(bool)),
Expand Down Expand Up @@ -711,6 +716,12 @@ func resourceArmWindowsVirtualMachineScaleSetUpdate(d *schema.ResourceData, meta
updateProps.VirtualMachineProfile.ScheduledEventsProfile = ExpandVirtualMachineScaleSetScheduledEventsProfile(notificationRaw)
}

if d.HasChange("automatic_instance_repair") {
automaticRepairsPolicyRaw := d.Get("automatic_instance_repair").([]interface{})
automaticRepairsPolicy := ExpandVirtualMachineScaleSetAutomaticRepairsPolicy(automaticRepairsPolicyRaw)
updateProps.AutomaticRepairsPolicy = automaticRepairsPolicy
}

if d.HasChange("identity") {
identityRaw := d.Get("identity").([]interface{})
identity, err := ExpandVirtualMachineScaleSetIdentity(identityRaw)
Expand Down Expand Up @@ -822,6 +833,10 @@ func resourceArmWindowsVirtualMachineScaleSetRead(d *schema.ResourceData, meta i
return fmt.Errorf("Error setting `additional_capabilities`: %+v", props.AdditionalCapabilities)
}

if err := d.Set("automatic_instance_repair", FlattenVirtualMachineScaleSetAutomaticRepairsPolicy(props.AutomaticRepairsPolicy)); err != nil {
return fmt.Errorf("Error setting `automatic_instance_repair`: %+v", err)
}

d.Set("do_not_run_extensions_on_overprovisioned_machines", props.DoNotRunExtensionsOnOverprovisionedVMs)
d.Set("overprovision", props.Overprovision)
proximityPlacementGroupId := ""
Expand Down
Expand Up @@ -439,6 +439,9 @@ func TestAccAzureRMLinuxVirtualMachineScaleSet_otherTerminateNotification(t *tes
resource.TestCheckResourceAttr(data.ResourceName, "terminate_notification.0.enabled", "true"),
),
},
data.ImportStep(
"admin_password",
),
// turn terminate notification off
{
Config: testAccAzureRMLinuxVirtualMachineScaleSet_otherTerminateNotification(data, false),
Expand All @@ -451,6 +454,60 @@ func TestAccAzureRMLinuxVirtualMachineScaleSet_otherTerminateNotification(t *tes
data.ImportStep(
"admin_password",
),
// turn terminate notification on again
{
Config: testAccAzureRMLinuxVirtualMachineScaleSet_otherTerminateNotification(data, true),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMLinuxVirtualMachineScaleSetExists(data.ResourceName),
resource.TestCheckResourceAttr(data.ResourceName, "terminate_notification.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "terminate_notification.0.enabled", "true"),
),
},
data.ImportStep(
"admin_password",
),
},
})
}

func TestAccAzureRMLinuxVirtualMachineScaleSet_otherAutomaticRepairsPolicy(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_virtual_machine_scale_set", "test")

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acceptance.PreCheck(t) },
Providers: acceptance.SupportedProviders,
CheckDestroy: testCheckAzureRMLinuxVirtualMachineScaleSetDestroy,
Steps: []resource.TestStep{
// turn automatic repair on
{
Config: testAccAzureRMLinuxVirtualMachineScaleSet_otherAutomaticRepairsPolicy(data, true),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMLinuxVirtualMachineScaleSetExists(data.ResourceName),
),
},
data.ImportStep(
"admin_password",
),
// turn automatic repair off
{
Config: testAccAzureRMLinuxVirtualMachineScaleSet_otherAutomaticRepairsPolicy(data, false),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMLinuxVirtualMachineScaleSetExists(data.ResourceName),
),
},
data.ImportStep(
"admin_password",
),
// turn automatic repair on again
{
Config: testAccAzureRMLinuxVirtualMachineScaleSet_otherAutomaticRepairsPolicy(data, true),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMLinuxVirtualMachineScaleSetExists(data.ResourceName),
),
},
data.ImportStep(
"admin_password",
),
},
})
}
Expand Down Expand Up @@ -1288,21 +1345,21 @@ func testAccAzureRMLinuxVirtualMachineScaleSet_updateLoadBalancerHealthProbeSKUB
resource "azurerm_public_ip" "test" {
name = "acctestpip-%[2]d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
allocation_method = "Dynamic"
idle_timeout_in_minutes = 4
}
resource "azurerm_lb" "test" {
name = "acctestlb-%[2]d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku = "Basic"
frontend_ip_configuration {
name = "internal"
public_ip_address_id = "${azurerm_public_ip.test.id}"
public_ip_address_id = azurerm_public_ip.test.id
}
}
Expand Down Expand Up @@ -1353,8 +1410,6 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
admin_password = "P@ssword1234!"
health_probe_id = azurerm_lb_probe.test.id
depends_on = ["azurerm_lb_rule.test"]
disable_password_authentication = false
source_image_reference {
Expand Down Expand Up @@ -1388,6 +1443,8 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
load_balancer_inbound_nat_rules_ids = [azurerm_lb_nat_pool.test.id]
}
}
depends_on = [azurerm_lb_rule.test]
}
`, template, data.RandomInteger)
}
Expand All @@ -1399,22 +1456,22 @@ func testAccAzureRMLinuxVirtualMachineScaleSet_updateLoadBalancerHealthProbeSKUS
resource "azurerm_public_ip" "test" {
name = "acctestpip-%[2]d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
allocation_method = "Static"
idle_timeout_in_minutes = 4
sku = "Standard"
}
resource "azurerm_lb" "test" {
name = "acctestlb-%[2]d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku = "Standard"
frontend_ip_configuration {
name = "internal"
public_ip_address_id = "${azurerm_public_ip.test.id}"
public_ip_address_id = azurerm_public_ip.test.id
}
}
Expand Down Expand Up @@ -1465,8 +1522,6 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
admin_password = "P@ssword1234!"
health_probe_id = azurerm_lb_probe.test.id
depends_on = ["azurerm_lb_rule.test"]
disable_password_authentication = false
source_image_reference {
Expand Down Expand Up @@ -1500,6 +1555,8 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
load_balancer_inbound_nat_rules_ids = [azurerm_lb_nat_pool.test.id]
}
}
depends_on = [azurerm_lb_rule.test]
}
`, template, data.RandomInteger)
}
Expand Down Expand Up @@ -1595,3 +1652,118 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
}
`, template, data.RandomInteger, enabled)
}

func testAccAzureRMLinuxVirtualMachineScaleSet_otherAutomaticRepairsPolicy(data acceptance.TestData, enabled bool) string {
template := testAccAzureRMLinuxVirtualMachineScaleSet_template(data)
return fmt.Sprintf(`
%[1]s
resource "azurerm_public_ip" "test" {
name = "acctestpip-%[2]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
allocation_method = "Dynamic"
idle_timeout_in_minutes = 4
}
resource "azurerm_lb" "test" {
name = "acctestlb-%[2]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku = "Basic"
frontend_ip_configuration {
name = "internal"
public_ip_address_id = azurerm_public_ip.test.id
}
}
resource "azurerm_lb_backend_address_pool" "test" {
name = "test"
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
}
resource "azurerm_lb_nat_pool" "test" {
name = "test"
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
frontend_ip_configuration_name = "internal"
protocol = "Tcp"
frontend_port_start = 80
frontend_port_end = 81
backend_port = 8080
}
resource "azurerm_lb_probe" "test" {
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
name = "acctest-lb-probe"
port = 22
protocol = "Tcp"
}
resource "azurerm_lb_rule" "test" {
name = "AccTestLBRule"
resource_group_name = azurerm_resource_group.test.name
loadbalancer_id = azurerm_lb.test.id
probe_id = azurerm_lb_probe.test.id
backend_address_pool_id = azurerm_lb_backend_address_pool.test.id
frontend_ip_configuration_name = "internal"
protocol = "Tcp"
frontend_port = 22
backend_port = 22
}
resource "azurerm_linux_virtual_machine_scale_set" "test" {
name = "acctestvmss-%[2]d"
resource_group_name = azurerm_resource_group.test.name
location = azurerm_resource_group.test.location
sku = "Standard_F2"
instances = 1
admin_username = "adminuser"
admin_password = "P@ssword1234!"
health_probe_id = azurerm_lb_probe.test.id
disable_password_authentication = false
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}
os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}
data_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
disk_size_gb = 10
lun = 10
}
network_interface {
name = "example"
primary = true
ip_configuration {
name = "internal"
primary = true
subnet_id = azurerm_subnet.test.id
load_balancer_backend_address_pool_ids = [azurerm_lb_backend_address_pool.test.id]
load_balancer_inbound_nat_rules_ids = [azurerm_lb_nat_pool.test.id]
}
}
automatic_instance_repair {
enabled = %[3]t
}
depends_on = [azurerm_lb_rule.test]
}
`, template, data.RandomInteger, enabled)
}

0 comments on commit 8dc7eca

Please sign in to comment.