Skip to content

Commit

Permalink
azurerm_role_assignment - supports "description", "condition", "con…
Browse files Browse the repository at this point in the history
…dition_version" (#10804)

upgrade version for authorization from 2018-09-01-preview to 2020-04-01-preview

support property: "description", "condition", "condition_version"

docs about condition: review.docs.microsoft.com/en-us/azure/role-based-access-control/conditions-overview?branch=pr-en-us-119593
  • Loading branch information
njuCZ authored Mar 12, 2021
1 parent ddc6507 commit 74e5a57
Show file tree
Hide file tree
Showing 20 changed files with 165 additions and 27 deletions.
2 changes: 1 addition & 1 deletion azurerm/internal/services/authorization/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package client

import (
"github.com/Azure/azure-sdk-for-go/services/graphrbac/1.6/graphrbac"
"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2018-09-01-preview/authorization"
"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2020-04-01-preview/authorization"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/common"
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ import (
"strings"
"time"

billingValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/billing/validate"

"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2018-09-01-preview/authorization"
"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2020-04-01-preview/authorization"
"github.com/hashicorp/go-uuid"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
billingValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/billing/validate"
managementGroupValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/managementgroup/validate"
resourceValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/resource/validate"
subscriptionValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/subscription/validate"
Expand Down Expand Up @@ -98,6 +97,32 @@ func resourceArmRoleAssignment() *schema.Resource {
Optional: true,
Computed: true,
},

"description": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
ValidateFunc: validation.StringIsNotEmpty,
},

"condition": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
RequiredWith: []string{"condition_version"},
ValidateFunc: validation.StringIsNotEmpty,
},

"condition_version": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
RequiredWith: []string{"condition"},
ValidateFunc: validation.StringInSlice([]string{
"1.0",
"2.0",
}, false),
},
},
}
}
Expand Down Expand Up @@ -155,9 +180,20 @@ func resourceArmRoleAssignmentCreate(d *schema.ResourceData, meta interface{}) e
RoleAssignmentProperties: &authorization.RoleAssignmentProperties{
RoleDefinitionID: utils.String(roleDefinitionId),
PrincipalID: utils.String(principalId),
Description: utils.String(d.Get("description").(string)),
},
}

condition := d.Get("condition").(string)
conditionVersion := d.Get("condition_version").(string)

if condition != "" && conditionVersion != "" {
properties.RoleAssignmentProperties.Condition = utils.String(condition)
properties.RoleAssignmentProperties.ConditionVersion = utils.String(conditionVersion)
} else if condition != "" || conditionVersion != "" {
return fmt.Errorf("`condition` and `conditionVersion` should be both set or unset")
}

skipPrincipalCheck := d.Get("skip_service_principal_aad_check").(bool)
if skipPrincipalCheck {
properties.RoleAssignmentProperties.PrincipalType = authorization.ServicePrincipal
Expand Down Expand Up @@ -203,6 +239,9 @@ func resourceArmRoleAssignmentRead(d *schema.ResourceData, meta interface{}) err
d.Set("role_definition_id", props.RoleDefinitionID)
d.Set("principal_id", props.PrincipalID)
d.Set("principal_type", props.PrincipalType)
d.Set("description", props.Description)
d.Set("condition", props.Condition)
d.Set("condition_version", props.ConditionVersion)

// allows for import when role name is used (also if the role name changes a plan will show a diff)
if roleId := props.RoleDefinitionID; roleId != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,23 @@ func TestAccRoleAssignment_managementGroup(t *testing.T) {
})
}

func TestAccRoleAssignment_condition(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_role_assignment", "test")
id := uuid.New().String()

r := RoleAssignmentResource{}

data.ResourceTest(t, r, []resource.TestStep{
{
Config: r.condition(id),
Check: resource.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("skip_service_principal_aad_check"),
})
}

func (r RoleAssignmentResource) Exists(ctx context.Context, client *clients.Client, state *terraform.InstanceState) (*bool, error) {
id, err := parse.RoleAssignmentID(state.ID)
if err != nil {
Expand Down Expand Up @@ -456,3 +473,27 @@ resource "azurerm_role_assignment" "test" {
}
`, groupId)
}

func (RoleAssignmentResource) condition(groupId string) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
data "azurerm_subscription" "primary" {
}
data "azurerm_client_config" "test" {
}
resource "azurerm_role_assignment" "test" {
name = "%s"
scope = data.azurerm_subscription.primary.id
role_definition_name = "Monitoring Reader"
principal_id = data.azurerm_client_config.test.object_id
description = "Monitoring Reader except "
condition = "@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:ContainerName] StringEqualsIgnoreCase 'foo_storage_container'"
condition_version = "1.0"
}
`, groupId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"time"

"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2018-09-01-preview/authorization"
"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2020-04-01-preview/authorization"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"log"
"time"

"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2018-09-01-preview/authorization"
"github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2020-04-01-preview/authorization"
"github.com/hashicorp/go-uuid"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -192,7 +192,7 @@ func resourceArmRoleDefinitionCreateUpdate(d *schema.ResourceData, meta interfac
},
Refresh: roleDefinitionUpdateStateRefreshFunc(ctx, client, id.ResourceID),
MinTimeout: 10 * time.Second,
ContinuousTargetOccurence: 6,
ContinuousTargetOccurence: 10,
Timeout: d.Timeout(schema.TimeoutUpdate),
}

Expand Down

This file was deleted.

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.

2 changes: 1 addition & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ github.com/Azure/azure-sdk-for-go/services/operationalinsights/mgmt/2020-08-01/o
github.com/Azure/azure-sdk-for-go/services/postgresql/mgmt/2020-01-01/postgresql
github.com/Azure/azure-sdk-for-go/services/powerbidedicated/mgmt/2017-10-01/powerbidedicated
github.com/Azure/azure-sdk-for-go/services/preview/alertsmanagement/mgmt/2019-06-01-preview/alertsmanagement
github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2018-09-01-preview/authorization
github.com/Azure/azure-sdk-for-go/services/preview/authorization/mgmt/2020-04-01-preview/authorization
github.com/Azure/azure-sdk-for-go/services/preview/automation/mgmt/2018-06-30-preview/automation
github.com/Azure/azure-sdk-for-go/services/preview/blueprint/mgmt/2018-11-01-preview/blueprint
github.com/Azure/azure-sdk-for-go/services/preview/botservice/mgmt/2018-07-12/botservice
Expand Down
Loading

0 comments on commit 74e5a57

Please sign in to comment.