/* * 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_HOSTS; import static com.emc.sa.service.ServiceParams.STORAGE_IO_CONTROL; import java.net.URI; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.emc.sa.engine.ExecutionUtils; import com.emc.sa.engine.bind.Bindable; import com.emc.sa.engine.bind.Param; import com.emc.sa.engine.service.Service; import com.emc.sa.service.vipr.file.CreateNfsExportHelper; import com.emc.sa.service.vipr.file.FileConstants; import com.emc.sa.service.vipr.file.FileStorageUtils; import com.emc.sa.service.vmware.VMwareHostService; 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-CreateNfsExportAndDatastore") public class CreateNfsExportAndDatastoreService extends VMwareHostService { @Bindable protected CreateNfsExportHelper createNfsExportHelper = new CreateNfsExportHelper(); @Param(DATASTORE_NAME) protected String datastoreName; @Param(value = EXPORT_HOSTS, required = false) protected List<String> exportHosts; @Param(value = STORAGE_IO_CONTROL, required = false) protected Boolean storageIOControl; protected List<String> calculateExportHosts() { Set<String> ipAddresses = vmware.getEndpoints(host, cluster); if (exportHosts != null) { for (String host : exportHosts) { if (StringUtils.isNotBlank(host)) { ipAddresses.add(host); } } } return Lists.newArrayList(ipAddresses); } @Override public void precheck() throws Exception { super.precheck(); createNfsExportHelper.setPermissions(FileConstants.ROOT_PERMISSIONS); createNfsExportHelper.setExportHosts(calculateExportHosts()); acquireHostLock(); vmware.verifyDatastoreDoesNotExist(datacenter.getLabel(), datastoreName); vmware.disconnect(); } @Override public void execute() throws Exception { URI fileSystemId = createNfsExportHelper.createNfsExport(); List<Datastore> datastores = Lists.newArrayList(); FileShareRestRep fileSystem = FileStorageUtils.getFileSystem(fileSystemId); FileSystemExportParam export = createNfsExportHelper.getNfsExport(fileSystemId); connectAndInitializeHost(); 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); } } }