http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionListArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionListArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionListArgs.java new file mode 100644 index 0000000..739b5fc --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionListArgs.java @@ -0,0 +1,74 @@ +/* + * 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.slider.common.params; + +import java.util.HashSet; +import java.util.Set; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +@Parameters(commandNames = {SliderActions.ACTION_LIST}, + commandDescription = SliderActions.DESCRIBE_ACTION_LIST) + +public class ActionListArgs extends AbstractActionArgs { + @Override + public String getActionName() { + return SliderActions.ACTION_LIST; + } + + @Parameter(names = {ARG_LIVE}, + description = "List only live application instances") + public boolean live; + + @Parameter(names = {ARG_STATE}, + description = "list only applications in the specific YARN state") + public String state = ""; + + @Parameter(names = {ARG_VERBOSE}, + description = "print out information in details") + public boolean verbose = false; + + @Parameter(names = {ARG_CONTAINERS}, + description = "List containers of an application instance") + public boolean containers; + + @Parameter(names = {ARG_VERSION}, + description = "Filter containers by app version (used with " + + ARG_CONTAINERS + ")") + public String version; + + @Parameter(names = {ARG_COMPONENTS}, variableArity = true, + description = "Filter containers by component names (used with " + + ARG_CONTAINERS + ")") + public Set<String> components = new HashSet<>(0); + + /** + * 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 1; + } +}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionLookupArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionLookupArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionLookupArgs.java new file mode 100644 index 0000000..1b73522 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionLookupArgs.java @@ -0,0 +1,76 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.commons.lang.StringUtils; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.UsageException; + +import java.io.File; + +@Parameters(commandNames = {SliderActions.ACTION_LOOKUP}, + commandDescription = SliderActions.DESCRIBE_ACTION_LOOKUP) + +public class ActionLookupArgs extends AbstractActionArgs { + @Override + public String getActionName() { + return SliderActions.ACTION_LOOKUP; + } + + public int getMinParams() { + return 0; + } + public int getMaxParams() { + return 0; + } + + @Parameter(names = {ARG_ID}, + description = "ID of the application") + public String id; + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "output file for any application report") + public File outputFile; + + @Override + public void validate() throws BadCommandArgumentsException, UsageException { + super.validate(); + if (StringUtils.isEmpty(id)) { + throw new BadCommandArgumentsException("Missing mandatory argument " + + ARG_ID); + } + } + + @Override + public String toString() { + final StringBuilder sb = + new StringBuilder(SliderActions.ACTION_LOOKUP); + if (id!=null) { + sb.append(" "); + sb.append(ARG_ID).append(" ").append(id); + } + if (outputFile != null) { + sb.append(" "); + sb.append(ARG_OUTPUT).append(" ").append(outputFile.getAbsolutePath()); + } + return sb.toString(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionNodesArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionNodesArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionNodesArgs.java new file mode 100644 index 0000000..ec38c80 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionNodesArgs.java @@ -0,0 +1,71 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +import java.io.File; + +@Parameters(commandNames = {SliderActions.ACTION_NODES}, + commandDescription = SliderActions.DESCRIBE_ACTION_NODES) +public class ActionNodesArgs extends AbstractActionArgs { + + /** + * Instance for API use; on CLI the name is derived from {@link #getClusterName()}. + */ + public String instance; + + @Override + public String getActionName() { + return SliderActions.ACTION_NODES; + } + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "Output file for the information") + public File outputFile; + + @Parameter(names = {ARG_LABEL}) + public String label = ""; + + @Parameter(names = {ARG_HEALTHY} ) + public boolean healthy; + + @Override + public int getMinParams() { + return 0; + } + + @Override + public int getMaxParams() { + return 1; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder( + "ActionNodesArgs{"); + sb.append("instance='").append(instance).append('\''); + sb.append(", outputFile=").append(outputFile); + sb.append(", label='").append(label).append('\''); + sb.append(", healthy=").append(healthy); + sb.append('}'); + return sb.toString(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java new file mode 100644 index 0000000..4833934 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java @@ -0,0 +1,81 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +@Parameters(commandNames = {SliderActions.ACTION_PACKAGE}, + commandDescription = SliderActions.DESCRIBE_ACTION_PACKAGE) + +public class ActionPackageArgs extends AbstractActionArgs { + + @Override + public String getActionName() { + return SliderActions.ACTION_PACKAGE; + } + + @Parameter(names = {ARG_INSTALL}, + description = "Install package in the sub-folder 'package' of the user's Slider base directory") + public boolean install; + + @Parameter(names = {ARG_PKGDELETE}, + description = "Delete package operation") + public boolean delete; + + @Parameter(names = {ARG_PKGLIST}, + description = "List of package(s) installed") + public boolean list; + + @Parameter(names = {ARG_PKGINSTANCES}, + description = "Lists all application instances referring to package") + public boolean instances; + + @Parameter(names = {ARG_PACKAGE}, + description = "Path to app package on local disk") + public String packageURI; + + @Parameter(names = {ARG_NAME}, + description = "Package name") + public String name; + + @Parameter(names = {ARG_VERSION}, description = "Package version") + public String version; + + @Parameter(names = {ARG_REPLACE_PKG}, + description = "Overwrite existing package") + public boolean replacePkg = false; + + @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT}, + description = "Output file for package data") + public String out; + + /** + * 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 1; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java new file mode 100644 index 0000000..da1b0e5 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.slider.common.SliderKeys; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.UsageException; +import org.apache.slider.core.registry.docstore.ConfigFormat; + +import static org.apache.slider.common.params.SliderActions.ACTION_REGISTRY; +import static org.apache.slider.common.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 = SliderKeys.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 application 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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResolveArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResolveArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResolveArgs.java new file mode 100644 index 0000000..2ee075a --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.commons.lang.StringUtils; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.UsageException; + +import java.io.File; + +import static org.apache.slider.common.params.SliderActions.ACTION_RESOLVE; +import static org.apache.slider.common.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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResourceArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResourceArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResourceArgs.java new file mode 100644 index 0000000..60fcc87 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionResourceArgs.java @@ -0,0 +1,68 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +@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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionStatusArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionStatusArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionStatusArgs.java new file mode 100644 index 0000000..00178df --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionStatusArgs.java @@ -0,0 +1,45 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +@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; + + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionThawArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionThawArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionThawArgs.java new file mode 100644 index 0000000..b43a14e --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionThawArgs.java @@ -0,0 +1,61 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameters; +import com.beust.jcommander.ParametersDelegate; + +import java.io.File; + +@Parameters(commandNames = {SliderActions.ACTION_THAW}, + commandDescription = SliderActions.DESCRIBE_ACTION_THAW) +public class ActionThawArgs extends AbstractActionArgs implements + WaitTimeAccessor, + LaunchArgsAccessor { + + + @Override + public String getActionName() { + return SliderActions.ACTION_THAW; + } + + @Override + public int getWaittime() { + return launchArgs.getWaittime(); + } + + @ParametersDelegate + LaunchArgsDelegate launchArgs = new LaunchArgsDelegate(); + + @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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionTokensArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionTokensArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionTokensArgs.java new file mode 100644 index 0000000..9f93c4e --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/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.slider.common.params; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java new file mode 100644 index 0000000..9d76bd8 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/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.slider.common.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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java new file mode 100644 index 0000000..6ef51b2 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.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.slider.common.params; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import com.beust.jcommander.ParametersDelegate; + +@Parameters(commandNames = { SliderActions.ACTION_UPGRADE }, + commandDescription = SliderActions.DESCRIBE_ACTION_UPGRADE) +public class ActionUpgradeArgs extends AbstractClusterBuildingActionArgs + implements WaitTimeAccessor, LaunchArgsAccessor { + + @Override + public String getActionName() { + return SliderActions.ACTION_UPGRADE; + } + + @ParametersDelegate + LaunchArgsDelegate launchArgs = new LaunchArgsDelegate(); + + @Override + public File getOutputFile() { + return launchArgs.getOutputFile(); + } + + @Override + public String getRmAddress() { + return launchArgs.getRmAddress(); + } + + @Override + public int getWaittime() { + return launchArgs.getWaittime(); + } + + @Override + public void setWaittime(int waittime) { + launchArgs.setWaittime(waittime); + } + + @Parameter(names={ARG_CONTAINERS}, variableArity = true, + description = "stop specific containers") + public List<String> containers = new ArrayList<>(0); + + @Parameter(names={ARG_COMPONENTS}, variableArity = true, + description = "stop all containers of specific components") + public List<String> components = new ArrayList<>(0); + + @Parameter(names = {ARG_FORCE}, + description = "force spec upgrade operation") + public boolean force; +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java new file mode 100644 index 0000000..b9d212b --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java @@ -0,0 +1,46 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameters; + +/** + * The version command + */ +@Parameters(commandNames = {SliderActions.ACTION_VERSION}, + commandDescription = SliderActions.DESCRIBE_ACTION_VERSION) +public class ActionVersionArgs extends AbstractActionArgs { + @Override + public String getActionName() { + return SliderActions.ACTION_VERSION; + } + + public int getMinParams() { + return 0; + } + + /** + * This action does not need hadoop services + * @return false + */ + @Override + public boolean getHadoopServicesRequired() { + return false; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AddonArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AddonArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AddonArgsDelegate.java new file mode 100644 index 0000000..3ef8e19 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AddonArgsDelegate.java @@ -0,0 +1,54 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class AddonArgsDelegate extends AbstractArgsDelegate { + + /** + * This is a listing of addon packages + */ + @Parameter(names = {ARG_ADDON}, + arity = 2, + description = "--addon <name> <folder or package>", + splitter = DontSplitArguments.class) + public List<String> addonTuples = new ArrayList<>(0); + + + /** + * Get the list of addons (may be empty, but never null) + * + * @return map of named addons + * + * @throws BadCommandArgumentsException parse problem + */ + public Map<String, String> getAddonMap() throws BadCommandArgumentsException { + return convertTupleListToMap("addon", addonTuples); + } + + public List<String> getAddonTuples() { + return addonTuples; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AppAndResouceOptionArgsDelegate.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AppAndResouceOptionArgsDelegate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AppAndResouceOptionArgsDelegate.java new file mode 100644 index 0000000..f171708 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/AppAndResouceOptionArgsDelegate.java @@ -0,0 +1,111 @@ +/* + * 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.slider.common.params; + +import com.beust.jcommander.Parameter; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Delegate for application and resource options + */ +public class AppAndResouceOptionArgsDelegate 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, ARG_ROLEOPT}, arity = 3, + description = "Component option " + ARG_COMP_OPT + + " <component> <name> <option>", + splitter = DontSplitArguments.class) + public List<String> compOptTriples = new ArrayList<>(0); + + /** + * Resource Options + */ + @Parameter(names = {ARG_RESOURCE_OPT, ARG_RESOURCE_OPT_SHORT}, arity = 2, + description = "Resource option "+ ARG_RESOURCE_OPT + "<name> <value>", + splitter = DontSplitArguments.class) + public List<String> resOptionTuples = new ArrayList<>(0); + + + /** + * All the resource component option triples + */ + @Parameter(names = {ARG_RES_COMP_OPT, ARG_RES_COMP_OPT_SHORT,}, arity = 3, + description = "Component resource option " + ARG_RES_COMP_OPT + + " <component> <name> <option>", + splitter = DontSplitArguments.class) + public List<String> resCompOptTriples = 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); + } + + public Map<String, String> getResourceOptionsMap() throws + BadCommandArgumentsException { + return convertTupleListToMap(ARG_RESOURCE_OPT, resOptionTuples); + } + + /** + * 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>> getResourceCompOptionMap() throws + BadCommandArgumentsException { + return convertTripleListToMaps(ARG_RES_COMP_OPT, resCompOptTriples); + } + + public void setOption(String key, String value) { + optionTuples.add(key); + optionTuples.add(value); + } + + public void setResourceOption(String key, String value) { + resOptionTuples.add(key); + resOptionTuples.add(value); + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ArgOps.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ArgOps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ArgOps.java new file mode 100644 index 0000000..12a2032 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ArgOps.java @@ -0,0 +1,157 @@ +/* + * 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.slider.common.params; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.ErrorStrings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URI; +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/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/Arguments.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/Arguments.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/Arguments.java new file mode 100644 index 0000000..aec4e26 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/Arguments.java @@ -0,0 +1,162 @@ +/* + * 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.slider.common.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_ADDON = "--addon"; + String ARG_ALL = "--all"; + String ARG_ALIAS = "--alias"; + String ARG_APPLICATION = "--application"; + String ARG_APPDEF = "--appdef"; + String ARG_APP_HOME = "--apphome"; + String ARG_BASE_PATH = "--basepath"; + String ARG_CLIENT = "--client"; + String ARG_CONFDIR = "--appconf"; + 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_CREDENTIALS = "--credentials"; + String ARG_DEBUG = "--debug"; + String ARG_DEFINE = "-D"; + String ARG_DELETE = "--delete"; + String ARG_DEST = "--dest"; + String ARG_DESTDIR = "--destdir"; + String ARG_DESTFILE = "--destfile"; + String ARG_EXITCODE = "--exitcode"; + String ARG_FAIL = "--fail"; + /** + filesystem-uri: {@value} + */ + String ARG_FILESYSTEM = "--fs"; + String ARG_FILESYSTEM_LONG = "--filesystem"; + String ARG_FOLDER = "--folder"; + String ARG_FORCE = "--force"; + String ARG_FORMAT = "--format"; + String ARG_GETCERTSTORE = "--getcertstore"; + String ARG_GETCONF = "--getconf"; + String ARG_GETEXP = "--getexp"; + String ARG_GETFILES = "--getfiles"; + String ARG_HEALTHY= "--healthy"; + String ARG_HELP = "--help"; + String ARG_HOSTNAME = "--hostname"; + String ARG_ID = "--id"; + String ARG_IMAGE = "--image"; + String ARG_INSTALL = "--install"; + String ARG_INTERNAL = "--internal"; + String ARG_KEYLEN = "--keylen"; + String ARG_KEYTAB = "--keytab"; + String ARG_KEYSTORE = "--keystore"; + String ARG_KEYTABINSTALL = ARG_INSTALL; + String ARG_KEYTABDELETE = ARG_DELETE; + String ARG_KEYTABLIST = "--list"; + String ARG_LABEL = "--label"; + String ARG_LEVEL = "--level"; + 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_METAINFO = "--metainfo"; + String ARG_METAINFO_JSON = "--metainfojson"; + 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_PASSWORD = "--password"; + String ARG_PATH = "--path"; + String ARG_PKGDELETE = ARG_DELETE; + String ARG_PKGINSTANCES = "--instances"; + String ARG_PKGLIST = ARG_LIST; + String ARG_PRINCIPAL = "--principal"; + String ARG_PROVIDER = "--provider"; + String ARG_QUEUE = "--queue"; + String ARG_REPLACE_PKG = "--replacepkg"; + String ARG_RESOURCE = "--resource"; + String ARG_RESOURCES = "--resources"; + String ARG_RES_COMP_OPT = "--rescompopt"; + String ARG_RES_COMP_OPT_SHORT = "--rco"; + String ARG_RESOURCE_MANAGER = "--rm"; + String ARG_RESOURCE_OPT = "--resopt"; + String ARG_RESOURCE_OPT_SHORT = "-ro"; + String ARG_SECURE = "--secure"; + String ARG_SERVICETYPE = "--servicetype"; + String ARG_SERVICES = "--services"; + String ARG_SLIDER = "--slider"; + String ARG_SOURCE = "--source"; + String ARG_STATE = "--state"; + String ARG_SYSPROP = "-S"; + String ARG_TEMPLATE = "--template"; + String ARG_TRUSTSTORE = "--truststore"; + String ARG_USER = "--user"; + String ARG_UPLOAD = "--upload"; + String ARG_VERBOSE = "--verbose"; + String ARG_VERSION = "--version"; + String ARG_WAIT = "--wait"; + String ARG_YARN = "--yarn"; + String ARG_ZKHOSTS = "--zkhosts"; + String ARG_ZKPATH = "--zkpath"; + String ARG_ZKPORT = "--zkport"; +/* + STOP: DO NOT ADD YOUR ARGUMENTS HERE. GO BACK AND INSERT THEM IN THE + RIGHT PLACE IN THE LIST + */ + + + /** + * Deprecated: use ARG_COMPONENT + */ + @Deprecated + String ARG_ROLE = "--role"; + + /** + * Deprecated: use ARG_COMP_OPT + */ + @Deprecated + String ARG_ROLEOPT = "--roleopt"; + + /** + * server: URI for the cluster + */ + String ARG_CLUSTER_URI = "-cluster-uri"; + + + /** + * server: Path for the resource manager instance (required) + */ + String ARG_RM_ADDR = "--rm"; + + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java new file mode 100644 index 0000000..4016cc9 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java @@ -0,0 +1,385 @@ +/* + * 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.slider.common.params; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.slider.common.SliderXmlConfKeys; +import org.apache.slider.common.tools.SliderUtils; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.ErrorStrings; +import org.apache.slider.core.exceptions.SliderException; + +import java.util.Collection; + +/** + * Slider Client CLI Args + */ + +public class ClientArgs extends CommonArgs { + + /* + + All the arguments for specific actions + + */ + /** + * This is not bonded to jcommander, it is set up + * after the construction to point to the relevant + * entry + * + * KEEP IN ALPHABETICAL ORDER + */ + private AbstractClusterBuildingActionArgs buildingActionArgs; + + // ========================================================= + // Keep all of these in alphabetical order. Thanks. + // ========================================================= + + private final ActionAMSuicideArgs actionAMSuicideArgs = new ActionAMSuicideArgs(); + 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 ActionDiagnosticArgs actionDiagnosticArgs = new ActionDiagnosticArgs(); + 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 ActionInstallPackageArgs actionInstallPackageArgs = new ActionInstallPackageArgs(); + private final ActionInstallKeytabArgs actionInstallKeytabArgs = new ActionInstallKeytabArgs(); + private final ActionKDiagArgs actionKDiagArgs = new ActionKDiagArgs(); + private final ActionKeytabArgs actionKeytabArgs = new ActionKeytabArgs(); + private final ActionKillContainerArgs actionKillContainerArgs = + new ActionKillContainerArgs(); + private final ActionListArgs actionListArgs = new ActionListArgs(); + private final ActionLookupArgs actionLookupArgs = new ActionLookupArgs(); + private final ActionNodesArgs actionNodesArgs = new ActionNodesArgs(); + private final ActionPackageArgs actionPackageArgs = new ActionPackageArgs(); + 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(); + private final ActionUpgradeArgs actionUpgradeArgs = new ActionUpgradeArgs(); + private final ActionVersionArgs actionVersionArgs = new ActionVersionArgs(); + + public ClientArgs(String[] args) { + super(args); + } + + public ClientArgs(Collection args) { + super(args); + } + + @Override + protected void addActionArguments() { + + addActions( + actionAMSuicideArgs, + actionBuildArgs, + actionClientArgs, + actionCreateArgs, + actionDependencyArgs, + actionDestroyArgs, + actionDiagnosticArgs, + actionExistsArgs, + actionFlexArgs, + actionFreezeArgs, + actionHelpArgs, + actionInstallKeytabArgs, + actionInstallPackageArgs, + actionKDiagArgs, + actionKeytabArgs, + actionKillContainerArgs, + actionListArgs, + actionLookupArgs, + actionNodesArgs, + actionPackageArgs, + actionRegistryArgs, + actionResolveArgs, + actionResourceArgs, + actionStatusArgs, + actionThawArgs, + actionTokenArgs, + actionUpdateArgs, + actionUpgradeArgs, + actionVersionArgs + ); + } + + @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(SliderXmlConfKeys.KEY_SLIDER_BASE_PATH, + getBasePath().toString()); + } + } + + public ActionDiagnosticArgs getActionDiagnosticArgs() { + return actionDiagnosticArgs; + } + + public AbstractClusterBuildingActionArgs getBuildingActionArgs() { + return buildingActionArgs; + } + + public ActionAMSuicideArgs getActionAMSuicideArgs() { + return actionAMSuicideArgs; + } + + public ActionBuildArgs getActionBuildArgs() { + return actionBuildArgs; + } + + public ActionInstallPackageArgs getActionInstallPackageArgs() { return actionInstallPackageArgs; } + + public ActionClientArgs getActionClientArgs() { return actionClientArgs; } + + public ActionPackageArgs getActionPackageArgs() { return actionPackageArgs; } + + public ActionInstallKeytabArgs getActionInstallKeytabArgs() { return actionInstallKeytabArgs; } + + public ActionKDiagArgs getActionKDiagArgs() { + return actionKDiagArgs; + } + + public ActionKeytabArgs getActionKeytabArgs() { return actionKeytabArgs; } + + public ActionUpdateArgs getActionUpdateArgs() { + return actionUpdateArgs; + } + + public ActionUpgradeArgs getActionUpgradeArgs() { + return actionUpgradeArgs; + } + + 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 ActionKillContainerArgs getActionKillContainerArgs() { + return actionKillContainerArgs; + } + + public ActionListArgs getActionListArgs() { + return actionListArgs; + } + + public ActionNodesArgs getActionNodesArgs() { + return actionNodesArgs; + } + + public ActionLookupArgs getActionLookupArgs() { + return actionLookupArgs; + } + + 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); + //its a builder, so set those actions too + buildingActionArgs = actionBuildArgs; + break; + + case ACTION_CREATE: + bindCoreAction(actionCreateArgs); + //its a builder, so set those actions too + buildingActionArgs = actionCreateArgs; + break; + + case ACTION_FREEZE: + bindCoreAction(actionFreezeArgs); + break; + + case ACTION_THAW: + bindCoreAction(actionThawArgs); + break; + + case ACTION_AM_SUICIDE: + bindCoreAction(actionAMSuicideArgs); + break; + + case ACTION_CLIENT: + bindCoreAction(actionClientArgs); + break; + + case ACTION_DEPENDENCY: + bindCoreAction(actionDependencyArgs); + break; + + case ACTION_DESTROY: + bindCoreAction(actionDestroyArgs); + break; + + case ACTION_DIAGNOSTICS: + bindCoreAction(actionDiagnosticArgs); + break; + + case ACTION_EXISTS: + bindCoreAction(actionExistsArgs); + break; + + case ACTION_FLEX: + bindCoreAction(actionFlexArgs); + break; + + case ACTION_HELP: + bindCoreAction(actionHelpArgs); + break; + + case ACTION_INSTALL_KEYTAB: + bindCoreAction(actionInstallKeytabArgs); + break; + + case ACTION_INSTALL_PACKAGE: + bindCoreAction(actionInstallPackageArgs); + break; + + case ACTION_KDIAG: + bindCoreAction(actionKDiagArgs); + break; + + case ACTION_KEYTAB: + bindCoreAction(actionKeytabArgs); + break; + + case ACTION_KILL_CONTAINER: + bindCoreAction(actionKillContainerArgs); + break; + + case ACTION_LIST: + bindCoreAction(actionListArgs); + break; + + case ACTION_LOOKUP: + bindCoreAction(actionLookupArgs); + break; + + case ACTION_NODES: + bindCoreAction(actionNodesArgs); + break; + + case ACTION_PACKAGE: + bindCoreAction(actionPackageArgs); + 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; + + case ACTION_UPGRADE: + bindCoreAction(actionUpgradeArgs); + break; + + case ACTION_VERSION: + bindCoreAction(actionVersionArgs); + break; + + default: + throw new BadCommandArgumentsException(ErrorStrings.ERROR_UNKNOWN_ACTION + + " " + action); + } + } + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/31c4a419/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java new file mode 100644 index 0000000..162a87d --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java @@ -0,0 +1,303 @@ +/* + * 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.slider.common.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.slider.common.tools.SliderUtils; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.ErrorStrings; +import org.apache.slider.core.exceptions.SliderException; +import org.apache.slider.core.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: slider 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: slider ").append(commandOfInterest); + helperMessage.append(serviceArgs.coreAction.getMinParams() > 0 ? " <application>" : ""); + 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(getArgs()); + } catch (ParameterException e) { + throw new BadCommandArgumentsException(e, "%s in %s", + e.toString(), + (getArgs() != null + ? (SliderUtils.join(getArgs(), + " ", 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); + } + + /** + * Get the core action -type depends on the action + * @return the action class + */ + public AbstractActionArgs getCoreAction() { + return coreAction; + } + + /** + * 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) { + StringBuilder badArgMsgBuilder = new StringBuilder(); + badArgMsgBuilder.append(e.toString()).append("\n"); + badArgMsgBuilder.append(usage(this, coreAction.getActionName())); + throw new BadCommandArgumentsException(badArgMsgBuilder.toString()); + } catch (UsageException e) { + StringBuilder badArgMsgBuilder = new StringBuilder(); + badArgMsgBuilder.append(e.toString()).append("\n"); + badArgMsgBuilder.append(usage(this, coreAction.getActionName())); + throw new UsageException(badArgMsgBuilder.toString()); + } + } + + /** + * 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(); + } + + public List<String> getActionArgs() { + return coreAction.parameters; + } + + public String[] getArgs() { + return args; + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org