@@ -27,6 +27,7 @@ import (
27
27
"github.com/vmware/govmomi/object"
28
28
"github.com/vmware/govmomi/pbm"
29
29
pbmTypes "github.com/vmware/govmomi/pbm/types"
30
+ "github.com/vmware/govmomi/property"
30
31
"github.com/vmware/govmomi/vim25/mo"
31
32
"github.com/vmware/govmomi/vim25/types"
32
33
"k8s.io/utils/ptr"
@@ -254,12 +255,28 @@ func Clone(ctx context.Context, vmCtx *capvcontext.VMContext, bootstrapData []by
254
255
if err != nil {
255
256
return errors .Wrapf (err , "failed to get owning cluster of resourcepool %q to calculate datastore based on storage policy" , pool )
256
257
}
257
- dsGetter := object . NewComputeResource ( vmCtx . Session . Client . Client , cluster . Reference ())
258
- datastores , err := dsGetter .Datastores (ctx )
258
+
259
+ dsList , err := object . NewComputeResource ( vmCtx . Session . Client . Client , cluster . Reference ()) .Datastores (ctx )
259
260
if err != nil {
260
261
return errors .Wrapf (err , "unable to list datastores from owning cluster of requested resourcepool" )
261
262
}
263
+
264
+ var refs []types.ManagedObjectReference
265
+ for i := range dsList {
266
+ refs = append (refs , dsList [i ].Reference ())
267
+ }
268
+
269
+ var datastores []mo.Datastore
270
+ if err := property .DefaultCollector (vmCtx .Session .Client .Client ).Retrieve (ctx , refs , []string {"summary" }, & datastores ); err != nil {
271
+ return errors .Wrapf (err , "unable to collect datastore properties to validate maintenance mode" )
272
+ }
273
+
262
274
for _ , ds := range datastores {
275
+ if ds .Summary .MaintenanceMode != string (types .DatastoreSummaryMaintenanceModeStateNormal ) {
276
+ log .V (4 ).Info ("datastore is in maintenance mode, skipping" , "datastore" , ds .Summary .Name )
277
+ continue
278
+ }
279
+
263
280
hubs = append (hubs , pbmTypes.PbmPlacementHub {
264
281
HubType : ds .Reference ().Type ,
265
282
HubId : ds .Reference ().Value ,
0 commit comments