@@ -27,6 +27,7 @@ import (
2727 "github.com/vmware/govmomi/object"
2828 "github.com/vmware/govmomi/pbm"
2929 pbmTypes "github.com/vmware/govmomi/pbm/types"
30+ "github.com/vmware/govmomi/property"
3031 "github.com/vmware/govmomi/vim25/mo"
3132 "github.com/vmware/govmomi/vim25/types"
3233 "k8s.io/utils/ptr"
@@ -254,12 +255,28 @@ func Clone(ctx context.Context, vmCtx *capvcontext.VMContext, bootstrapData []by
254255 if err != nil {
255256 return errors .Wrapf (err , "failed to get owning cluster of resourcepool %q to calculate datastore based on storage policy" , pool )
256257 }
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 )
259260 if err != nil {
260261 return errors .Wrapf (err , "unable to list datastores from owning cluster of requested resourcepool" )
261262 }
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+
262274 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+
263280 hubs = append (hubs , pbmTypes.PbmPlacementHub {
264281 HubType : ds .Reference ().Type ,
265282 HubId : ds .Reference ().Value ,
0 commit comments