Skip to content

Commit 6d001bb

Browse files
authored
feat: add folder clean up (#47)
* feat: add folder clean up * checkin go mod * pin setup provider to minor version * fix pubsub iam dep
1 parent 5d34c36 commit 6d001bb

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

‎modules/project_cleanup/function_source/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/terraform-google-modules/terraform-google-scheduled-function/m
33
go 1.13
44

55
require (
6-
golang.org/x/net v0.0.0-20190318221613-d196dffd7c2b
7-
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421
8-
google.golang.org/api v0.1.0
6+
golang.org/x/net v0.0.0-20200822124328-c89045814202
7+
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43
8+
google.golang.org/api v0.35.0
99
)

‎modules/project_cleanup/function_source/main.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ type PubSubMessage struct {
5555
Data []byte `json:"data"`
5656
}
5757

58-
type FolderRecursion func(string, FolderRecursion)
58+
type FolderRecursion func(*cloudresourcemanager2.Folder, FolderRecursion)
5959

6060
func activeProjectFilter(project *cloudresourcemanager.Project) bool {
6161
return project.LifecycleState == LifecycleStateActiveRequested
@@ -274,21 +274,41 @@ func invoke(ctx context.Context) {
274274
}
275275
}
276276

277-
getSubFoldersAndRemoveProjectsRecursively := func(folderId string, recursion FolderRecursion) {
277+
removeFolder := func(folder *cloudresourcemanager2.Folder) {
278+
folderId := folder.Name
279+
logger.Printf("Try to delete folder with id [%s]", folderId)
280+
_, err := folderService.Delete(folderId).Do()
281+
if err != nil {
282+
logger.Printf("Failed to delete folder [%s], error [%s]", folderId, err.Error())
283+
} else {
284+
logger.Printf("Deleted folder [%s]", folderId)
285+
}
286+
}
287+
288+
getSubFoldersAndRemoveProjectsFoldersRecursively := func(folder *cloudresourcemanager2.Folder, recursion FolderRecursion) {
289+
folderId := folder.Name
278290
listFoldersRequest := folderService.List().Parent(folderId).ShowDeleted(false)
279291
if err := listFoldersRequest.Pages(ctx, func(foldersResponse *cloudresourcemanager2.ListFoldersResponse) error {
280292
for _, folder := range foldersResponse.Folders {
281-
recursion(folder.Name, recursion)
293+
recursion(folder, recursion)
282294
}
283295
removeProjectsInFolder(folderId)
296+
if folder.Parent != fmt.Sprintf("folders/%s", rootFolderId) {
297+
removeFolder(folder)
298+
}
284299
return nil
285300
}); err != nil {
286301
logger.Fatalf("Fail to get subfolders for the folder with id [%s], error [%s]", folderId, err.Error())
287302
}
288303
}
289304

290305
rootFolderId := fmt.Sprintf("folders/%s", rootFolderId)
291-
getSubFoldersAndRemoveProjectsRecursively(rootFolderId, getSubFoldersAndRemoveProjectsRecursively)
306+
rootFolder, err := folderService.Get(rootFolderId).Do()
307+
if err != nil {
308+
logger.Printf("Fail to get parent folder [%s], error [%s]", rootFolderId, err.Error())
309+
} else {
310+
getSubFoldersAndRemoveProjectsFoldersRecursively(rootFolder, getSubFoldersAndRemoveProjectsFoldersRecursively)
311+
}
292312
}
293313

294314
func CleanUpProjects(ctx context.Context, m PubSubMessage) error {

‎test/setup/iam.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
locals {
1818
int_required_roles = [
1919
"roles/storage.admin",
20-
"roles/pubsub.editor",
20+
"roles/pubsub.admin",
21+
"roles/resourcemanager.projectIamAdmin",
2122
"roles/cloudscheduler.admin",
2223
"roles/cloudfunctions.developer",
2324
"roles/iam.serviceAccountUser",

‎test/setup/versions.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ terraform {
1919
}
2020

2121
provider "google" {
22-
version = "~> 3.35.0"
22+
version = "~> 3.35"
2323
}
2424

2525
provider "google-beta" {
26-
version = "~> 3.35.0"
26+
version = "~> 3.35"
2727
}

0 commit comments

Comments
 (0)