http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionRegistryArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionRegistryArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionRegistryArgs.java new file mode 100644 index 0000000..3e53418 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionRegistryArgs.java @@ -0,0 +1,218 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.hadoop.yarn.service.conf.YarnServiceConstants; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.UsageException; +import org.apache.hadoop.yarn.service.api.records.ConfigFormat; + +import static org.apache.hadoop.yarn.service.client.params.SliderActions.ACTION_REGISTRY; +import static org.apache.hadoop.yarn.service.client.params.SliderActions.DESCRIBE_ACTION_REGISTRY; +import java.io.File; + +/** + * Registry actions + * + * --instance {app name}, if a / is in it, refers underneath? + * --dest {destfile} + * --list : list instances of slider service + * --listfiles + */ +@Parameters(commandNames = {ACTION_REGISTRY}, + commandDescription = DESCRIBE_ACTION_REGISTRY) + +public class ActionRegistryArgs extends AbstractActionArgs { + + public static final String USAGE = + "Usage: " + SliderActions.ACTION_REGISTRY + + " (" + + Arguments.ARG_LIST + "|" + + Arguments.ARG_LISTCONF + "|" + + Arguments.ARG_LISTEXP + "|" + + Arguments.ARG_LISTFILES + "|" + + Arguments.ARG_GETCONF + "|" + + Arguments.ARG_GETEXP + "> " + + Arguments.ARG_NAME + " <name> " + + " )" + + "[" + Arguments.ARG_VERBOSE + "] " + + "[" + Arguments.ARG_USER + "] " + + "[" + Arguments.ARG_OUTPUT + " <filename> ] " + + "[" + Arguments.ARG_SERVICETYPE + " <servicetype> ] " + + "[" + Arguments.ARG_FORMAT + " <xml|json|properties>] " + + System.getProperty("line.separator") + + "Arguments.ARG_GETEXP only supports " + Arguments.ARG_FORMAT + " json" + ; + public ActionRegistryArgs() { + } + + public ActionRegistryArgs(String name) { + this.name = name; + } + + @Override + public String getActionName() { + return ACTION_REGISTRY; + } + + /** + * Get the min #of params expected + * @return the min number of params in the {@link #parameters} field + */ + @Override + public int getMinParams() { + return 0; + } + + @Parameter(names = {ARG_LIST}, + description = "list services") + public boolean list; + + @Parameter(names = {ARG_LISTCONF}, + description = "list configurations") + public boolean listConf; + + @Parameter(names = {ARG_GETCONF}, + description = "get configuration") + public String getConf; + + @Parameter(names = {ARG_LISTEXP}, + description = "list exports") + public boolean listExports; + + @Parameter(names = {ARG_GETEXP}, + description = "get export") + public String getExport; + + @Parameter(names = {ARG_LISTFILES}, + description = "list files") + public String listFiles; + + @Parameter(names = {ARG_GETFILES}, + description = "get files") + public String getFiles; + + //--format + @Parameter(names = ARG_FORMAT, + description = "Format for a response: <xml|json|properties>") + public String format = ConfigFormat.XML.toString() ; + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT, ARG_DEST}, + description = "Output destination") + public File out; + + @Parameter(names = {ARG_NAME}, + description = "name of an instance") + public String name; + + @Parameter(names = {ARG_SERVICETYPE}, + description = "optional service type") + public String serviceType = YarnServiceConstants.APP_TYPE; + + @Parameter(names = {ARG_VERBOSE}, + description = "verbose output") + public boolean verbose; + + @Parameter(names = {ARG_INTERNAL}, + description = "fetch internal registry entries") + public boolean internal; + + @Parameter(names = {ARG_USER}, + description = "the name of the user whose service is being resolved") + public String user; + + /** + * validate health of all the different operations + * @throws BadCommandArgumentsException + */ + @Override + public void validate() throws BadCommandArgumentsException, UsageException { + super.validate(); + + //verify that at most one of the operations is set + int gets = s(getConf) + s(getFiles) + s(getExport); + int lists = s(list) + s(listConf) + s(listFiles) + s(listExports); + int set = lists + gets; + if (set > 1) { + throw new UsageException(USAGE); + } + + if (out != null && ( set == 0)) { + throw new UsageException("output path" + + " is only supported on 'get' operations: "); + } + if (!list && !is(name)) { + throw new UsageException("Argument " + ARG_NAME + +" missing: "); + + } + } + + private int s(String arg) { + return is(arg) ? 1 : 0; + } + + private boolean is(String arg) { + return arg != null; + } + + private int s(boolean arg) { + return arg ? 1 : 0; + } + + private String ifdef(String arg, boolean val) { + return val ? (arg + " "): ""; + } + + private String ifdef(String arg, String val) { + if (is(val)) { + return arg + " " + val + " "; + } else { + return ""; + } + } + + @Override + public String toString() { + final StringBuilder sb = + new StringBuilder(ACTION_REGISTRY); + sb.append(' '); + sb.append(ifdef(ARG_LIST, list)); + sb.append(ifdef(ARG_LISTCONF, listConf)); + sb.append(ifdef(ARG_LISTFILES, listFiles)); + sb.append(ifdef(ARG_GETCONF, getConf)); + sb.append(ifdef(ARG_GETFILES, getFiles)); + + sb.append(ifdef(ARG_NAME, name)); + sb.append(ifdef(ARG_SERVICETYPE, serviceType)); + + + sb.append(ifdef(ARG_VERBOSE, verbose)); + sb.append(ifdef(ARG_INTERNAL, internal)); + + if (out != null) { + sb.append(ifdef(ARG_OUTPUT, out.toString())); + } + sb.append(ifdef(ARG_FORMAT, format)); + + return sb.toString(); + } +}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResolveArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResolveArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResolveArgs.java new file mode 100644 index 0000000..65f0472 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResolveArgs.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.commons.lang.StringUtils; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.UsageException; + +import java.io.File; + +import static org.apache.hadoop.yarn.service.client.params.SliderActions.ACTION_RESOLVE; +import static org.apache.hadoop.yarn.service.client.params.SliderActions.DESCRIBE_ACTION_REGISTRY; + +/** + * Resolve registry entries + * + * --path {path} + * --out {destfile} + * --verbose + * --list + */ +@Parameters(commandNames = {ACTION_RESOLVE}, + commandDescription = DESCRIBE_ACTION_REGISTRY) +public class ActionResolveArgs extends AbstractActionArgs { + + public static final String USAGE = + "Usage: " + SliderActions.ACTION_RESOLVE + + " " + + ARG_PATH + " <path> " + + "[" + ARG_LIST + "] " + + "[" + ARG_OUTPUT + " <filename> ] " + + "[" + ARG_DESTDIR + " <directory> ] " + ; + public ActionResolveArgs() { + } + + @Override + public String getActionName() { + return ACTION_RESOLVE; + } + + /** + * Get the min #of params expected + * @return the min number of params in the {@link #parameters} field + */ + @Override + public int getMinParams() { + return 0; + } + + @Parameter(names = {ARG_LIST}, + description = "list services") + public boolean list; + + @Parameter(names = {ARG_PATH}, + description = "resolve a path") + public String path; + + @Parameter(names = {ARG_DESTDIR}, + description = "destination directory for operations") + public File destdir; + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "dest file") + public File out; + + @Override + public String toString() { + final StringBuilder sb = + new StringBuilder(ACTION_RESOLVE).append(" "); + sb.append(ARG_PATH).append(" ").append(path).append(" "); + if (list) { + sb.append(ARG_LIST).append(" "); + } + if (destdir != null) { + sb.append(ARG_DESTDIR).append(" ").append(destdir).append(" "); + } + if (out != null) { + sb.append(ARG_OUTPUT).append(" ").append(out).append(" "); + } + return sb.toString(); + } + + @Override + public void validate() throws BadCommandArgumentsException, UsageException { + super.validate(); + if (StringUtils.isEmpty(path)) { + throw new BadCommandArgumentsException("Missing mandatory argument " + + ARG_PATH); + } + if (list && out != null) { + throw new BadCommandArgumentsException("Argument " + + ARG_OUTPUT + + " not supported for " + ARG_LIST); + } + if (out != null && destdir != null) { + throw new BadCommandArgumentsException( + ARG_OUTPUT + " and " + ARG_DESTDIR + " cannot be used together" + ); + } + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public boolean isList() { + return list; + } + + public void setList(boolean list) { + this.list = list; + } + + public File getDestdir() { + return destdir; + } + + public void setDestdir(File destdir) { + this.destdir = destdir; + } + + public File getOut() { + return out; + } + + public void setOut(File out) { + this.out = out; + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResourceArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResourceArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResourceArgs.java new file mode 100644 index 0000000..b03dc92 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionResourceArgs.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.hadoop.yarn.service.client.params.AbstractActionArgs; +import org.apache.hadoop.yarn.service.client.params.SliderActions; + +@Parameters(commandNames = { SliderActions.ACTION_RESOURCE}, + commandDescription = SliderActions.DESCRIBE_ACTION_RESOURCE) + +public class ActionResourceArgs extends AbstractActionArgs { + + @Override + public String getActionName() { + return SliderActions.ACTION_RESOURCE; + } + + @Parameter(names = {ARG_INSTALL}, + description = "Install the resource(s)") + public boolean install; + + @Parameter(names = {ARG_DELETE}, + description = "Delete the file") + public boolean delete; + + @Parameter(names = {ARG_LIST}, + description = "List of installed files") + public boolean list; + + @Parameter(names = {ARG_RESOURCE}, + description = "Name of the file or directory") + public String resource; + + @Parameter(names = {ARG_DESTDIR}, + description = "The name of the folder in which to store the resources") + public String folder; + + @Parameter(names = {ARG_OVERWRITE}, description = "Overwrite existing resource(s)") + public boolean overwrite = false; + + /** + * Get the min #of params expected + * @return the min number of params in the {@link #parameters} field + */ + public int getMinParams() { + return 0; + } + + @Override + public int getMaxParams() { + return 3; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionStatusArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionStatusArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionStatusArgs.java new file mode 100644 index 0000000..31f25ef --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionStatusArgs.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.hadoop.yarn.service.client.params.AbstractActionArgs; +import org.apache.hadoop.yarn.service.client.params.SliderActions; + +@Parameters(commandNames = { SliderActions.ACTION_STATUS}, + commandDescription = SliderActions.DESCRIBE_ACTION_STATUS) + +public class ActionStatusArgs extends AbstractActionArgs { + + @Override + public String getActionName() { + return SliderActions.ACTION_STATUS; + } + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "Output file for the status information") + public String output; + + @Parameter(names = {ARG_LIFETIME}, + description = "Lifetime of the service from the time of request") + public boolean lifetime; + + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionThawArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionThawArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionThawArgs.java new file mode 100644 index 0000000..175e367 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionThawArgs.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import com.beust.jcommander.ParametersDelegate; + +import java.io.File; + +@Parameters(commandNames = { SliderActions.ACTION_START }, + commandDescription = SliderActions.DESCRIBE_ACTION_THAW) +public class ActionThawArgs extends AbstractActionArgs implements + WaitTimeAccessor, + LaunchArgsAccessor { + + + @Override + public String getActionName() { + return SliderActions.ACTION_START; + } + + @Override + public int getWaittime() { + return launchArgs.getWaittime(); + } + + @ParametersDelegate + LaunchArgsDelegate launchArgs = new LaunchArgsDelegate(); + + @Parameter(names = {ARG_LIFETIME}, + description = "Life time of the service since service started at" + + " running state") + public long lifetime; + + @Override + public String getRmAddress() { + return launchArgs.getRmAddress(); + } + + @Override + public void setWaittime(int waittime) { + launchArgs.setWaittime(waittime); + } + + + @Override + public File getOutputFile() { + return launchArgs.getOutputFile(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionTokensArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionTokensArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionTokensArgs.java new file mode 100644 index 0000000..cf48513 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionTokensArgs.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.UsageException; + +import java.io.File; + +@Parameters(commandNames = { SliderActions.ACTION_TOKENS}, + commandDescription = "save tokens to a file or list tokens in a file") +public class ActionTokensArgs extends AbstractActionArgs { + + public static final String DUPLICATE_ARGS = "Only one of " + + ARG_SOURCE + " and " + ARG_OUTPUT + " allowed"; + + public static final String MISSING_KT_PROVIDER = + "Both " + ARG_KEYTAB + " and " + ARG_PRINCIPAL + + " must be provided"; + + @Override + public String getActionName() { + return SliderActions.ACTION_TOKENS; + } + + @Parameter(names = {ARG_OUTPUT}, + description = "File to write") + public File output; + + @Parameter(names = {ARG_SOURCE}, + description = "source file") + public File source; + + @Parameter(names = {ARG_KEYTAB}, description = "keytab to use") + public File keytab; + + @Parameter(names = {ARG_PRINCIPAL}, description = "principal to log in from a keytab") + public String principal=""; + + /** + * Get the min #of params expected + * @return the min number of params in the {@link #parameters} field + */ + public int getMinParams() { + return 0; + } + + @Override + public void validate() throws BadCommandArgumentsException, UsageException { + super.validate(); + if (output != null && source != null) { + throw new BadCommandArgumentsException(DUPLICATE_ARGS); + } + + // this is actually a !xor + if (keytab != null ^ !principal.isEmpty()) { + throw new BadCommandArgumentsException(MISSING_KT_PROVIDER); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionUpdateArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionUpdateArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionUpdateArgs.java new file mode 100644 index 0000000..e310f45 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ActionUpdateArgs.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameters; + +@Parameters(commandNames = { SliderActions.ACTION_UPDATE}, + commandDescription = SliderActions.DESCRIBE_ACTION_UPDATE) + +public class ActionUpdateArgs extends AbstractClusterBuildingActionArgs { + + @Override + public String getActionName() { + return SliderActions.ACTION_UPDATE; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ArgOps.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ArgOps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ArgOps.java new file mode 100644 index 0000000..00151f4 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ArgOps.java @@ -0,0 +1,156 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.ErrorStrings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Static argument manipulation operations + */ +public class ArgOps { + + private static final Logger + log = LoggerFactory.getLogger(ArgOps.class); + + /** + * create a 3-tuple + */ + public static List<Object> triple(String msg, int min, int max) { + List<Object> l = new ArrayList<>(3); + l.add(msg); + l.add(min); + l.add(max); + return l; + } + + public static void applyFileSystemBinding(String filesystemBinding, + Configuration conf) { + if (filesystemBinding != null) { + //filesystem argument was set -this overwrites any defaults in the + //configuration + FileSystem.setDefaultUri(conf, filesystemBinding); + } + } + + public static void splitPairs(Collection<String> pairs, + Map<String, String> dest) { + for (String prop : pairs) { + String[] keyval = prop.split("=", 2); + if (keyval.length == 2) { + dest.put(keyval[0], keyval[1]); + } + } + } + + + public static void applyDefinitions(Map<String, String> definitionMap, + Configuration conf) { + for (Map.Entry<String, String> entry : definitionMap.entrySet()) { + String key = entry.getKey(); + String val = entry.getValue(); + log.debug("configuration[{}]<=\"{}\"", key, val); + conf.set(key, val, "command line"); + } + } + + /** + * Create a map from a tuple list like ['worker','2','master','1] into a map + * ['worker':'2',"master":'1']; + * Duplicate entries also trigger errors + * @param description description for errors + * @param list list to conver to tuples + * @return the map of key value pairs -unordered. + * @throws BadCommandArgumentsException odd #of arguments received + */ + public static Map<String, String> convertTupleListToMap(String description, + List<String> list) throws + BadCommandArgumentsException { + Map<String, String> results = new HashMap<>(); + if (list != null && !list.isEmpty()) { + int size = list.size(); + if (size % 2 != 0) { + //odd number of elements, not permitted + throw new BadCommandArgumentsException( + ErrorStrings.ERROR_PARSE_FAILURE + description); + } + for (int count = 0; count < size; count += 2) { + String key = list.get(count); + String val = list.get(count + 1); + if (results.get(key) != null) { + throw new BadCommandArgumentsException( + ErrorStrings.ERROR_DUPLICATE_ENTRY + description + + ": " + key); + } + results.put(key, val); + } + } + return results; + } + + /** + * Create a map from a tuple list like + * ['worker','heapsize','5G','master','heapsize','2M'] into a map + * ['worker':'2',"master":'1']; + * Duplicate entries also trigger errors + + * @throws BadCommandArgumentsException odd #of arguments received + */ + public static Map<String, Map<String, String>> convertTripleListToMaps(String description, + List<String> list) throws BadCommandArgumentsException { + + Map<String, Map<String, String>> results = new HashMap<>(); + if (list != null && !list.isEmpty()) { + int size = list.size(); + if (size % 3 != 0) { + //wrong number of elements, not permitted + throw new BadCommandArgumentsException( + ErrorStrings.ERROR_PARSE_FAILURE + description); + } + for (int count = 0; count < size; count += 3) { + String role = list.get(count); + String key = list.get(count + 1); + String val = list.get(count + 2); + Map<String, String> roleMap = results.get(role); + if (roleMap == null) { + //demand create new role map + roleMap = new HashMap<>(); + results.put(role, roleMap); + } + if (roleMap.get(key) != null) { + throw new BadCommandArgumentsException( + ErrorStrings.ERROR_DUPLICATE_ENTRY + description + + ": for key " + key + " under " + role); + } + roleMap.put(key, val); + } + } + return results; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/Arguments.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/Arguments.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/Arguments.java new file mode 100644 index 0000000..204149b --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/Arguments.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +/** + * Here are all the arguments that may be parsed by the client or server + * command lines. + * + * Important: Please keep the main list in alphabetical order + * so it is easier to see what arguments are there + */ +public interface Arguments { + + String ARG_APPDEF = "--appdef"; + String ARG_BASE_PATH = "--basepath"; + String ARG_COMPONENT = "--component"; + String ARG_COMPONENT_SHORT = "--comp"; + String ARG_COMPONENTS = "--components"; + String ARG_COMP_OPT= "--compopt"; + String ARG_COMP_OPT_SHORT = "--co"; + String ARG_CONFIG = "--config"; + String ARG_CONTAINERS = "--containers"; + String ARG_DEBUG = "--debug"; + String ARG_DEFINE = "-D"; + String ARG_DELETE = "--delete"; + String ARG_DEST = "--dest"; + String ARG_DESTDIR = "--destdir"; + String ARG_FILESYSTEM = "--fs"; + String ARG_FILESYSTEM_LONG = "--filesystem"; + String ARG_FOLDER = "--folder"; + String ARG_FORCE = "--force"; + String ARG_FORMAT = "--format"; + String ARG_GETCONF = "--getconf"; + String ARG_GETEXP = "--getexp"; + String ARG_GETFILES = "--getfiles"; + String ARG_HELP = "--help"; + String ARG_IMAGE = "--image"; + String ARG_INSTALL = "--install"; + String ARG_INTERNAL = "--internal"; + String ARG_KEYLEN = "--keylen"; + String ARG_KEYTAB = "--keytab"; + String ARG_KEYTABINSTALL = ARG_INSTALL; + String ARG_KEYTABDELETE = ARG_DELETE; + String ARG_KEYTABLIST = "--list"; + String ARG_LIST = "--list"; + String ARG_LISTCONF = "--listconf"; + String ARG_LISTEXP = "--listexp"; + String ARG_LISTFILES = "--listfiles"; + String ARG_LIVE = "--live"; + String ARG_MANAGER = "--manager"; + String ARG_MANAGER_SHORT = "--m"; + String ARG_MESSAGE = "--message"; + String ARG_NAME = "--name"; + String ARG_OPTION = "--option"; + String ARG_OPTION_SHORT = "-O"; + String ARG_OUTPUT = "--out"; + String ARG_OUTPUT_SHORT = "-o"; + String ARG_OVERWRITE = "--overwrite"; + String ARG_PACKAGE = "--package"; + String ARG_PATH = "--path"; + String ARG_PRINCIPAL = "--principal"; + String ARG_QUEUE = "--queue"; + String ARG_LIFETIME = "--lifetime"; + String ARG_RESOURCE = "--resource"; + String ARG_RESOURCE_MANAGER = "--rm"; + String ARG_SECURE = "--secure"; + String ARG_SERVICETYPE = "--servicetype"; + String ARG_SERVICES = "--services"; + String ARG_SOURCE = "--source"; + String ARG_STATE = "--state"; + String ARG_SYSPROP = "-S"; + String ARG_USER = "--user"; + String ARG_UPLOAD = "--upload"; + String ARG_VERBOSE = "--verbose"; + String ARG_VERSION = "--version"; + String ARG_WAIT = "--wait"; +/* + STOP: DO NOT ADD YOUR ARGUMENTS HERE. GO BACK AND INSERT THEM IN THE + RIGHT PLACE IN THE LIST + */ + + /** + * server: URI for the cluster + */ + String ARG_CLUSTER_URI = "-cluster-uri"; + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ClientArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ClientArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ClientArgs.java new file mode 100644 index 0000000..7b957fa --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ClientArgs.java @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.service.conf.YarnServiceConf; +import org.apache.hadoop.yarn.service.utils.SliderUtils; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.ErrorStrings; +import org.apache.hadoop.yarn.service.exceptions.SliderException; + +import java.util.Collection; + +/** + * Client CLI Args + */ + +public class ClientArgs extends CommonArgs { + + // ========================================================= + // Keep all of these in alphabetical order. Thanks. + // ========================================================= + + private final ActionBuildArgs actionBuildArgs = new ActionBuildArgs(); + private final ActionClientArgs actionClientArgs = new ActionClientArgs(); + private final ActionCreateArgs actionCreateArgs = new ActionCreateArgs(); + private final ActionDependencyArgs actionDependencyArgs = new ActionDependencyArgs(); + private final ActionDestroyArgs actionDestroyArgs = new ActionDestroyArgs(); + private final ActionExistsArgs actionExistsArgs = new ActionExistsArgs(); + private final ActionFlexArgs actionFlexArgs = new ActionFlexArgs(); + private final ActionFreezeArgs actionFreezeArgs = new ActionFreezeArgs(); + private final ActionHelpArgs actionHelpArgs = new ActionHelpArgs(); + private final ActionKDiagArgs actionKDiagArgs = new ActionKDiagArgs(); + private final ActionKeytabArgs actionKeytabArgs = new ActionKeytabArgs(); + private final ActionListArgs actionListArgs = new ActionListArgs(); + private final ActionRegistryArgs actionRegistryArgs = new ActionRegistryArgs(); + private final ActionResolveArgs actionResolveArgs = new ActionResolveArgs(); + private final ActionResourceArgs actionResourceArgs = new ActionResourceArgs(); + private final ActionStatusArgs actionStatusArgs = new ActionStatusArgs(); + private final ActionThawArgs actionThawArgs = new ActionThawArgs(); + private final ActionTokensArgs actionTokenArgs = new ActionTokensArgs(); + private final ActionUpdateArgs actionUpdateArgs = new ActionUpdateArgs(); + + public ClientArgs(String[] args) { + super(args); + } + + public ClientArgs(Collection args) { + super(args); + } + + @Override + protected void addActionArguments() { + + addActions( + actionBuildArgs, + actionCreateArgs, + actionDependencyArgs, + actionDestroyArgs, + actionFlexArgs, + actionFreezeArgs, + actionHelpArgs, + actionStatusArgs, + actionThawArgs + ); + } + + @Override + public void applyDefinitions(Configuration conf) throws + BadCommandArgumentsException { + super.applyDefinitions(conf); + //RM + if (getManager() != null) { + log.debug("Setting RM to {}", getManager()); + conf.set(YarnConfiguration.RM_ADDRESS, getManager()); + } + if (getBasePath() != null) { + log.debug("Setting basePath to {}", getBasePath()); + conf.set(YarnServiceConf.YARN_SERVICE_BASE_PATH, + getBasePath().toString()); + } + } + + + public ActionBuildArgs getActionBuildArgs() { + return actionBuildArgs; + } + + public ActionUpdateArgs getActionUpdateArgs() { + return actionUpdateArgs; + } + + public ActionCreateArgs getActionCreateArgs() { + return actionCreateArgs; + } + + public ActionDependencyArgs getActionDependencyArgs() { + return actionDependencyArgs; + } + + public ActionDestroyArgs getActionDestroyArgs() { + return actionDestroyArgs; + } + + public ActionExistsArgs getActionExistsArgs() { + return actionExistsArgs; + } + + public ActionFlexArgs getActionFlexArgs() { + return actionFlexArgs; + } + + public ActionFreezeArgs getActionFreezeArgs() { + return actionFreezeArgs; + } + + public ActionListArgs getActionListArgs() { + return actionListArgs; + } + + + public ActionRegistryArgs getActionRegistryArgs() { + return actionRegistryArgs; + } + + public ActionResolveArgs getActionResolveArgs() { + return actionResolveArgs; + } + + public ActionResourceArgs getActionResourceArgs() { + return actionResourceArgs; + } + + public ActionStatusArgs getActionStatusArgs() { + return actionStatusArgs; + } + + public ActionThawArgs getActionThawArgs() { + return actionThawArgs; + } + + public ActionTokensArgs getActionTokenArgs() { + return actionTokenArgs; + } + + /** + * Look at the chosen action and bind it as the core action for the operation. + * @throws SliderException bad argument or similar + */ + @Override + public void applyAction() throws SliderException { + String action = getAction(); + if (SliderUtils.isUnset(action)) { + action = ACTION_HELP; + } + switch (action) { + case ACTION_BUILD: + bindCoreAction(actionBuildArgs); + break; + + case ACTION_CREATE: + bindCoreAction(actionCreateArgs); + break; + + case ACTION_STOP: + bindCoreAction(actionFreezeArgs); + break; + + case ACTION_START: + bindCoreAction(actionThawArgs); + break; + + case ACTION_DEPENDENCY: + bindCoreAction(actionDependencyArgs); + break; + + case ACTION_DESTROY: + bindCoreAction(actionDestroyArgs); + break; + + case ACTION_EXISTS: + bindCoreAction(actionExistsArgs); + break; + + case ACTION_FLEX: + bindCoreAction(actionFlexArgs); + break; + + case ACTION_HELP: + bindCoreAction(actionHelpArgs); + break; + + case ACTION_KDIAG: + bindCoreAction(actionKDiagArgs); + break; + + case ACTION_KEYTAB: + bindCoreAction(actionKeytabArgs); + break; + + case ACTION_LIST: + bindCoreAction(actionListArgs); + break; + + case ACTION_REGISTRY: + bindCoreAction(actionRegistryArgs); + break; + + case ACTION_RESOLVE: + bindCoreAction(actionResolveArgs); + break; + + case ACTION_RESOURCE: + bindCoreAction(actionResourceArgs); + break; + + case ACTION_STATUS: + bindCoreAction(actionStatusArgs); + break; + + case ACTION_TOKENS: + bindCoreAction(actionTokenArgs); + break; + + case ACTION_UPDATE: + bindCoreAction(actionUpdateArgs); + break; + + default: + throw new BadCommandArgumentsException(ErrorStrings.ERROR_UNKNOWN_ACTION + + " " + action); + } + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/CommonArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/CommonArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/CommonArgs.java new file mode 100644 index 0000000..e1197ea --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/CommonArgs.java @@ -0,0 +1,282 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterDescription; +import com.beust.jcommander.ParameterException; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.yarn.service.utils.SliderUtils; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; +import org.apache.hadoop.yarn.service.exceptions.ErrorStrings; +import org.apache.hadoop.yarn.service.exceptions.SliderException; +import org.apache.hadoop.yarn.service.exceptions.UsageException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * This class contains the common argument set for all tne entry points, + * and the core parsing logic to verify that the action is on the list + * of allowed actions -and that the remaining number of arguments is + * in the range allowed + */ + +public abstract class CommonArgs extends ArgOps implements SliderActions, + Arguments { + + protected static final Logger log = LoggerFactory.getLogger(CommonArgs.class); + + + private static final int DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME = 30; + + + @Parameter(names = ARG_HELP, help = true) + public boolean help; + + + /** + -D name=value + + Define an HBase configuration option which overrides any options in + the configuration XML files of the image or in the image configuration + directory. The values will be persisted. + Configuration options are only passed to the cluster when creating or reconfiguring a cluster. + + */ + + public Map<String, String> definitionMap = new HashMap<String, String>(); + /** + * System properties + */ + public Map<String, String> syspropsMap = new HashMap<String, String>(); + + + /** + * fields + */ + public final JCommander commander; + private final String[] args; + + private AbstractActionArgs coreAction; + + /** + * get the name: relies on arg 1 being the cluster name in all operations + * @return the name argument, null if there is none + */ + public String getClusterName() { + return coreAction.getClusterName(); + } + + protected CommonArgs(String[] args) { + this.args = args; + commander = new JCommander(this); + } + + protected CommonArgs(Collection args) { + List<String> argsAsStrings = SliderUtils.collectionToStringList(args); + this.args = argsAsStrings.toArray(new String[argsAsStrings.size()]); + commander = new JCommander(this); + } + + public String usage() { + return usage(this, null); + } + + public static String usage(CommonArgs serviceArgs, String commandOfInterest) { + String result = null; + StringBuilder helperMessage = new StringBuilder(); + if (commandOfInterest == null) { + // JCommander.usage is too verbose for a command with many options like + // slider no short version of that is found Instead, we compose our msg by + helperMessage.append("\nUsage: service COMMAND [options]\n"); + helperMessage.append("where COMMAND is one of\n"); + for (String jcommand : serviceArgs.commander.getCommands().keySet()) { + helperMessage.append(String.format("\t%-" + + DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME + "s%s", jcommand, + serviceArgs.commander.getCommandDescription(jcommand) + "\n")); + } + helperMessage + .append("Most commands print help when invoked without parameters or with --help"); + result = helperMessage.toString(); + } else { + helperMessage.append("\nUsage: service ").append(commandOfInterest); + helperMessage.append(serviceArgs.coreAction.getMinParams() > 0 ? " <service>" : ""); + helperMessage.append("\n"); + for (ParameterDescription paramDesc : serviceArgs.commander.getCommands() + .get(commandOfInterest).getParameters()) { + String optional = paramDesc.getParameter().required() ? " (required)" + : " (optional)"; + String paramName = paramDesc.getParameterized().getType() == Boolean.TYPE ? paramDesc + .getLongestName() : paramDesc.getLongestName() + " <" + + paramDesc.getParameterized().getName() + ">"; + helperMessage.append(String.format("\t%-" + + DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME + "s%s", paramName, + paramDesc.getDescription() + optional + "\n")); + result = helperMessage.toString(); + } + } + return result; + } + + public static String usage(CommonArgs serviceArgs) { + return usage(serviceArgs, null); + } + + /** + * Parse routine -includes registering the action-specific argument classes + * and postprocess it + * @throws SliderException on any problem + */ + public void parse() throws SliderException { + addActionArguments(); + try { + commander.parse(args); + } catch (ParameterException e) { + throw new BadCommandArgumentsException(e, "%s in %s", + e.toString(), + (args != null + ? (SliderUtils.join(args, + " ", false)) + : "[]")); + } + //now copy back to this class some of the attributes that are common to all + //actions + postProcess(); + } + + /** + * Add a command + * @param name action + * @param arg value + */ + protected void addAction(String name, Object arg) { + commander.addCommand(name, arg); + } + + protected void addActions(Object... actions) { + for (Object action : actions) { + commander.addCommand(action); + } + } + + /** + * Override point to add a set of actions + */ + protected void addActionArguments() { + + } + + /** + * validate args via {@link #validate()} + * then postprocess the arguments + */ + public void postProcess() throws SliderException { + applyAction(); + validate(); + + //apply entry set + for (Map.Entry<String, String> entry : syspropsMap.entrySet()) { + System.setProperty(entry.getKey(), entry.getValue()); + } + } + + + /** + * Implementors must implement their action apply routine here + */ + public abstract void applyAction() throws SliderException; + + + /** + * Bind the core action; this extracts any attributes that are used + * across routines + * @param action action to bind + */ + protected void bindCoreAction(AbstractActionArgs action) { + coreAction = action; + + splitPairs(coreAction.definitions, definitionMap); + splitPairs(coreAction.sysprops, syspropsMap); + } + + /** + * Validate the arguments against the action requested + */ + public void validate() throws BadCommandArgumentsException, UsageException { + if (coreAction == null) { + throw new UsageException(ErrorStrings.ERROR_NO_ACTION + usage()); + } + log.debug("action={}", getAction()); + // let the action validate itself + try { + coreAction.validate(); + } catch (BadCommandArgumentsException e) { + String badArgMsgBuilder = + e.getMessage() + System.lineSeparator() + usage(this, + coreAction.getActionName()); + throw new BadCommandArgumentsException(badArgMsgBuilder); + } + } + + /** + * Apply all the definitions on the command line to the configuration + * @param conf config + */ + public void applyDefinitions(Configuration conf) throws + BadCommandArgumentsException { + applyDefinitions(definitionMap, conf); + } + + + /** + * If the Filesystem binding was provided, it overrides anything in + * the configuration + * @param conf configuration + */ + public void applyFileSystemBinding(Configuration conf) { + ArgOps.applyFileSystemBinding(getFilesystemBinding(), conf); + } + + public boolean isDebug() { + return coreAction.debug; + } + + + public String getFilesystemBinding() { + return coreAction.filesystemBinding; + } + + public Path getBasePath() { return coreAction.basePath; } + + public String getManager() { + return coreAction.manager; + } + + public String getAction() { + return commander.getParsedCommand(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ComponentArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ComponentArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ComponentArgsDelegate.java new file mode 100644 index 0000000..b6cd0a1 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/ComponentArgsDelegate.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ComponentArgsDelegate extends AbstractArgsDelegate { + + /** + * This is a listing of the roles to create + */ + @Parameter(names = {ARG_COMPONENT, ARG_COMPONENT_SHORT}, + arity = 2, + description = "--component <name> <count> e.g. +1 incr by 1, -2 decr by 2, and 3 makes final count 3", + splitter = DontSplitArguments.class) + public List<String> componentTuples = new ArrayList<>(0); + + + /** + * Get the role mapping (may be empty, but never null) + * @return role mapping + * @throws BadCommandArgumentsException parse problem + */ + public Map<String, String> getComponentMap() throws BadCommandArgumentsException { + return convertTupleListToMap("component", componentTuples); + } + + public List<String> getComponentTuples() { + return componentTuples; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/DontSplitArguments.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/DontSplitArguments.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/DontSplitArguments.java new file mode 100644 index 0000000..85de615 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/DontSplitArguments.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.converters.IParameterSplitter; + +import java.util.ArrayList; +import java.util.List; + +public class DontSplitArguments implements IParameterSplitter { + + @Override + public List<String> split(String value) { + List<String> list = new ArrayList<>(1); + list.add(value); + return list; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsAccessor.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsAccessor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsAccessor.java new file mode 100644 index 0000000..bf194b6 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsAccessor.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import java.io.File; + +/** + * Launch args for create and start and anything else that can start something + */ +public interface LaunchArgsAccessor extends WaitTimeAccessor { + String getRmAddress(); + + File getOutputFile(); +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsDelegate.java new file mode 100644 index 0000000..d42510c --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/LaunchArgsDelegate.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; + +import java.io.File; + +/** + * Any launch-time args + */ +public class LaunchArgsDelegate extends WaitArgsDelegate implements + LaunchArgsAccessor { + + + //TODO: do we need this? + @Parameter(names = ARG_RESOURCE_MANAGER, + description = "Resource manager hostname:port ", + required = false) + private String rmAddress; + + @Override + public String getRmAddress() { + return rmAddress; + } + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "output file for any service report") + public File outputFile; + + @Override + public File getOutputFile() { + return outputFile; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/OptionArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/OptionArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/OptionArgsDelegate.java new file mode 100644 index 0000000..7972716 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/OptionArgsDelegate.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import org.apache.hadoop.yarn.service.exceptions.BadCommandArgumentsException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Delegate for application and resource options. + */ +public class OptionArgsDelegate extends AbstractArgsDelegate { + + /** + * Options key value. + */ + @Parameter(names = {ARG_OPTION, ARG_OPTION_SHORT}, arity = 2, + description = ARG_OPTION + "<name> <value>", + splitter = DontSplitArguments.class) + public List<String> optionTuples = new ArrayList<>(0); + + + /** + * All the app component option triples. + */ + @Parameter(names = {ARG_COMP_OPT, ARG_COMP_OPT_SHORT}, arity = 3, + description = "Component option " + ARG_COMP_OPT + + " <component> <name> <option>", + splitter = DontSplitArguments.class) + public List<String> compOptTriples = new ArrayList<>(0); + + public Map<String, String> getOptionsMap() throws + BadCommandArgumentsException { + return convertTupleListToMap(ARG_OPTION, optionTuples); + } + + /** + * Get the role heap mapping (may be empty, but never null). + * @return role heap mapping + * @throws BadCommandArgumentsException parse problem + */ + public Map<String, Map<String, String>> getCompOptionMap() + throws BadCommandArgumentsException { + return convertTripleListToMaps(ARG_COMP_OPT, compOptTriples); + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/PathArgumentConverter.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/PathArgumentConverter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/PathArgumentConverter.java new file mode 100644 index 0000000..040ac64 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/PathArgumentConverter.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.converters.BaseConverter; +import org.apache.hadoop.fs.Path; + +public class PathArgumentConverter extends BaseConverter<Path> { + + public PathArgumentConverter(String optionName) { + super(optionName); + } + + @Override + public Path convert(String value) { + return new Path(value); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMArgs.java new file mode 100644 index 0000000..1c38213 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMArgs.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.apache.hadoop.yarn.service.client.params; + +/** + * Parameters sent by the Client to the AM + */ +public class SliderAMArgs extends CommonArgs { + + SliderAMCreateAction createAction = new SliderAMCreateAction(); + + public SliderAMArgs(String[] args) { + super(args); + } + + @Override + protected void addActionArguments() { + addActions(createAction); + } + + public String getImage() { + return createAction.image; + } + + /** + * This is the URI in the FS to the Slider cluster; the conf file (and any + * other cluster-specifics) can be picked up here + */ + public String getAppDefPath() { + return createAction.sliderClusterURI; + } + + /** + * Am binding is simple: there is only one action + */ + @Override + public void applyAction() { + bindCoreAction(createAction); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMCreateAction.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMCreateAction.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMCreateAction.java new file mode 100644 index 0000000..a446665 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderAMCreateAction.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import com.beust.jcommander.ParametersDelegate; + +import java.io.File; + + +@Parameters(commandNames = { SliderActions.ACTION_CREATE}, + commandDescription = SliderActions.DESCRIBE_ACTION_CREATE) + +public class SliderAMCreateAction extends AbstractActionArgs implements + LaunchArgsAccessor { + + + @Override + public String getActionName() { + return SliderActions.ACTION_CREATE; + } + + @Parameter(names = ARG_IMAGE, description = "image", required = false) + public String image; + + /** + * This is the URI in the FS to the Slider cluster; the conf file (and any + * other cluster-specifics) can be picked up here + */ + @Parameter(names = ARG_CLUSTER_URI, + description = "URI to the Slider cluster", required = true) + public String sliderClusterURI; + + @ParametersDelegate LaunchArgsDelegate launchArgs = new LaunchArgsDelegate(); + + @Override + public String getRmAddress() { + return launchArgs.getRmAddress(); + } + + @Override + public int getWaittime() { + return launchArgs.getWaittime(); + } + + @Override + public void setWaittime(int waittime) { + launchArgs.setWaittime(waittime); + } + + @Override + public File getOutputFile() { + return launchArgs.getOutputFile(); + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderActions.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderActions.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderActions.java new file mode 100644 index 0000000..1b2a92d --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/SliderActions.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +/** + * Actions. + * Only some of these are supported by specific Slider Services; they + * are listed here to ensure the names are consistent + */ +public interface SliderActions { + String ACTION_BUILD = "build"; + String ACTION_CLIENT = "client"; + String ACTION_CREATE = "create"; + String ACTION_DEPENDENCY = "dependency"; + String ACTION_UPDATE = "update"; + String ACTION_UPGRADE = "upgrade"; + String ACTION_DESTROY = "destroy"; + String ACTION_EXISTS = "exists"; + String ACTION_FLEX = "flex"; + String ACTION_STOP = "stop"; + String ACTION_HELP = "help"; + String ACTION_INSTALL_KEYTAB = "install-keytab"; + String ACTION_KDIAG = "kdiag"; + String ACTION_KEYTAB = "keytab"; + String ACTION_LIST = "list"; + + String ACTION_REGISTRY = "registry"; + String ACTION_RESOLVE = "resolve"; + String ACTION_RESOURCE = "resource"; + String ACTION_STATUS = "status"; + String ACTION_START = "start"; + String ACTION_TOKENS = "tokens"; + + String DESCRIBE_ACTION_BUILD = + "Build a service specification, but do not start it"; + String DESCRIBE_ACTION_CREATE = + "Build and start a service, it's equivalent to first invoke build and then start"; + String DESCRIBE_ACTION_DEPENDENCY = + "Yarn service framework dependency (libraries) management"; + String DESCRIBE_ACTION_UPDATE = + "Update template for service"; + String DESCRIBE_ACTION_UPGRADE = + "Rolling upgrade/downgrade the component/containerto a newer/previous version"; + String DESCRIBE_ACTION_DESTROY = + "Destroy a stopped service, service must be stopped first before destroying."; + String DESCRIBE_ACTION_EXISTS = + "Probe for a service running"; + String DESCRIBE_ACTION_FLEX = "Flex a service's component by increasing or decreasing the number of containers."; + String DESCRIBE_ACTION_FREEZE = + "Stop a running service"; + String DESCRIBE_ACTION_KDIAG = "Diagnose Kerberos problems"; + String DESCRIBE_ACTION_HELP = "Print help information"; + String DESCRIBE_ACTION_LIST = + "List running services"; + String DESCRIBE_ACTION_REGISTRY = + "Query the registry of a service"; + String DESCRIBE_ACTION_STATUS = + "Get the status of a service"; + String DESCRIBE_ACTION_THAW = + "Start a service with pre-built specification or a previously stopped service"; + String DESCRIBE_ACTION_CLIENT = "Install the service client in the specified directory or obtain a client keystore or truststore"; + String DESCRIBE_ACTION_KEYTAB = "Manage a Kerberos keytab file (install, delete, list) in the sub-folder 'keytabs' of the user's Slider base directory"; + String DESCRIBE_ACTION_RESOURCE = "Manage a file (install, delete, list) in the 'resources' sub-folder of the user's Slider base directory"; + +} + http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitArgsDelegate.java new file mode 100644 index 0000000..86f3709 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitArgsDelegate.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +import com.beust.jcommander.Parameter; + +public class WaitArgsDelegate extends AbstractArgsDelegate implements + WaitTimeAccessor { + + + //--wait [timeout] + @Parameter(names = {ARG_WAIT}, + description = "time to wait for an action to complete") + public int waittime = 0; + + + @Override + public int getWaittime() { + return waittime; + } + + @Override + public void setWaittime(int waittime) { + this.waittime = waittime; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/5ccee80a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitTimeAccessor.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitTimeAccessor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitTimeAccessor.java new file mode 100644 index 0000000..f6afae6 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/params/WaitTimeAccessor.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.service.client.params; + +public interface WaitTimeAccessor { + int getWaittime(); + void setWaittime(int waittime); +} --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org