diff --git a/azuredevops/internal/acceptancetests/resource_build_folder_permissions_test.go b/azuredevops/internal/acceptancetests/resource_build_folder_permissions_test.go index f37640ba8..1a5918f2b 100644 --- a/azuredevops/internal/acceptancetests/resource_build_folder_permissions_test.go +++ b/azuredevops/internal/acceptancetests/resource_build_folder_permissions_test.go @@ -15,7 +15,16 @@ import ( func hclBuildFolderPermissions(projectName string, path string, permissions map[string]string) string { rootPermissions := datahelper.JoinMap(permissions, "=", "\n") - description := "Integration Test Folder" + var requiredResources string + var pathArgument string + if path != `\\` { + pathArgument = `azuredevops_build_folder.test_folder.path` + description := "Integration Test Folder" + requiredResources = testutils.HclBuildFolder(projectName, path, description) + } else { + pathArgument = `"\\"` + requiredResources = testutils.HclProjectResource(projectName) + } return fmt.Sprintf(` %s @@ -28,21 +37,22 @@ data "azuredevops_group" "tf-project-readers" { resource "azuredevops_build_folder_permissions" "permissions" { project_id = azuredevops_project.project.id principal = data.azuredevops_group.tf-project-readers.id - path = azuredevops_build_folder.test_folder.path + path = %s permissions = { %s } } `, - testutils.HclBuildFolder(projectName, path, description), + requiredResources, + pathArgument, rootPermissions, ) } func TestAccBuildFolderPermissions_SetPermissions(t *testing.T) { projectName := testutils.GenerateResourceName() - config := hclBuildFolderPermissions(projectName, `\test-folder`, map[string]string{ + permissions := map[string]string{ "ViewBuilds": "Allow", "EditBuildQuality": "Allow", "RetainIndefinitely": "Allow", @@ -57,27 +67,35 @@ func TestAccBuildFolderPermissions_SetPermissions(t *testing.T) { "EditBuildDefinition": "Allow", "DeleteBuildDefinition": "Deny", "AdministerBuildPermissions": "NotSet", - }) + } + configFolder := hclBuildFolderPermissions(projectName, `\test-folder`, permissions) + configRootFolder := hclBuildFolderPermissions(projectName, `\\`, permissions) tfNodeRoot := "azuredevops_build_folder_permissions.permissions" + testFunc := resource.ComposeTestCheckFunc( + testutils.CheckProjectExists(projectName), + resource.TestCheckResourceAttrSet(tfNodeRoot, "project_id"), + resource.TestCheckResourceAttrSet(tfNodeRoot, "principal"), + resource.TestCheckResourceAttrSet(tfNodeRoot, "path"), + resource.TestCheckResourceAttr(tfNodeRoot, "permissions.%", "14"), + resource.TestCheckResourceAttr(tfNodeRoot, "permissions.ViewBuilds", "allow"), + resource.TestCheckResourceAttr(tfNodeRoot, "permissions.DeleteBuilds", "deny"), + resource.TestCheckResourceAttr(tfNodeRoot, "permissions.DeleteBuildDefinition", "deny"), + resource.TestCheckResourceAttr(tfNodeRoot, "permissions.AdministerBuildPermissions", "notset"), + ) + resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testutils.PreCheck(t, nil) }, Providers: testutils.GetProviders(), CheckDestroy: testutils.CheckProjectDestroyed, Steps: []resource.TestStep{ { - Config: config, - Check: resource.ComposeTestCheckFunc( - testutils.CheckProjectExists(projectName), - resource.TestCheckResourceAttrSet(tfNodeRoot, "project_id"), - resource.TestCheckResourceAttrSet(tfNodeRoot, "principal"), - resource.TestCheckResourceAttrSet(tfNodeRoot, "path"), - resource.TestCheckResourceAttr(tfNodeRoot, "permissions.%", "14"), - resource.TestCheckResourceAttr(tfNodeRoot, "permissions.ViewBuilds", "allow"), - resource.TestCheckResourceAttr(tfNodeRoot, "permissions.DeleteBuilds", "deny"), - resource.TestCheckResourceAttr(tfNodeRoot, "permissions.DeleteBuildDefinition", "deny"), - resource.TestCheckResourceAttr(tfNodeRoot, "permissions.AdministerBuildPermissions", "notset"), - ), + Config: configFolder, + Check: testFunc, + }, + { + Config: configRootFolder, + Check: testFunc, }, }, }) diff --git a/azuredevops/internal/service/permissions/resource_build_folder_permissions.go b/azuredevops/internal/service/permissions/resource_build_folder_permissions.go index e373b8607..7ecfab62e 100644 --- a/azuredevops/internal/service/permissions/resource_build_folder_permissions.go +++ b/azuredevops/internal/service/permissions/resource_build_folder_permissions.go @@ -121,7 +121,7 @@ func createBuildFolderToken(d *schema.ResourceData, clients *client.AggregatedCl aclToken = fmt.Sprintf("%s/%s", projectID.(string), transformedPath) } else { - aclToken = fmt.Sprintf("%s/%s", projectID.(string), *Folder.Path) + aclToken = fmt.Sprintf("%s", projectID.(string)) } return aclToken, nil diff --git a/azuredevops/internal/service/permissions/resource_build_folder_permissions_test.go b/azuredevops/internal/service/permissions/resource_build_folder_permissions_test.go index 2665837fb..4b951c435 100644 --- a/azuredevops/internal/service/permissions/resource_build_folder_permissions_test.go +++ b/azuredevops/internal/service/permissions/resource_build_folder_permissions_test.go @@ -62,7 +62,7 @@ func TestBuildFolderPermissions_CreateBuildFolderToken(t *testing.T) { token, err = createBuildFolderToken(d, clients) assert.NotEmpty(t, token) assert.Nil(t, err) - assert.Equal(t, "9083e944-8e9e-405e-960a-c80180aa71e6/\\", token) + assert.Equal(t, "9083e944-8e9e-405e-960a-c80180aa71e6", token) d = getBuildFolderPermissionsResource(t, "", "") token, err = createBuildFolderToken(d, clients) diff --git a/website/docs/r/build_folder_permissions.html.markdown b/website/docs/r/build_folder_permissions.html.markdown index a47d68fce..d90831c60 100644 --- a/website/docs/r/build_folder_permissions.html.markdown +++ b/website/docs/r/build_folder_permissions.html.markdown @@ -12,6 +12,7 @@ Manages permissions for a Build Folder ~> **Note** Permissions can be assigned to group principals and not to single user principals. ## Example Usage +### Set specific folder permissions ```hcl resource "azuredevops_project" "example" { @@ -56,6 +57,31 @@ resource "azuredevops_build_folder_permissions" "example" { } } ``` +### Set root folder permissions +```hcl +resource "azuredevops_project" "example" { + name = "Example Project" + work_item_template = "Agile" + version_control = "Git" + visibility = "private" + description = "Managed by Terraform" +} + +data "azuredevops_group" "example-readers" { + project_id = azuredevops_project.example.id + name = "Readers" +} + +resource "azuredevops_build_folder_permissions" "example" { + project_id = azuredevops_project.example.id + path = "\\" + principal = data.azuredevops_group.example-readers.id + + permissions = { + "RetainIndefinitely": "Allow" + } +} +``` ## Argument Reference