@@ -27,6 +27,7 @@ import (
2727 "github.com/databricks/terraform-provider-databricks/clusters"
2828 "github.com/databricks/terraform-provider-databricks/common"
2929 "github.com/databricks/terraform-provider-databricks/jobs"
30+ "github.com/databricks/terraform-provider-databricks/mws"
3031 "github.com/databricks/terraform-provider-databricks/permissions"
3132 "github.com/databricks/terraform-provider-databricks/pipelines"
3233 "github.com/databricks/terraform-provider-databricks/repos"
@@ -2985,4 +2986,69 @@ var resourcesMap map[string]importable = map[string]importable{
29852986 {Path : "path" , Resource : "databricks_volume" , Match : "volume_path" , MatchType : MatchLongestPrefix },
29862987 },
29872988 },
2989+ "databricks_mws_permission_assignment" : {
2990+ AccountLevel : true ,
2991+ Service : "access" ,
2992+ List : func (ic * importContext ) error {
2993+ workspaces , err := ic .accountClient .Workspaces .List (ic .Context )
2994+ if err != nil {
2995+ return err
2996+ }
2997+ for _ , ws := range workspaces {
2998+ pas , err := ic .accountClient .WorkspaceAssignment .ListByWorkspaceId (ic .Context , ws .WorkspaceId )
2999+ if err != nil {
3000+ log .Printf ("[ERROR] listing workspace permission assignments for workspace %d: %s" , ws .WorkspaceId , err .Error ())
3001+ continue
3002+ }
3003+ log .Printf ("[DEBUG] Emitting permission assignments for workspace %d" , ws .WorkspaceId )
3004+ for _ , pa := range pas .PermissionAssignments {
3005+ perm := "unknown"
3006+ if len (pa .Permissions ) > 0 {
3007+ perm = pa .Permissions [0 ].String ()
3008+ }
3009+ nm := fmt .Sprintf ("mws_pa_%d_%s_%s_%d" , ws .WorkspaceId , pa .Principal .DisplayName ,
3010+ perm , pa .Principal .PrincipalId )
3011+ // We generate Data directly to avoid calling APIs
3012+ data := mws .ResourceMwsPermissionAssignment ().ToResource ().TestResourceData ()
3013+ scm := ic .Resources ["databricks_mws_permission_assignment" ].Schema
3014+ data .MarkNewResource ()
3015+ paId := fmt .Sprintf ("%d|%d" , ws .WorkspaceId , pa .Principal .PrincipalId )
3016+ data .SetId (paId )
3017+ common .StructToData (pa , scm , data )
3018+ data .Set ("workspace_id" , ws .WorkspaceId )
3019+ data .Set ("principal_id" , pa .Principal .PrincipalId )
3020+ ic .Emit (& resource {
3021+ Resource : "databricks_mws_permission_assignment" ,
3022+ ID : paId ,
3023+ Name : nameNormalizationRegex .ReplaceAllString (nm , "_" ),
3024+ Data : data ,
3025+ })
3026+ // Emit principals
3027+ strPrincipalId := fmt .Sprintf ("%d" , pa .Principal .PrincipalId )
3028+ if pa .Principal .ServicePrincipalName != "" {
3029+ ic .Emit (& resource {
3030+ Resource : "databricks_service_principal" ,
3031+ ID : strPrincipalId ,
3032+ })
3033+ } else if pa .Principal .UserName != "" {
3034+ ic .Emit (& resource {
3035+ Resource : "databricks_user" ,
3036+ ID : strPrincipalId ,
3037+ })
3038+ } else if pa .Principal .GroupName != "" {
3039+ ic .Emit (& resource {
3040+ Resource : "databricks_group" ,
3041+ ID : strPrincipalId ,
3042+ })
3043+ }
3044+ }
3045+ }
3046+ return nil
3047+ },
3048+ Depends : []reference {
3049+ {Resource : "databricks_service_principal" , Path : "principal_id" },
3050+ {Resource : "databricks_user" , Path : "principal_id" },
3051+ {Resource : "databricks_group" , Path : "principal_id" },
3052+ },
3053+ },
29883054}
0 commit comments