/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.computesystemcontroller.hostmountadapters; import java.net.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.computesystemcontroller.exceptions.ComputeSystemControllerException; import com.emc.storageos.db.client.model.FileShare; import com.emc.storageos.db.client.model.Host; import com.emc.storageos.db.client.util.FileOperationUtils; import com.emc.storageos.model.file.ExportRule; import com.iwave.ext.command.CommandException; /** * * @author yelkaa * */ public class LinuxHostMountAdapter extends AbstractMountAdapter { private static final Logger _log = LoggerFactory.getLogger(LinuxHostMountAdapter.class); private LinuxMountUtils mountUtils; public LinuxMountUtils getLinuxMountUtils() { return mountUtils; } public void setLinuxMountUtils(LinuxMountUtils mountUtils) { this.mountUtils = mountUtils; } public LinuxHostMountAdapter() { } @Override public void createDirectory(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // Create directory mountUtils.createDirectory(mountPath); } @Override public void addToFSTab(URI hostId, String mountPath, URI resId, String subDirectory, String security, String fsType) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); FileShare fs = dbClient.queryObject(FileShare.class, resId); ExportRule export = FileOperationUtils.findExport(fs, subDirectory, security, dbClient); String options = "nolock,sec=" + security; // Add to etc/fstab mountUtils.addToFSTab(mountPath, export.getMountPoint(), fsType, options); } @Override public void mountDevice(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // mount device mountUtils.mountPath(mountPath); } @Override public void verifyMountPoint(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // verify if mount point already exists in host mountUtils.verifyMountPoint(mountPath); } @Override public void deleteDirectory(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // Delete directory try { if (mountUtils.isDirectoryEmpty(mountPath)) { mountUtils.deleteDirectory(mountPath); } } catch (CommandException ex) { if (!ex.getMessage().contains("No such file or directory")) { throw ex; } } } @Override public void removeFromFSTab(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // remove mount entry from /etc/fstab mountUtils.removeFromFSTab(mountPath); } @Override public void unmountDevice(URI hostId, String mountPath) { mountUtils = new LinuxMountUtils(dbClient.queryObject(Host.class, hostId)); // unmount device try { mountUtils.unmountPath(mountPath); } catch (ComputeSystemControllerException ex) { if (!ex.getMessage().contains("not mounted") && !ex.getMessage().contains("mountpoint not found")) { throw ex; } } } }