@@ -73,13 +73,11 @@ func deleteAllBuckets(c *core.CommandConfig) error {
7373
7474 if viper .IsSet (constants .FlagLocation ) {
7575 filterRegion := viper .GetString (constants .FlagLocation )
76- buckets = functional .Filter (buckets , func (b objectstorage.Bucket ) bool {
77- loc , _ , locErr := s3 .BucketsApi .GetBucketLocation (c .Context , b .GetName ()).Execute ()
78- if locErr != nil {
79- return false
80- }
81- return loc .GetLocationConstraint () == filterRegion
82- })
76+ filtered , locErr := filterBucketsByLocation (c .Context , s3 , buckets , filterRegion )
77+ if locErr != nil {
78+ return locErr
79+ }
80+ buckets = filtered
8381 }
8482
8583 return functional .ApplyAndAggregateErrors (buckets , func (b objectstorage.Bucket ) error {
@@ -98,3 +96,19 @@ func deleteAllBuckets(c *core.CommandConfig) error {
9896 return nil
9997 })
10098}
99+
100+ // filterBucketsByLocation filters buckets by region, returning an error if any
101+ // location lookup fails (to avoid silently skipping buckets from deletion).
102+ func filterBucketsByLocation (ctx context.Context , s3 * objectstorage.APIClient , buckets []objectstorage.Bucket , region string ) ([]objectstorage.Bucket , error ) {
103+ var filtered []objectstorage.Bucket
104+ for _ , b := range buckets {
105+ loc , _ , locErr := s3 .BucketsApi .GetBucketLocation (ctx , b .GetName ()).Execute ()
106+ if locErr != nil {
107+ return nil , fmt .Errorf ("cannot filter by location: failed to get location for bucket %q: %w" , b .GetName (), locErr )
108+ }
109+ if loc .GetLocationConstraint () == region {
110+ filtered = append (filtered , b )
111+ }
112+ }
113+ return filtered , nil
114+ }
0 commit comments