You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/19 11:07:42 UTC
[5/7] brooklyn-library git commit: Add effector for ad-hoc ansible
commands.
Add effector for ad-hoc ansible commands.
For example (using the command line):
br app utest ent apc effector ansibleCommand invoke -P module=shell -P args='curl http://myhost:8080/additional.html > /var/www/html/additional.html'
This invokes the ad-hoc ansible command to add a file to an Apache documents folder.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/8de0e9fd
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8de0e9fd
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8de0e9fd
Branch: refs/heads/master
Commit: 8de0e9fdf1c894da6c949ccfd75c77e9d24badf4
Parents: d5026df
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Tue Feb 9 17:28:44 2016 +0000
Committer: Yavor Yanchev <ya...@yanchev.com>
Committed: Wed Feb 17 11:43:03 2016 +0200
----------------------------------------------------------------------
.../brooklyn/entity/cm/ansible/AnsibleEntity.java | 14 ++++++++++++++
.../entity/cm/ansible/AnsibleEntityImpl.java | 16 +++++++++++++++-
.../entity/cm/ansible/AnsiblePlaybookTasks.java | 14 ++++++++++++--
3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8de0e9fd/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntity.java
----------------------------------------------------------------------
diff --git a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntity.java b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntity.java
index 0124854..a2c9676 100644
--- a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntity.java
+++ b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntity.java
@@ -19,8 +19,22 @@
package org.apache.brooklyn.entity.cm.ansible;
import org.apache.brooklyn.api.entity.ImplementedBy;
+import org.apache.brooklyn.core.annotation.Effector;
+import org.apache.brooklyn.core.annotation.EffectorParam;
+import org.apache.brooklyn.core.effector.MethodEffector;
import org.apache.brooklyn.entity.software.base.SoftwareProcess;
@ImplementedBy(AnsibleEntityImpl.class)
public interface AnsibleEntity extends SoftwareProcess, AnsibleConfig {
+
+ MethodEffector<String> ANSIBLE_COMMAND = new MethodEffector<>(AnsibleEntity.class, "ansibleCommand");
+
+ @Effector(description = "Invoke an arbitrary Ansible command, optionally specifying the module (default is 'command')")
+ String ansibleCommand(
+ @EffectorParam(name="module", description = "Name of the Ansible module to invoke", defaultValue = "command")
+ String module,
+ @EffectorParam(name="args", description = "Arguments for the ansible command")
+ String args
+ );
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8de0e9fd/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
----------------------------------------------------------------------
diff --git a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
index bd797e6..b34603e 100644
--- a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
+++ b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleEntityImpl.java
@@ -19,6 +19,8 @@
package org.apache.brooklyn.entity.cm.ansible;
import org.apache.brooklyn.entity.stock.EffectorStartableImpl;
+import org.apache.brooklyn.util.core.task.DynamicTasks;
+import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.text.Strings;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -37,5 +39,17 @@ public class AnsibleEntityImpl extends EffectorStartableImpl implements AnsibleE
@Override
public void populateServiceNotUpDiagnostics() {
// TODO no-op currently; should check ssh'able etc
- }
+ }
+
+ @Override
+ public String ansibleCommand(String module, String args) {
+ final ProcessTaskWrapper<Integer> command = DynamicTasks.queue(AnsiblePlaybookTasks.moduleCommand(module, args));
+ command.asTask().blockUntilEnded();
+ if (0 == command.getExitCode()) {
+ return command.getStdout();
+ } else {
+ throw new RuntimeException("Command (" + args + ") in module " + module
+ + " failed with stderr:\n" + command.getStderr() + "\n");
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/8de0e9fd/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
----------------------------------------------------------------------
diff --git a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
index 1579e2d..29924d4 100644
--- a/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
+++ b/software/cm/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
@@ -19,17 +19,21 @@
package org.apache.brooklyn.entity.cm.ansible;
import org.apache.brooklyn.api.entity.Entity;
-
import org.apache.brooklyn.api.mgmt.TaskFactory;
import org.apache.brooklyn.core.effector.EffectorTasks;
import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.core.task.Tasks;
+import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory;
import org.apache.brooklyn.util.net.Urls;
import org.apache.brooklyn.util.ssh.BashCommands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Map;
+
+import static org.apache.brooklyn.util.ssh.BashCommands.sudo;
+
public class AnsiblePlaybookTasks {
private static final Logger LOG = LoggerFactory.getLogger(AnsiblePlaybookTasks.class);
@@ -68,5 +72,11 @@ public class AnsiblePlaybookTasks {
return SshEffectorTasks.ssh(cdAndRun(ansibleDirectory, cmd)).
summary("run ansible playbook for " + playbookName).requiringExitCodeZero();
}
-
+
+ public static ProcessTaskFactory<Integer> moduleCommand(String module, String args) {
+ final String command = "ansible localhost -m '" + module + "' -a '" + args + "'";
+ return SshEffectorTasks.ssh(sudo(command))
+ .summary("ad-hoc: " + command).requiringExitCodeZero();
+ }
}
+