From f1b22dd40331adfe439be7501cb7cf254f4046fb Mon Sep 17 00:00:00 2001 From: ccampo Date: Tue, 16 Jun 2020 22:51:24 +0200 Subject: [PATCH] `azurerm_policy_assignment` - added support for `enforcement_mode` (#7331) --- .../policy/policy_assignment_resource.go | 18 +++- .../tests/policy_assignment_resource_test.go | 88 +++++++++++++++++++ .../docs/r/policy_assignment.html.markdown | 1 + 3 files changed, 106 insertions(+), 1 deletion(-) diff --git a/azurerm/internal/services/policy/policy_assignment_resource.go b/azurerm/internal/services/policy/policy_assignment_resource.go index 843b3b5fa6b8..cecf045e59ed 100644 --- a/azurerm/internal/services/policy/policy_assignment_resource.go +++ b/azurerm/internal/services/policy/policy_assignment_resource.go @@ -113,6 +113,12 @@ func resourceArmPolicyAssignment() *schema.Resource { DiffSuppressFunc: structure.SuppressJsonDiff, }, + "enforcement_mode": { + Type: schema.TypeBool, + Optional: true, + Default: true, + }, + "not_scopes": { Type: schema.TypeList, Optional: true, @@ -129,7 +135,7 @@ func resourceArmPolicyAssignmentCreateUpdate(d *schema.ResourceData, meta interf name := d.Get("name").(string) scope := d.Get("scope").(string) - + enforcementMode := convertEnforcementMode(d.Get("enforcement_mode").(bool)) policyDefinitionId := d.Get("policy_definition_id").(string) displayName := d.Get("display_name").(string) @@ -151,6 +157,7 @@ func resourceArmPolicyAssignmentCreateUpdate(d *schema.ResourceData, meta interf PolicyDefinitionID: utils.String(policyDefinitionId), DisplayName: utils.String(displayName), Scope: utils.String(scope), + EnforcementMode: enforcementMode, }, } @@ -251,6 +258,7 @@ func resourceArmPolicyAssignmentRead(d *schema.ResourceData, meta interface{}) e d.Set("policy_definition_id", props.PolicyDefinitionID) d.Set("description", props.Description) d.Set("display_name", props.DisplayName) + d.Set("enforcement_mode", props.EnforcementMode == policy.Default) if params := props.Parameters; params != nil { json, err := flattenParameterValuesValueToString(params) @@ -339,3 +347,11 @@ func expandAzureRmPolicyNotScopes(d *schema.ResourceData) *[]string { return ¬ScopesRes } + +func convertEnforcementMode(mode bool) policy.EnforcementMode { + if mode { + return policy.Default + } else { + return policy.DoNotEnforce + } +} diff --git a/azurerm/internal/services/policy/tests/policy_assignment_resource_test.go b/azurerm/internal/services/policy/tests/policy_assignment_resource_test.go index d00e4568b366..414713850161 100644 --- a/azurerm/internal/services/policy/tests/policy_assignment_resource_test.go +++ b/azurerm/internal/services/policy/tests/policy_assignment_resource_test.go @@ -138,6 +138,24 @@ func TestAccAzureRMPolicyAssignment_not_scopes(t *testing.T) { }) } +func TestAccAzureRMPolicyAssignment_enforcement_mode(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_policy_assignment", "test") + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMPolicyAssignmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAzureRMPolicyAssignment_enforcement_mode(data), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMPolicyAssignmentExists(data.ResourceName), + ), + }, + data.ImportStep(), + }, + }) +} + func testCheckAzureRMPolicyAssignmentExists(resourceName string) resource.TestCheckFunc { return func(s *terraform.State) error { client := acceptance.AzureProvider.Meta().(*clients.Client).Policy.AssignmentsClient @@ -516,3 +534,73 @@ PARAMETERS } `, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.Locations.Primary) } + +func testAzureRMPolicyAssignment_enforcement_mode(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +data "azurerm_subscription" "current" { +} + +resource "azurerm_policy_definition" "test" { + name = "acctestpol-%d" + policy_type = "Custom" + mode = "All" + display_name = "acctestpol-%d" + + policy_rule = <