[ 
https://issues.apache.org/jira/browse/KNOX-3002?focusedWorklogId=901874&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-901874
 ]

ASF GitHub Bot logged work on KNOX-3002:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 26/Jan/24 08:10
            Start Date: 26/Jan/24 08:10
    Worklog Time Spent: 10m 
      Work Description: smolnar82 commented on code in PR #835:
URL: https://github.com/apache/knox/pull/835#discussion_r1467326277


##########
gateway-server/src/test/java/org/apache/knox/gateway/util/DescriptorGeneratorTest.java:
##########
@@ -0,0 +1,55 @@
+package org.apache.knox.gateway.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.List;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.knox.gateway.model.DescriptorConfiguration;
+import org.apache.knox.gateway.model.Topology;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class DescriptorGeneratorTest {
+  private static final ObjectMapper mapper = new ObjectMapper();
+  private static final String TEST_DESC_1 = "test_desc1.json";
+  private static final String TEST_PROV_1 = "test_prov1.json";
+  private static final String IMPALA_UI = "IMPALAUI";
+  private static final List<String> URLS =
+          Arrays.asList("http://amagyar-1.test.site:25000/";, 
"http://amagyar-2.test.site:25000";);
+  @Rule
+  public TemporaryFolder folder= new TemporaryFolder();

Review Comment:
   Instead of making this a temporary file, we could create a static file in 
`src/test/resources` and have the code read that file. Since this is not a 
dynamic one, I think it would make more sense and we would avoid creating a 
temporary folder every time this test is running (the read I/O operation is 
unavoidable, but creation can be).



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java:
##########
@@ -2392,6 +2413,55 @@ public String getUsage() {
 
   }
 
+  public class GenerateDescriptorCommand extends Command {
+
+    public static final String USAGE =
+            "generate-descriptor --service-urls-file \"path/to/urls.txt\" 
--service-name SERVICE_NAME \n" +
+                    "--provider-name my-provider.json --descriptor-name 
my-descriptor.json \n" +
+                    "[--output-dir /path/to/output_dir] \n" +
+                    "[--force] \n";
+    public static final String DESC =
+            "Create Knox topology descriptor file for one service\n"
+                    + "Options are as follows: \n"
+                    + "--service-urls-file (required) path to a text file 
containing service urls \n"
+                    + "--service-name (required) the name of the service, such 
as WEBHDFS, IMPALAUI or HIVE \n"
+                    + "--descriptor-name (required) name of descriptor to be 
created \n"
+                    + "--provider-name (required) name of the referenced 
shared provider \n"
+                    + "--output-dir (optional) output directory to save the 
descriptor file \n"
+                    + "--force (optional) force rewriting of existing files, 
if not used, command will fail when the configs files with same name already 
exist. \n";
+
+    @Override
+    public void execute() throws Exception {
+      if (StringUtils.isBlank(FilenameUtils.getExtension(providerName))
+              || 
StringUtils.isBlank(FilenameUtils.getExtension(descriptorName))) {
+        throw new IllegalArgumentException("JSON extension is required for 
provider and descriptor file names");
+      }
+      if (StringUtils.isBlank(urlsFilePath) ) {
+        throw new IllegalArgumentException("Missing --service-urls-file");
+      }
+      if (!new File(urlsFilePath).isFile()) {
+        throw new IllegalArgumentException(urlsFilePath + " does not exist");
+      }
+      if (StringUtils.isBlank(serviceName)) {
+        throw new IllegalArgumentException("Missing --service-name");
+      }

Review Comment:
   All of these verifications could be extracted to a private method for a 
better reading experience.



##########
gateway-server/src/test/java/org/apache/knox/gateway/util/DescriptorGeneratorTest.java:
##########
@@ -0,0 +1,55 @@
+package org.apache.knox.gateway.util;

Review Comment:
   Missing header? The build should fail anyway...



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/DescriptorGenerator.java:
##########
@@ -0,0 +1,53 @@
+package org.apache.knox.gateway.util;

Review Comment:
   Missing header? The build should fail anyway...



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceUrls.java:
##########
@@ -0,0 +1,36 @@
+package org.apache.knox.gateway.util;

Review Comment:
   Missing header? The build should fail anyway...



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java:
##########
@@ -2392,6 +2413,55 @@ public String getUsage() {
 
   }
 
+  public class GenerateDescriptorCommand extends Command {
+
+    public static final String USAGE =
+            "generate-descriptor --service-urls-file \"path/to/urls.txt\" 
--service-name SERVICE_NAME \n" +
+                    "--provider-name my-provider.json --descriptor-name 
my-descriptor.json \n" +
+                    "[--output-dir /path/to/output_dir] \n" +
+                    "[--force] \n";
+    public static final String DESC =
+            "Create Knox topology descriptor file for one service\n"
+                    + "Options are as follows: \n"
+                    + "--service-urls-file (required) path to a text file 
containing service urls \n"
+                    + "--service-name (required) the name of the service, such 
as WEBHDFS, IMPALAUI or HIVE \n"
+                    + "--descriptor-name (required) name of descriptor to be 
created \n"
+                    + "--provider-name (required) name of the referenced 
shared provider \n"
+                    + "--output-dir (optional) output directory to save the 
descriptor file \n"

Review Comment:
   This is an option field. The default value is missing from the description.



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceUrls.java:
##########
@@ -0,0 +1,36 @@
+package org.apache.knox.gateway.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+public class ServiceUrls {
+  private final List<String> urls;
+
+  public static ServiceUrls fromFile(File urlsFilePath) {

Review Comment:
   Maybe another static method that takes a `String` of `urlsFilePath` and 
calls the existing one as you do in KnoxCLI?
   ```
   public static ServiceUrls fromFile(String urlsFilePath) {
       return fromFile(new File(urlsFilePath));
   }
   ```



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java:
##########
@@ -2392,6 +2413,55 @@ public String getUsage() {
 
   }
 
+  public class GenerateDescriptorCommand extends Command {
+
+    public static final String USAGE =
+            "generate-descriptor --service-urls-file \"path/to/urls.txt\" 
--service-name SERVICE_NAME \n" +
+                    "--provider-name my-provider.json --descriptor-name 
my-descriptor.json \n" +
+                    "[--output-dir /path/to/output_dir] \n" +
+                    "[--force] \n";
+    public static final String DESC =
+            "Create Knox topology descriptor file for one service\n"
+                    + "Options are as follows: \n"
+                    + "--service-urls-file (required) path to a text file 
containing service urls \n"
+                    + "--service-name (required) the name of the service, such 
as WEBHDFS, IMPALAUI or HIVE \n"
+                    + "--descriptor-name (required) name of descriptor to be 
created \n"
+                    + "--provider-name (required) name of the referenced 
shared provider \n"
+                    + "--output-dir (optional) output directory to save the 
descriptor file \n"
+                    + "--force (optional) force rewriting of existing files, 
if not used, command will fail when the configs files with same name already 
exist. \n";
+
+    @Override
+    public void execute() throws Exception {
+      if (StringUtils.isBlank(FilenameUtils.getExtension(providerName))
+              || 
StringUtils.isBlank(FilenameUtils.getExtension(descriptorName))) {
+        throw new IllegalArgumentException("JSON extension is required for 
provider and descriptor file names");
+      }
+      if (StringUtils.isBlank(urlsFilePath) ) {
+        throw new IllegalArgumentException("Missing --service-urls-file");
+      }
+      if (!new File(urlsFilePath).isFile()) {
+        throw new IllegalArgumentException(urlsFilePath + " does not exist");
+      }
+      if (StringUtils.isBlank(serviceName)) {
+        throw new IllegalArgumentException("Missing --service-name");
+      }
+      File outputDir = StringUtils.isBlank(KnoxCLI.this.outputDir) ? new 
File(".") : new File(KnoxCLI.this.outputDir);

Review Comment:
   Do we really need `KnoxCLI` in `KnoxCLI.this.outputDir`?  I think 
`this.outputDir` (or even `outputDir` only) should be enough.



##########
gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java:
##########
@@ -2392,6 +2413,55 @@ public String getUsage() {
 
   }
 
+  public class GenerateDescriptorCommand extends Command {
+
+    public static final String USAGE =
+            "generate-descriptor --service-urls-file \"path/to/urls.txt\" 
--service-name SERVICE_NAME \n" +
+                    "--provider-name my-provider.json --descriptor-name 
my-descriptor.json \n" +
+                    "[--output-dir /path/to/output_dir] \n" +
+                    "[--force] \n";
+    public static final String DESC =
+            "Create Knox topology descriptor file for one service\n"
+                    + "Options are as follows: \n"
+                    + "--service-urls-file (required) path to a text file 
containing service urls \n"
+                    + "--service-name (required) the name of the service, such 
as WEBHDFS, IMPALAUI or HIVE \n"
+                    + "--descriptor-name (required) name of descriptor to be 
created \n"
+                    + "--provider-name (required) name of the referenced 
shared provider \n"
+                    + "--output-dir (optional) output directory to save the 
descriptor file \n"
+                    + "--force (optional) force rewriting of existing files, 
if not used, command will fail when the configs files with same name already 
exist. \n";
+
+    @Override
+    public void execute() throws Exception {
+      if (StringUtils.isBlank(FilenameUtils.getExtension(providerName))
+              || 
StringUtils.isBlank(FilenameUtils.getExtension(descriptorName))) {
+        throw new IllegalArgumentException("JSON extension is required for 
provider and descriptor file names");
+      }
+      if (StringUtils.isBlank(urlsFilePath) ) {
+        throw new IllegalArgumentException("Missing --service-urls-file");
+      }
+      if (!new File(urlsFilePath).isFile()) {
+        throw new IllegalArgumentException(urlsFilePath + " does not exist");
+      }
+      if (StringUtils.isBlank(serviceName)) {
+        throw new IllegalArgumentException("Missing --service-name");
+      }
+      File outputDir = StringUtils.isBlank(KnoxCLI.this.outputDir) ? new 
File(".") : new File(KnoxCLI.this.outputDir);
+
+      DescriptorGenerator generator =
+              new DescriptorGenerator(descriptorName, providerName, 
serviceName, ServiceUrls.fromFile(new File(urlsFilePath)));
+      generator.saveDescriptor(

Review Comment:
   I think this could fit into 1 line after formatting.





Issue Time Tracking
-------------------

    Worklog Id:     (was: 901874)
    Time Spent: 20m  (was: 10m)

> KnoxCLI command for generating descriptor for a role type from a list of hosts
> ------------------------------------------------------------------------------
>
>                 Key: KNOX-3002
>                 URL: https://issues.apache.org/jira/browse/KNOX-3002
>             Project: Apache Knox
>          Issue Type: New Feature
>          Components: KnoxCLI
>            Reporter: Attila Magyar
>            Assignee: Attila Magyar
>            Priority: Major
>          Time Spent: 20m
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to