/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio.shell.command; import alluxio.AlluxioURI; import alluxio.client.file.FileSystem; import alluxio.client.file.options.MountOptions; import alluxio.exception.AlluxioException; import com.google.common.collect.Maps; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import java.io.IOException; import java.util.Properties; import javax.annotation.concurrent.ThreadSafe; /** * Mounts a UFS path onto an Alluxio path. */ @ThreadSafe public final class MountCommand extends AbstractShellCommand { private static final Option READONLY_OPTION = Option.builder() .longOpt("readonly") .required(false) .hasArg(false) .desc("mount point is readonly in Alluxio") .build(); private static final Option SHARED_OPTION = Option.builder() .longOpt("shared") .required(false) .hasArg(false) .desc("mount point is shared") .build(); private static final Option OPTION_OPTION = Option.builder() .longOpt("option") .required(false) .hasArg(true) .numberOfArgs(2) .argName("key=value") .valueSeparator('=') .desc("options associated with this mount point") .build(); /** * @param fs the filesystem of Alluxio */ public MountCommand(FileSystem fs) { super(fs); } @Override public String getCommandName() { return "mount"; } @Override protected int getNumOfArgs() { return 2; } @Override public Options getOptions() { return new Options().addOption(READONLY_OPTION).addOption(SHARED_OPTION) .addOption(OPTION_OPTION); } @Override public int run(CommandLine cl) throws AlluxioException, IOException { String[] args = cl.getArgs(); AlluxioURI alluxioPath = new AlluxioURI(args[0]); AlluxioURI ufsPath = new AlluxioURI(args[1]); MountOptions options = MountOptions.defaults(); if (cl.hasOption(READONLY_OPTION.getLongOpt())) { options.setReadOnly(true); } if (cl.hasOption(SHARED_OPTION.getLongOpt())) { options.setShared(true); } if (cl.hasOption(OPTION_OPTION.getLongOpt())) { Properties properties = cl.getOptionProperties(OPTION_OPTION.getLongOpt()); options.setProperties(Maps.fromProperties(properties)); } mFileSystem.mount(alluxioPath, ufsPath, options); System.out.println("Mounted " + ufsPath + " at " + alluxioPath); return 0; } @Override public String getUsage() { return "mount [--readonly] [--shared] [--option <key=val>] <alluxioPath> <ufsURI>"; } @Override public String getDescription() { return "Mounts a UFS path onto an Alluxio path."; } }