pkg/cloud/roledefinitions.go (28 lines of code) (raw):
package cloud
import (
"context"
"fmt"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization"
"github.com/pkg/errors"
"monis.app/mlog"
)
// GetRoleDefinitionIDByName returns the role definition ID for the given role name.
func (c *AzureClient) GetRoleDefinitionIDByName(ctx context.Context, scope, roleName string) (armauthorization.RoleDefinition, error) {
mlog.Debug("Get role definition ID", "name", roleName)
filter := getRoleNameFilter(roleName)
pager := c.roleDefinitionsClient.NewListPager(scope, &armauthorization.RoleDefinitionsClientListOptions{
Filter: &filter,
})
for pager.More() {
nextResult, err := pager.NextPage(ctx)
if err != nil {
return armauthorization.RoleDefinition{}, errors.Wrap(err, "failed to list role definitions")
}
if len(nextResult.Value) > 0 {
return *nextResult.Value[0], nil
}
}
return armauthorization.RoleDefinition{}, errors.Errorf("role definition %s not found", roleName)
}
// getRoleNameFilter returns a filter string for the given role name.
// Supported filters are either roleName eq '{value}' or type eq 'BuiltInRole|CustomRole'."
func getRoleNameFilter(roleName string) string {
return fmt.Sprintf("roleName eq '%s'", roleName)
}