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_role_management_policy New resource & data source #25900

Merged
merged 12 commits into from
Jun 13, 2024
18 changes: 18 additions & 0 deletions internal/services/authorization/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import (
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2020-10-01/roleeligibilityscheduleinstances"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2020-10-01/roleeligibilityschedulerequests"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2020-10-01/roleeligibilityschedules"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2020-10-01/rolemanagementpolicies"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2020-10-01/rolemanagementpolicyassignments"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2022-04-01/roleassignments"
"github.com/hashicorp/go-azure-sdk/resource-manager/authorization/2022-05-01-preview/roledefinitions"
"github.com/hashicorp/terraform-provider-azurerm/internal/common"
Expand All @@ -28,6 +30,8 @@ type Client struct {
RoleEligibilityScheduleRequestClient *roleeligibilityschedulerequests.RoleEligibilityScheduleRequestsClient
RoleEligibilityScheduleInstancesClient *roleeligibilityscheduleinstances.RoleEligibilityScheduleInstancesClient
RoleEligibilitySchedulesClient *roleeligibilityschedules.RoleEligibilitySchedulesClient
RoleManagementPoliciesClient *rolemanagementpolicies.RoleManagementPoliciesClient
RoleManagementPolicyAssignmentsClient *rolemanagementpolicyassignments.RoleManagementPolicyAssignmentsClient
ScopedRoleAssignmentsClient *roleassignments.RoleAssignmentsClient
ScopedRoleDefinitionsClient *roledefinitions.RoleDefinitionsClient
}
Expand Down Expand Up @@ -73,6 +77,18 @@ func NewClient(o *common.ClientOptions) (*Client, error) {
}
o.Configure(roleEligibilitySchedulesClient.Client, o.Authorizers.ResourceManager)

roleManagementPoliciesClient, err := rolemanagementpolicies.NewRoleManagementPoliciesClientWithBaseURI(o.Environment.ResourceManager)
if err != nil {
return nil, fmt.Errorf("creating roleManagementPoliciesClient: %+v", err)
}
o.Configure(roleManagementPoliciesClient.Client, o.Authorizers.ResourceManager)

roleManagementPolicyAssignmentClient, err := rolemanagementpolicyassignments.NewRoleManagementPolicyAssignmentsClientWithBaseURI(o.Environment.ResourceManager)
if err != nil {
return nil, fmt.Errorf("creating roleManagementPolicyAssignmentClient: %+v", err)
}
o.Configure(roleManagementPolicyAssignmentClient.Client, o.Authorizers.ResourceManager)

scopedRoleAssignmentsClient, err := roleassignments.NewRoleAssignmentsClientWithBaseURI(o.Environment.ResourceManager)
if err != nil {
return nil, fmt.Errorf("building Role Assignment Client: %+v", err)
Expand All @@ -93,6 +109,8 @@ func NewClient(o *common.ClientOptions) (*Client, error) {
RoleEligibilityScheduleRequestClient: roleEligibilityScheduleRequestClient,
RoleEligibilityScheduleInstancesClient: roleEligibilityScheduleInstancesClient,
RoleEligibilitySchedulesClient: roleEligibilitySchedulesClient,
RoleManagementPoliciesClient: roleManagementPoliciesClient,
RoleManagementPolicyAssignmentsClient: roleManagementPolicyAssignmentClient,
ScopedRoleAssignmentsClient: scopedRoleAssignmentsClient,
ScopedRoleDefinitionsClient: scopedRoleDefinitionsClient,
}, nil
Expand Down
66 changes: 66 additions & 0 deletions internal/services/authorization/parse/role_management_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package parse

import (
"fmt"
"strings"

"github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids"
)

type RoleManagementPolicyId struct {
RoleDefinitionId string
Scope string
}

var _ resourceids.Id = RoleManagementPolicyId{}

func NewRoleManagementPolicyId(roleDefinitionId string, scope string) RoleManagementPolicyId {
return RoleManagementPolicyId{
RoleDefinitionId: roleDefinitionId,
Scope: scope,
}
}

// RoleManagementPolicyID parses 'input' into a RoleManagementPolicyId
func RoleManagementPolicyID(input string) (*RoleManagementPolicyId, error) {
parts := strings.Split(input, "|")
if len(parts) != 2 {
return nil, fmt.Errorf("could not parse Role Management Policy ID, invalid format %q", input)
}

return &RoleManagementPolicyId{
RoleDefinitionId: parts[0],
Scope: parts[1],
}, nil
}

func (id RoleManagementPolicyId) ID() string {
return fmt.Sprintf("%s|%s", id.RoleDefinitionId, id.Scope)
}

func (id RoleManagementPolicyId) String() string {
components := []string{
fmt.Sprintf("Role Definition ID: %q", id.RoleDefinitionId),
}
if id.Scope != "" {
components = append(components, fmt.Sprintf("Scope: %q", id.Scope))
}
return fmt.Sprintf("Role Definition (%s)", strings.Join(components, "\n"))
}

func ValidateRoleManagementPolicyId(input interface{}, key string) (warnings []string, errors []error) {
v, ok := input.(string)
if !ok {
errors = append(errors, fmt.Errorf("expected %q to be a string", key))
return
}

if _, err := RoleManagementPolicyID(v); err != nil {
errors = append(errors, err)
}

return
}
2 changes: 2 additions & 0 deletions internal/services/authorization/registration.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func (r Registration) SupportedResources() map[string]*pluginsdk.Resource {
func (r Registration) DataSources() []sdk.DataSource {
return []sdk.DataSource{
RoleDefinitionDataSource{},
RoleManagementPolicyDataSource{},
}
}

Expand All @@ -57,6 +58,7 @@ func (r Registration) Resources() []sdk.Resource {
PimEligibleRoleAssignmentResource{},
RoleAssignmentMarketplaceResource{},
RoleDefinitionResource{},
RoleManagementPolicyResource{},
}
return resources
}
Loading
Loading