diff --git a/cmd/backup/config.go b/cmd/backup/config.go index 766848ba..692214da 100644 --- a/cmd/backup/config.go +++ b/cmd/backup/config.go @@ -98,6 +98,7 @@ type Config struct { GoogleDriveImpersonateSubject string `split_words:"true"` GoogleDriveEndpoint string `split_words:"true"` GoogleDriveTokenURL string `split_words:"true"` + GoogleDriveTeamDriveID string `split_words:"true"` Timezone string `envconfig:"TZ"` source string additionalEnvVars map[string]string diff --git a/cmd/backup/script.go b/cmd/backup/script.go index 797ae905..4c4e2d5f 100644 --- a/cmd/backup/script.go +++ b/cmd/backup/script.go @@ -259,6 +259,7 @@ func (s *script) init() error { ImpersonateSubject: s.c.GoogleDriveImpersonateSubject, Endpoint: s.c.GoogleDriveEndpoint, TokenURL: s.c.GoogleDriveTokenURL, + TeamDriveID: s.c.GoogleDriveTeamDriveID, } googleDriveBackend, err := googledrive.NewStorageBackend(googleDriveConfig, logFunc) if err != nil { diff --git a/internal/storage/googledrive/googledrive.go b/internal/storage/googledrive/googledrive.go index aff38362..31f823bc 100644 --- a/internal/storage/googledrive/googledrive.go +++ b/internal/storage/googledrive/googledrive.go @@ -24,7 +24,8 @@ import ( type googleDriveStorage struct { storage.StorageBackend - client *drive.Service + client *drive.Service + teamDriveID string } // Config allows to configure a Google Drive storage backend. @@ -34,6 +35,7 @@ type Config struct { ImpersonateSubject string Endpoint string TokenURL string + TeamDriveID string } // NewStorageBackend creates and initializes a new Google Drive storage backend. @@ -77,7 +79,8 @@ func NewStorageBackend(opts Config, logFunc storage.Log) (storage.Backend, error DestinationPath: opts.FolderID, Log: logFunc, }, - client: srv, + client: srv, + teamDriveID: opts.TeamDriveID, }, nil } @@ -134,6 +137,9 @@ func (b *googleDriveStorage) Prune(deadline time.Time, pruningPrefix string) (*s pageToken := "" for { req := b.client.Files.List().Q(query).SupportsAllDrives(true).Fields("files(id, name, createdTime, parents)").PageToken(pageToken) + if b.teamDriveID != "" { + req = req.DriveId(b.teamDriveID).IncludeItemsFromAllDrives(true) + } res, err := req.Do() if err != nil { return nil, errwrap.Wrap(err, "listing files")