/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.vmware.file; import static com.emc.sa.service.ServiceParams.DATASTORE_NAME; import static com.emc.sa.service.ServiceParams.EXPORT_NAME; import static com.emc.sa.service.ServiceParams.FILESYSTEMS; import static com.emc.sa.service.ServiceParams.STORAGE_IO_CONTROL; import java.net.URI; import java.util.List; import java.util.Set; import com.emc.sa.engine.ExecutionUtils; import com.emc.sa.engine.bind.Param; import com.emc.sa.engine.service.Service; import com.emc.sa.service.vipr.file.FileStorageUtils; import com.emc.sa.service.vmware.VMwareHostService; import com.emc.sa.service.vmware.file.tasks.AddNfsExportEndpoints; import com.emc.storageos.model.file.FileShareRestRep; import com.emc.storageos.model.file.FileSystemExportParam; import com.google.common.collect.Lists; import com.vmware.vim25.mo.Datastore; @Service("VMware-CreateNfsDatastore") public class CreateNfsDatastoreService extends VMwareHostService { @Param(FILESYSTEMS) protected URI fileSystemId; @Param(EXPORT_NAME) protected String mountPoint; @Param(DATASTORE_NAME) protected String datastoreName; @Param(value = STORAGE_IO_CONTROL, required = false) protected Boolean storageIOControl; private FileShareRestRep fileSystem; private FileSystemExportParam export; @Override public void precheck() throws Exception { super.precheck(); acquireHostLock(); vmware.verifyDatastoreDoesNotExist(datacenter.getLabel(), datastoreName); fileSystem = FileStorageUtils.getFileSystem(fileSystemId); export = FileStorageUtils.findNfsExportByMountPoint(fileSystemId, mountPoint); } @Override public void execute() throws Exception { List<Datastore> datastores = Lists.newArrayList(); updateExportHosts(); if (cluster != null) { datastores.addAll(vmware.createNfsDatastore(cluster, fileSystem, export, datacenterId, datastoreName)); } else { datastores.add(vmware.createNfsDatastore(host, fileSystem, export, datacenterId, datastoreName)); } if (hostId != null) { ExecutionUtils.addAffectedResource(hostId.toString()); } for (Datastore datastore : datastores) { vmware.setStorageIOControl(datastore, storageIOControl, true); } } private void updateExportHosts() { Set<String> ipAddresses = vmware.getEndpoints(host, cluster); if (export.getEndpoints() != null) { ipAddresses.removeAll(export.getEndpoints()); } // Add any missing IPs to the export list if (!ipAddresses.isEmpty()) { execute(new AddNfsExportEndpoints(fileSystemId, export, ipAddresses)); } } }