func()

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
}