SLIDER-630 python path specified via slider-client.xml or app config global prop
diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index 99c4746..a676fcc 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -68,6 +68,7 @@
import org.apache.slider.common.Constants;
import org.apache.slider.common.SliderExitCodes;
import org.apache.slider.common.SliderKeys;
+import org.apache.slider.common.SliderXmlConfKeys;
import org.apache.slider.common.params.AbstractActionArgs;
import org.apache.slider.common.params.AbstractClusterBuildingActionArgs;
import org.apache.slider.common.params.ActionDiagnosticArgs;
@@ -905,6 +906,8 @@
appConf.set(AgentKeys.PACKAGE_PATH, buildInfo.packageURI);
}
+ propagatePythonExecutable(conf, instanceDefinition);
+
// make any substitutions needed at this stage
replaceTokens(appConf.getConfTree(), getUsername(), clustername);
@@ -1213,6 +1216,7 @@
propagatePrincipals(config, instanceDefinition);
// validate security data
+
/*
// turned off until tested
SecurityConfiguration securityConfiguration =
@@ -1401,8 +1405,19 @@
LaunchedApplication launchedApplication = amLauncher.submitApplication();
return launchedApplication;
}
-
-
+
+ private void propagatePythonExecutable(Configuration config,
+ AggregateConf instanceDefinition) {
+ String pythonExec = config.get(
+ SliderXmlConfKeys.PYTHON_EXECUTABLE_PATH);
+ if (pythonExec != null) {
+ instanceDefinition.getAppConfOperations().getGlobalOptions().putIfUnset(
+ SliderXmlConfKeys.PYTHON_EXECUTABLE_PATH,
+ pythonExec);
+ }
+ }
+
+
/**
* Wait for the launched app to be accepted in the time
* and, optionally running.
diff --git a/slider-core/src/main/java/org/apache/slider/common/SliderXmlConfKeys.java b/slider-core/src/main/java/org/apache/slider/common/SliderXmlConfKeys.java
index e7f8ce5..a967ebf 100644
--- a/slider-core/src/main/java/org/apache/slider/common/SliderXmlConfKeys.java
+++ b/slider-core/src/main/java/org/apache/slider/common/SliderXmlConfKeys.java
@@ -156,4 +156,9 @@
*/
String KEY_SLIDER_AM_DEPENDENCY_CHECKS_DISABLED =
"slider.am.dependency.checks.disabled";
+
+ /**
+ * The path to the python executable utilized to launch the agent.
+ */
+ String PYTHON_EXECUTABLE_PATH = "agent.python.exec.path";
}
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index c86eabd..4f981c7 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -402,7 +402,11 @@
String label = getContainerLabel(container, role);
CommandLineBuilder operation = new CommandLineBuilder();
- operation.add(AgentKeys.PYTHON_EXE);
+ String pythonExec = instanceDefinition.getAppConfOperations()
+ .getGlobalOptions().getOption(SliderXmlConfKeys.PYTHON_EXECUTABLE_PATH,
+ AgentKeys.PYTHON_EXE);
+
+ operation.add(pythonExec);
operation.add(scriptPath);
operation.add(ARG_LABEL, label);