From cfde13e364176b6546c85534c58d740a95f4f849 Mon Sep 17 00:00:00 2001 From: Dmitrii Bocharov Date: Fri, 12 May 2017 22:37:37 +0200 Subject: [PATCH 1/3] jbide-23862: fix for spaces in path to oc binary --- .../AbstractOpenShiftBinaryCapability.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java index f5632dec..1da9a919 100644 --- a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java +++ b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java @@ -10,7 +10,9 @@ ******************************************************************************/ package com.openshift.internal.restclient.capability.resources; +import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -152,9 +154,11 @@ public final void start(final OpenShiftBinaryOption... options) { } private void startProcess(final String location, final OpenShiftBinaryOption... options) { - String cmdLine = new StringBuilder(location).append(' ').append(buildArgs(Arrays.asList(options))).toString(); - String[] args = StringUtils.split(cmdLine, " "); + List args = new ArrayList(); + args.add("oc"); + Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); ProcessBuilder builder = new ProcessBuilder(args); + builder.directory(new File(location).getParentFile()); builder.environment().remove("KUBECONFIG"); LOG.debug("OpenShift binary args: {}", builder.command()); try { @@ -217,16 +221,6 @@ protected String getOpenShiftBinaryLocation() { String.format("The OpenShift 'oc' binary location was not specified. Set the property %s", OPENSHIFT_BINARY_LOCATION)); } - - location = addQuotesIfRequired(location); - return location; - } - - private String addQuotesIfRequired(String location) { - if (!StringUtils.isEmpty(location) - && location.contains(" ")) { - location = "\"" + location + "\""; - } return location; } From 8b6477ca77bbf32e9c375cc1b03fadab4d69fdec Mon Sep 17 00:00:00 2001 From: Dmitrii Bocharov Date: Fri, 19 May 2017 17:32:20 +0200 Subject: [PATCH 2/3] jbide-23862: working fix for mac --- .../AbstractOpenShiftBinaryCapability.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java index 1da9a919..aeddc2cb 100644 --- a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java +++ b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java @@ -36,6 +36,10 @@ public abstract class AbstractOpenShiftBinaryCapability implements IBinaryCapability { private static final Logger LOG = LoggerFactory.getLogger(AbstractOpenShiftBinaryCapability.class); + + + private static final boolean IS_MAC = StringUtils.isNotEmpty(System.getProperty("os.name")) + && System.getProperty("os.name").toLowerCase().contains("mac"); private Process process; @@ -155,10 +159,21 @@ public final void start(final OpenShiftBinaryOption... options) { private void startProcess(final String location, final OpenShiftBinaryOption... options) { List args = new ArrayList(); - args.add("oc"); - Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); - ProcessBuilder builder = new ProcessBuilder(args); - builder.directory(new File(location).getParentFile()); + ProcessBuilder builder = null; + // the condition is made in order to solve mac problem + // with launching binaries containing spaces in its path + // https://issues.jboss.org/browse/JBIDE-23862 - see the latest comments + if (IS_MAC) { + args.add(location); + Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); + builder = new ProcessBuilder(args); + } else { + File oc = new File(location); + args.add(oc.getName()); + Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); + builder = new ProcessBuilder(args); + builder.directory(oc.getParentFile()); + } builder.environment().remove("KUBECONFIG"); LOG.debug("OpenShift binary args: {}", builder.command()); try { From dcb2df2398f6e4e0b56a95df73544c207e948f8b Mon Sep 17 00:00:00 2001 From: Dmitrii Bocharov Date: Mon, 22 May 2017 15:42:52 +0200 Subject: [PATCH 3/3] jbide-23862: fix pod logs --- .../AbstractOpenShiftBinaryCapability.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java index aeddc2cb..79e45bd0 100644 --- a/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java +++ b/src/main/java/com/openshift/internal/restclient/capability/resources/AbstractOpenShiftBinaryCapability.java @@ -154,10 +154,22 @@ public final void start(final OpenShiftBinaryOption... options) { if(!validate()) { return; } - startProcess(location, options); + ProcessBuilder processBuilder = initProcessBuilder(location, options); + startProcess(processBuilder); } - private void startProcess(final String location, final OpenShiftBinaryOption... options) { + private void startProcess(ProcessBuilder builder) { + try { + process = builder.start(); + checkProcessIsAlive(); + } catch (IOException e) { + LOG.error("Could not start process for {}.", new Object[]{ getName(), e }); + throw new OpenShiftException(e, "Does your OpenShift binary location exist? Error starting process: %s", + e.getMessage()); + } + } + + private ProcessBuilder initProcessBuilder(String location, final OpenShiftBinaryOption... options) { List args = new ArrayList(); ProcessBuilder builder = null; // the condition is made in order to solve mac problem @@ -165,25 +177,18 @@ private void startProcess(final String location, final OpenShiftBinaryOption... // https://issues.jboss.org/browse/JBIDE-23862 - see the latest comments if (IS_MAC) { args.add(location); - Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); + Arrays.stream(StringUtils.split(buildArgs(Arrays.asList(options)))).forEach(s -> args.add(s)); builder = new ProcessBuilder(args); } else { File oc = new File(location); args.add(oc.getName()); - Arrays.stream(buildArgs(Arrays.asList(options)).split(" ")).forEach(s -> args.add(s)); + Arrays.stream(StringUtils.split(buildArgs(Arrays.asList(options)))).forEach(s -> args.add(s)); builder = new ProcessBuilder(args); builder.directory(oc.getParentFile()); } builder.environment().remove("KUBECONFIG"); LOG.debug("OpenShift binary args: {}", builder.command()); - try { - process = builder.start(); - checkProcessIsAlive(); - } catch (IOException e) { - LOG.error("Could not start process for {}.", new Object[]{ getName(), e }); - throw new OpenShiftException(e, "Does your OpenShift binary location exist? Error starting process: %s", - e.getMessage()); - } + return builder; } private void checkProcessIsAlive() throws IOException {