From a21d1e8864f9bf9ec7091cdb9970a933dfc406ad Mon Sep 17 00:00:00 2001 From: Alasdair Hodge Date: Thu, 2 Oct 2014 10:47:03 +0100 Subject: [PATCH] Add location customiser to fix broken sudo/tty behaviour. --- .../jclouds/SudoTtyFixingCustomizer.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 locations/jclouds/src/main/java/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java new file mode 100644 index 0000000000..a7ac30b831 --- /dev/null +++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java @@ -0,0 +1,38 @@ +package brooklyn.location.jclouds; + +import org.jclouds.compute.ComputeService; + +import com.google.common.annotations.Beta; + +import brooklyn.util.task.DynamicTasks; +import brooklyn.util.task.ssh.SshTasks; +import brooklyn.util.task.ssh.SshTasks.OnFailingTask; + +/** + * Wraps Brooklyn's sudo-tty mitigations in a {@link JcloudsLocationCustomizer} for easy(-ish) consumption + * in YAML blueprints: + * + *
+ *   name: My App
+ *   brooklyn.config:
+ *     provisioning.properties:
+ *       customizerType: brooklyn.location.jclouds.SudoTtyFixingCustomizer
+ *   services: ...
+ * 
+ * + *

This class should be seen as a temporary workaround and might disappear completely if/when Brooklyn takes care of this automatically. + * + *

See + * http://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-password + * for background. + */ +@Beta +public class SudoTtyFixingCustomizer extends BasicJcloudsLocationCustomizer { + + @Override + public void customize(JcloudsLocation location, ComputeService computeService, JcloudsSshMachineLocation machine) { + DynamicTasks.queueIfPossible(SshTasks.dontRequireTtyForSudo(machine, OnFailingTask.FAIL)).orSubmitAndBlock(); + DynamicTasks.waitForLast(); + } + +}