in pkg/common/vclib/datacenter.go [465:527]
func (dc *Datacenter) CreateFirstClassDisk(ctx context.Context,
datastoreName string, datastoreType ParentDatastoreType,
diskName string, diskSize int64) error {
m := vslm.NewObjectManager(dc.Client())
var pool *object.ResourcePool
var ds types.ManagedObjectReference
if datastoreType == TypeDatastoreCluster {
storagePod, err := dc.GetDatastoreClusterByName(ctx, datastoreName)
if err != nil {
klog.Errorf("GetDatastoreClusterByName failed. Err: %v", err)
return err
}
ds = storagePod.Reference()
pool, err = dc.GetResourcePool(ctx, "")
if err != nil {
klog.Errorf("GetResourcePool failed. Err: %v", err)
return err
}
} else {
datastore, err := dc.GetDatastoreByName(ctx, datastoreName)
if err != nil {
klog.Errorf("GetDatastoreByName failed. Err: %v", err)
return err
}
ds = datastore.Reference()
}
spec := types.VslmCreateSpec{
Name: diskName,
CapacityInMB: diskSize,
BackingSpec: &types.VslmCreateSpecDiskFileBackingSpec{
VslmCreateSpecBackingSpec: types.VslmCreateSpecBackingSpec{
Datastore: ds,
},
ProvisioningType: string(types.BaseConfigInfoDiskFileBackingInfoProvisioningTypeThin),
},
}
if datastoreType == TypeDatastoreCluster {
err := m.PlaceDisk(ctx, &spec, pool.Reference())
if err != nil {
klog.Errorf("PlaceDisk(%s) failed. Err: %v", diskName, err)
return err
}
}
task, err := m.CreateDisk(ctx, spec)
if err != nil {
klog.Errorf("CreateDisk(%s) failed. Err: %v", diskName, err)
return err
}
err = task.Wait(ctx)
if err != nil {
klog.Errorf("Wait(%s) failed. Err: %v", diskName, err)
return err
}
return nil
}