From 99934591f07be5bc8abc1955848e4fc291b8569b Mon Sep 17 00:00:00 2001 From: Fei Wang Date: Fri, 15 Jul 2022 10:47:49 +0800 Subject: [PATCH] [KYUUBI #3045][FOLLOWUP] Correct the common options and add docs for kyuubi-admin command ### _Why are the changes needed?_ 1. The version options should be in zkOptions. 2. Add docs for kyuubi-adminctl. ### _How was this patch tested?_ - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible - [x] Add screenshots for manual tests if appropriate ![image](https://user-images.githubusercontent.com/6757692/178946106-a5342952-d607-4229-bc7f-a9049d26289d.png) - [ ] [Run test](https://kyuubi.apache.org/docs/latest/develop_tools/testing.html#running-tests) locally before make a pull request Closes #3066 from turboFei/admin_ctl_docs. Closes #3045 983d133f [Fei Wang] comments 65675ad7 [Fei Wang] add more b5b772d5 [Fei Wang] comments 222b409c [Fei Wang] add docs 20c50c00 [Fei Wang] kyuubi-adminctl -> kyuubi-admin 078044e0 [Fei Wang] refactor 4e89b52d [Fei Wang] remove unused c2d1dc70 [Fei Wang] add admin ctl docs Authored-by: Fei Wang Signed-off-by: Fei Wang --- bin/{kyuubi-adminctl => kyuubi-admin} | 0 docs/tools/index.rst | 3 +- docs/tools/kyuubi-admin.rst | 71 +++++++++++++++++++ .../org/apache/kyuubi/ctl/CliConfig.scala | 4 +- .../org/apache/kyuubi/ctl/CommandLine.scala | 12 ++-- .../kyuubi/ctl/ControlCliArguments.scala | 4 +- .../org/apache/kyuubi/ctl/cmd/Command.scala | 4 +- .../org/apache/kyuubi/ctl/util/CtlUtils.scala | 2 +- .../ctl/AdminControlCliArgumentsSuite.scala | 3 +- .../kyuubi/ctl/ControlCliArgumentsSuite.scala | 10 +-- 10 files changed, 92 insertions(+), 21 deletions(-) rename bin/{kyuubi-adminctl => kyuubi-admin} (100%) create mode 100644 docs/tools/kyuubi-admin.rst diff --git a/bin/kyuubi-adminctl b/bin/kyuubi-admin similarity index 100% rename from bin/kyuubi-adminctl rename to bin/kyuubi-admin diff --git a/docs/tools/index.rst b/docs/tools/index.rst index 81e27c06c..079e8617b 100644 --- a/docs/tools/index.rst +++ b/docs/tools/index.rst @@ -23,4 +23,5 @@ Tools :maxdepth: 2 spark_block_cleaner - kyuubi-ctl \ No newline at end of file + kyuubi-ctl + kyuubi-admin \ No newline at end of file diff --git a/docs/tools/kyuubi-admin.rst b/docs/tools/kyuubi-admin.rst new file mode 100644 index 000000000..f822303f9 --- /dev/null +++ b/docs/tools/kyuubi-admin.rst @@ -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. + +Kyuubi Administer Tool +======================= + +.. versionadded:: 1.6.0 + +Kyuubi administer tool(kyuubi-admin) provides administrators with some maintenance operations against a kyuubi server or cluster. + +.. _installation: + +Installation +------------------------------------- +To install kyuubi-admin, you need to unpack the tarball. For example, + +.. parsed-literal:: + + tar zxf apache-kyuubi-\ |release|\ -bin.tgz + +This will result in the creation of a subdirectory named apache-kyuubi-|release|-bin shown below, + +.. parsed-literal:: + + apache-kyuubi-\ |release|\ -bin + ├── ... + ├── bin + | ├── kyuubi-admin + │ ├── ... + ├── ... + + +.. _usage: + +Usage +------------------------------------- +.. code-block:: bash + + bin/kyuubi-admin --help + + + +.. _refresh_config: + +Refresh config +------------------------------------- + +Refresh the config with specified type. + +Usage: ``bin/kyuubi-admin refresh config [options] []`` + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - Config Type + - Description + * - hadoopConf + - The hadoop conf used for proxy user verification. diff --git a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CliConfig.scala b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CliConfig.scala index 873a4b1a1..f2f4aab51 100644 --- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CliConfig.scala +++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CliConfig.scala @@ -42,7 +42,6 @@ case class CliConfig( conf: Map[String, String] = Map.empty) case class CommonOpts( - version: String = null, verbose: Boolean = false, hostUrl: String = null, authSchema: String = null, @@ -54,7 +53,8 @@ case class ZookeeperOpts( zkQuorum: String = null, namespace: String = null, host: String = null, - port: String = null) + port: String = null, + version: String = null) case class CreateOpts(filename: String = null) diff --git a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CommandLine.scala b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CommandLine.scala index 351e0d28a..56c381848 100644 --- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CommandLine.scala +++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/CommandLine.scala @@ -50,7 +50,7 @@ object CommandLine { def getAdminCtlOptionParser(builder: OParserBuilder[CliConfig]): OParser[Unit, CliConfig] = { import builder._ OParser.sequence( - programName("kyuubi-adminctl"), + programName("kyuubi-admin"), head("kyuubi", KYUUBI_VERSION), common(builder), refresh(builder), @@ -68,10 +68,6 @@ object CommandLine { private def common(builder: OParserBuilder[CliConfig]): OParser[_, CliConfig] = { import builder._ OParser.sequence( - opt[String]('v', "version") - .action((v, c) => c.copy(commonOpts = c.commonOpts.copy(version = v))) - .text("Using the compiled KYUUBI_VERSION default," + - " change it if the active service is running in another."), opt[Unit]('b', "verbose") .action((_, c) => c.copy(commonOpts = c.commonOpts.copy(verbose = true))) .text("Print additional debug output."), @@ -115,7 +111,11 @@ object CommandLine { .text("Hostname or IP address of a service."), opt[String]('p', "port") .action((v, c) => c.copy(zkOpts = c.zkOpts.copy(port = v))) - .text("Listening port of a service.")) + .text("Listening port of a service."), + opt[String]('v', "version") + .action((v, c) => c.copy(zkOpts = c.zkOpts.copy(version = v))) + .text("Using the compiled KYUUBI_VERSION default," + + " change it if the active service is running in another.")) } private def create(builder: OParserBuilder[CliConfig]): OParser[_, CliConfig] = { diff --git a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ControlCliArguments.scala b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ControlCliArguments.scala index 6254ba900..0d64ef3eb 100644 --- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ControlCliArguments.scala +++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ControlCliArguments.scala @@ -122,7 +122,7 @@ class ControlCliArguments(args: Seq[String], env: Map[String, String] = sys.env) | namespace ${cliConfig.zkOpts.namespace} | host ${cliConfig.zkOpts.host} | port ${cliConfig.zkOpts.port} - | version ${cliConfig.commonOpts.version} + | version ${cliConfig.zkOpts.version} | verbose ${cliConfig.commonOpts.verbose} """.stripMargin case ControlObject.ENGINE => @@ -134,7 +134,7 @@ class ControlCliArguments(args: Seq[String], env: Map[String, String] = sys.env) | user ${cliConfig.engineOpts.user} | host ${cliConfig.zkOpts.host} | port ${cliConfig.zkOpts.port} - | version ${cliConfig.commonOpts.version} + | version ${cliConfig.zkOpts.version} | verbose ${cliConfig.commonOpts.verbose} """.stripMargin case _ => "" diff --git a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/cmd/Command.scala b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/cmd/Command.scala index f0cdf71e0..6dd88e5e7 100644 --- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/cmd/Command.scala +++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/cmd/Command.scala @@ -74,11 +74,11 @@ abstract class Command[T](cliConfig: CliConfig) extends Logging { } } - if (arguments.commonOpts.version == null) { + if (arguments.zkOpts.version == null) { if (verbose) { super.info(s"version is not specified, use built-in KYUUBI_VERSION:$KYUUBI_VERSION") } - arguments = arguments.copy(commonOpts = arguments.commonOpts.copy(version = KYUUBI_VERSION)) + arguments = arguments.copy(zkOpts = arguments.zkOpts.copy(version = KYUUBI_VERSION)) } arguments } diff --git a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/util/CtlUtils.scala b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/util/CtlUtils.scala index dde3c4038..305447993 100644 --- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/util/CtlUtils.scala +++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/util/CtlUtils.scala @@ -49,7 +49,7 @@ object CtlUtils { // org.apache.kyuubi.engine.EngineRef#engineSpace DiscoveryPaths.makePath( s"${cliConfig.zkOpts.namespace}_" + - s"${cliConfig.commonOpts.version}_" + + s"${cliConfig.zkOpts.version}_" + s"${engineShareLevel}_${engineType}", cliConfig.engineOpts.user, Array(engineSubdomain)) diff --git a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/AdminControlCliArgumentsSuite.scala b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/AdminControlCliArgumentsSuite.scala index 4cf68d226..48f2d6854 100644 --- a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/AdminControlCliArgumentsSuite.scala +++ b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/AdminControlCliArgumentsSuite.scala @@ -75,9 +75,8 @@ class AdminControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExi // scalastyle:off val helpString = s"""kyuubi $KYUUBI_VERSION - |Usage: kyuubi-adminctl [refresh] [options] + |Usage: kyuubi-admin [refresh] [options] | - | -v, --version Using the compiled KYUUBI_VERSION default, change it if the active service is running in another. | -b, --verbose Print additional debug output. | --hostUrl Host url for rest api. | --authSchema Auth schema for rest api, valid values are basic, spnego. diff --git a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ControlCliArgumentsSuite.scala b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ControlCliArgumentsSuite.scala index 6241584e9..037f26aa1 100644 --- a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ControlCliArgumentsSuite.scala +++ b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ControlCliArgumentsSuite.scala @@ -82,7 +82,7 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { assert(opArgs.cliConfig.zkOpts.namespace == namespace) assert(opArgs.cliConfig.zkOpts.host == host) assert(opArgs.cliConfig.zkOpts.port == port) - assert(opArgs.cliConfig.commonOpts.version == KYUUBI_VERSION) + assert(opArgs.cliConfig.zkOpts.version == KYUUBI_VERSION) if (service == "engine") { assert(opArgs.cliConfig.engineOpts.user == user) } @@ -113,7 +113,7 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { assert(opArgs.cliConfig.zkOpts.namespace == newNamespace) assert(opArgs.cliConfig.zkOpts.host == host) assert(opArgs.cliConfig.zkOpts.port == port) - assert(opArgs.cliConfig.commonOpts.version == KYUUBI_VERSION) + assert(opArgs.cliConfig.zkOpts.version == KYUUBI_VERSION) } } @@ -296,7 +296,7 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { zkQuorum) val opArgs = new ControlCliArguments(args) assert(opArgs.cliConfig.zkOpts.namespace == namespace) - assert(opArgs.cliConfig.commonOpts.version == KYUUBI_VERSION) + assert(opArgs.cliConfig.zkOpts.version == KYUUBI_VERSION) } test("test use short options") { @@ -328,7 +328,7 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { assert(opArgs.cliConfig.zkOpts.namespace == namespace) assert(opArgs.cliConfig.zkOpts.host == host) assert(opArgs.cliConfig.zkOpts.port == port) - assert(opArgs.cliConfig.commonOpts.version == KYUUBI_VERSION) + assert(opArgs.cliConfig.zkOpts.version == KYUUBI_VERSION) if (service == "engine") { assert(opArgs.cliConfig.engineOpts.user == user) } @@ -357,7 +357,6 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { s"""kyuubi $KYUUBI_VERSION |Usage: kyuubi-ctl [create|get|delete|list|log|submit] [options] | - | -v, --version $versionHelpString | -b, --verbose Print additional debug output. | --hostUrl Host url for rest api. | --authSchema Auth schema for rest api, valid values are basic, spnego. @@ -370,6 +369,7 @@ class ControlCliArgumentsSuite extends KyuubiFunSuite with TestPrematureExit { | -n, --namespace The namespace, using kyuubi-defaults/conf if absent. | -s, --host Hostname or IP address of a service. | -p, --port Listening port of a service. + | -v, --version $versionHelpString | |Command: create [batch|server] [options] |${"\t"}Create a resource.