@@ -117,7 +117,7 @@ type GCECompute interface {
117117 // Regional Disk Methods
118118 GetReplicaZoneURI (project string , zone string ) string
119119 // Instance Methods
120- GetInstanceOrError (ctx context.Context , instanceZone , instanceName string ) (* computev1.Instance , error )
120+ GetInstanceOrError (ctx context.Context , project , instanceZone , instanceName string ) (* computev1.Instance , error )
121121 // Zone Methods
122122 ListZones (ctx context.Context , region string ) ([]string , error )
123123 ListSnapshots (ctx context.Context , filter string ) ([]* computev1.Snapshot , string , error )
@@ -160,40 +160,67 @@ func (cloud *CloudProvider) listDisksInternal(ctx context.Context, fields []goog
160160 if err != nil {
161161 return nil , "" , err
162162 }
163- items := []* computev1.Disk {}
163+ disks := []* computev1.Disk {}
164164
165- // listing out regional disks in the region
166- rlCall := cloud .service .RegionDisks .List (cloud .project , region )
165+ // listing out regional disks in the region for each project
166+ for p , s := range cloud .tenantServiceMap {
167+ klog .Infof ("Getting regional disks for project: %s" , p )
168+ rDisks , err := listRegionalDisksForProject (s , p , region , fields , filter )
169+ if err != nil {
170+ return nil , "" , err
171+ }
172+ disks = append (disks , rDisks ... )
173+ }
174+
175+ // listing out zonal disks in all zones of the region for each project
176+ for p , s := range cloud .tenantServiceMap {
177+ klog .Infof ("Getting zonal disks for project: %s" , p )
178+ zDisks , err := listZonalDisksForProject (s , p , zones , fields , filter )
179+ if err != nil {
180+ return nil , "" , err
181+ }
182+ disks = append (disks , zDisks ... )
183+ }
184+
185+ return disks , "" , nil
186+ }
187+
188+ func listRegionalDisksForProject (service * computev1.Service , project string , region string , fields []googleapi.Field , filter string ) ([]* computev1.Disk , error ) {
189+ items := []* computev1.Disk {}
190+ rlCall := service .RegionDisks .List (project , region )
167191 rlCall .Fields (fields ... )
168192 rlCall .Filter (filter )
169193 nextPageToken := "pageToken"
170194 for nextPageToken != "" {
171195 rDiskList , err := rlCall .Do ()
172196 if err != nil {
173- return nil , "" , err
197+ return nil , err
174198 }
175199 items = append (items , rDiskList .Items ... )
176200 nextPageToken = rDiskList .NextPageToken
177201 rlCall .PageToken (nextPageToken )
178202 }
203+ return items , nil
204+ }
179205
180- // listing out zonal disks in all zones of the region
206+ func listZonalDisksForProject (service * computev1.Service , project string , zones []string , fields []googleapi.Field , filter string ) ([]* computev1.Disk , error ) {
207+ items := []* computev1.Disk {}
181208 for _ , zone := range zones {
182- lCall := cloud . service .Disks .List (cloud . project , zone )
209+ lCall := service .Disks .List (project , zone )
183210 lCall .Fields (fields ... )
184211 lCall .Filter (filter )
185212 nextPageToken := "pageToken"
186213 for nextPageToken != "" {
187214 diskList , err := lCall .Do ()
188215 if err != nil {
189- return nil , "" , err
216+ return nil , err
190217 }
191218 items = append (items , diskList .Items ... )
192219 nextPageToken = diskList .NextPageToken
193220 lCall .PageToken (nextPageToken )
194221 }
195222 }
196- return items , "" , nil
223+ return items , nil
197224}
198225
199226// ListInstances lists instances based on maxEntries and pageToken for the project and region
@@ -210,8 +237,22 @@ func (cloud *CloudProvider) ListInstances(ctx context.Context, fields []googleap
210237 }
211238 items := []* computev1.Instance {}
212239
240+ for p , s := range cloud .tenantServiceMap {
241+ instances , err := cloud .listInstancesForProject (s , p , zones , fields )
242+ if err != nil {
243+ return nil , "" , err
244+ }
245+ items = append (items , instances ... )
246+ }
247+
248+ return items , "" , nil
249+ }
250+
251+ func (cloud * CloudProvider ) listInstancesForProject (service * computev1.Service , project string , zones []string , fields []googleapi.Field ) ([]* computev1.Instance , error ) {
252+ items := []* computev1.Instance {}
253+
213254 for _ , zone := range zones {
214- lCall := cloud . service .Instances .List (cloud . project , zone )
255+ lCall := service .Instances .List (project , zone )
215256 for _ , filter := range cloud .listInstancesConfig .Filters {
216257 lCall = lCall .Filter (filter )
217258 }
@@ -220,15 +261,14 @@ func (cloud *CloudProvider) ListInstances(ctx context.Context, fields []googleap
220261 for nextPageToken != "" {
221262 instancesList , err := lCall .Do ()
222263 if err != nil {
223- return nil , "" , err
264+ return nil , err
224265 }
225266 items = append (items , instancesList .Items ... )
226267 nextPageToken = instancesList .NextPageToken
227268 lCall .PageToken (nextPageToken )
228269 }
229270 }
230-
231- return items , "" , nil
271+ return items , nil
232272}
233273
234274// RepairUnderspecifiedVolumeKey will query the cloud provider and check each zone for the disk specified
@@ -857,7 +897,11 @@ func (cloud *CloudProvider) AttachDisk(ctx context.Context, project string, volK
857897 ForceAttach : forceAttach ,
858898 }
859899
860- op , err := cloud .service .Instances .AttachDisk (project , instanceZone , instanceName , attachedDiskV1 ).Context (ctx ).ForceAttach (forceAttach ).Do ()
900+ service := cloud .service
901+ if _ , ok := cloud .tenantServiceMap [project ]; ok {
902+ service = cloud .tenantServiceMap [project ]
903+ }
904+ op , err := service .Instances .AttachDisk (project , instanceZone , instanceName , attachedDiskV1 ).Context (ctx ).ForceAttach (forceAttach ).Do ()
861905 if err != nil {
862906 return fmt .Errorf ("failed cloud service attach disk call: %w" , err )
863907 }
@@ -872,7 +916,11 @@ func (cloud *CloudProvider) AttachDisk(ctx context.Context, project string, volK
872916
873917func (cloud * CloudProvider ) DetachDisk (ctx context.Context , project , deviceName , instanceZone , instanceName string ) error {
874918 klog .V (5 ).Infof ("Detaching disk %v from %v" , deviceName , instanceName )
875- op , err := cloud .service .Instances .DetachDisk (project , instanceZone , instanceName , deviceName ).Context (ctx ).Do ()
919+ service := cloud .service
920+ if _ , ok := cloud .tenantServiceMap [project ]; ok {
921+ service = cloud .tenantServiceMap [project ]
922+ }
923+ op , err := service .Instances .DetachDisk (project , instanceZone , instanceName , deviceName ).Context (ctx ).Do ()
876924 if err != nil {
877925 return err
878926 }
@@ -1041,7 +1089,7 @@ func (cloud *CloudProvider) waitForAttachOnInstance(ctx context.Context, project
10411089 start := time .Now ()
10421090 return wait .ExponentialBackoff (AttachDiskBackoff , func () (bool , error ) {
10431091 klog .V (6 ).Infof ("Polling instances.get for attach of disk %v to instance %v to complete for %v" , volKey .Name , instanceName , time .Since (start ))
1044- instance , err := cloud .GetInstanceOrError (ctx , instanceZone , instanceName )
1092+ instance , err := cloud .GetInstanceOrError (ctx , project , instanceZone , instanceName )
10451093 if err != nil {
10461094 return false , fmt .Errorf ("GetInstance failed to get instance: %w" , err )
10471095 }
@@ -1145,10 +1193,13 @@ func opIsDone(op *computev1.Operation) (bool, error) {
11451193 return true , nil
11461194}
11471195
1148- func (cloud * CloudProvider ) GetInstanceOrError (ctx context.Context , instanceZone , instanceName string ) (* computev1.Instance , error ) {
1196+ func (cloud * CloudProvider ) GetInstanceOrError (ctx context.Context , project , instanceZone , instanceName string ) (* computev1.Instance , error ) {
11491197 klog .V (5 ).Infof ("Getting instance %v from zone %v" , instanceName , instanceZone )
1150- project := cloud .project
1151- instance , err := cloud .service .Instances .Get (project , instanceZone , instanceName ).Do ()
1198+ service := cloud .service
1199+ if _ , ok := cloud .tenantServiceMap [project ]; ok {
1200+ service = cloud .tenantServiceMap [project ]
1201+ }
1202+ instance , err := service .Instances .Get (project , instanceZone , instanceName ).Do ()
11521203 if err != nil {
11531204 return nil , err
11541205 }
0 commit comments