vsphere/nas_datastore_helper.go
func (p *nasDatastoreMountProcessor) processMountOperations() (*object.Datastore, error) {
	hosts := p.diffNewOld()
	if len(hosts) < 1 {
		// Nothing to do
		return p.ds, nil
	}
	// Validate we are vCenter if we are working with multiple hosts
	if len(hosts) > 1 {
		if err := viapi.ValidateVirtualCenter(p.client); err != nil {
			return p.ds, fmt.Errorf("cannot mount on multiple hosts: %s", err)
		}
	}
	for _, hsID := range hosts {
		dss, err := hostDatastoreSystemFromHostSystemID(p.client, hsID)
		if err != nil {
			return p.ds, fmt.Errorf("host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
		ctx, cancel := context.WithTimeout(context.Background(), defaultAPITimeout)
		defer cancel()
		ds, err := dss.CreateNasDatastore(ctx, *p.volSpec)
		if err != nil {
			return p.ds, fmt.Errorf("host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
		if err := p.validateDatastore(ds); err != nil {
			return p.ds, fmt.Errorf("datastore validation error on host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
	}
	return p.ds, nil
}
func (p *nasDatastoreMountProcessor) processMountOperations() (*object.Datastore, error) {
	hosts := p.diffNewOld()
	if len(hosts) < 1 {
		// Nothing to do
		return p.ds, nil
	}
	// Validate we are vCenter if we are working with multiple hosts
	if len(hosts) > 1 {
		if err := viapi.ValidateVirtualCenter(p.client); err != nil {
			return p.ds, fmt.Errorf("cannot mount on multiple hosts: %s", err)
		}
	}
	for _, hsID := range hosts {
		dss, err := hostDatastoreSystemFromHostSystemID(p.client, hsID)
		if err != nil {
			return p.ds, fmt.Errorf("host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
		ctx, cancel := context.WithTimeout(context.Background(), defaultAPITimeout)
		defer cancel()
		ds, err := dss.CreateNasDatastore(ctx, *p.volSpec)
		if err != nil {
			return p.ds, fmt.Errorf("host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
		if err := p.validateDatastore(ds); err != nil {
			return p.ds, fmt.Errorf("datastore validation error on host %q: %s", hostsystem.NameOrID(p.client, hsID), err)
		}
	}
	return p.ds, nil
}
// processMountOperations processes all pending mount operations by diffing old
// and new and adding any hosts that were not found in old. The datastore is
// returned, along with any error.