Repository: brooklyn-library
Updated Branches:
  refs/heads/master c19037bcd -> d7d44f9ff


Add creation of /etc/ansible hosts during install.

This allows replacement of the command form

   ansible-playbook -i \"localhost,\" -c local  whatever

 with

   ansible-playbook whatever

 and also supports the possibility that playbooks can modify the hosts file 
e.g. by adding additional groups that included roles require.

 For example the following playbook modifies the hosts to add a tomcat-server 
group, in order to install an example ansible from the github examples repo.

 name: multi
 location:
   red1
 services:
 - serviceType: brooklyn.entity.basic.SameServerEntity
   name: Entities
   brooklyn.children:

   - serviceType: org.apache.brooklyn.entity.cm.ansible.AnsibleEntity
     id: bootstrap
     service.name: crond
     playbook: bootstrap
     playbook.yaml: |
         ---
         - hosts: localhost
           tasks:
           - shell: printf "[tomcat-servers]\nlocalhost 
ansible_connection=local\n" >> /etc/ansible/hosts
           - file: path=/etc/ansible/playbooks state=directory mode=0755
           - get_url: 
url=https://github.com/ansible/ansible-examples/archive/master.zip 
dest=/tmp/master.zip mode=0440
           - command: unzip -o -d /etc/ansible/playbooks /tmp/master.zip

   - serviceType: org.apache.brooklyn.entity.stock.BasicApplication
     start.latch: 
$brooklyn:component("bootstrap").attributeWhenReady("service.isUp")
     brooklyn.children:
     - type: org.apache.brooklyn.entity.cm.ansible.AnsibleEntity
       name: test
       service.name: tomcat
       playbook: tomcat
       playbook.yaml: |
           ---
           - hosts: localhost
           - include: 
/etc/ansible/playbooks/ansible-examples-master/tomcat-standalone/site.yml
             vars:
                 http_port: 8080
                 https_port: 8443
                 admin_username: admin
                 admin_password: secret


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/cf65e18d
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/cf65e18d
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/cf65e18d

Branch: refs/heads/master
Commit: cf65e18d1b775d3528c9ba05c1229d748a6807bd
Parents: fad103e
Author: Geoff Macartney <geoff.macart...@cloudsoftcorp.com>
Authored: Fri Mar 11 17:25:25 2016 +0000
Committer: Geoff Macartney <geoff.macart...@cloudsoftcorp.com>
Committed: Fri Mar 11 17:25:25 2016 +0000

----------------------------------------------------------------------
 .../cm/ansible/AnsibleLifecycleEffectorTasks.java    |  1 +
 .../entity/cm/ansible/AnsiblePlaybookTasks.java      | 15 +++++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/cf65e18d/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git 
a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleLifecycleEffectorTasks.java
 
b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleLifecycleEffectorTasks.java
index e51d9e9..ccf8303 100644
--- 
a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleLifecycleEffectorTasks.java
+++ 
b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleLifecycleEffectorTasks.java
@@ -118,6 +118,7 @@ public class AnsibleLifecycleEffectorTasks extends 
MachineLifecycleEffectorTasks
         }
 
         DynamicTasks.queue(AnsiblePlaybookTasks.installAnsible(installDir, 
false));
+        DynamicTasks.queue(AnsiblePlaybookTasks.setUpHostsFile(installDir, 
false));
 
         if (getExtraVars() != null) {
             
DynamicTasks.queue(AnsiblePlaybookTasks.configureExtraVars(getRunDir(), 
extraVars, false));

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/cf65e18d/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
----------------------------------------------------------------------
diff --git 
a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
 
b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
index 152bc61..d22ccab 100644
--- 
a/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
+++ 
b/software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsiblePlaybookTasks.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.entity.cm.ansible;
 
 import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.mgmt.TaskAdaptable;
 import org.apache.brooklyn.api.mgmt.TaskFactory;
 import org.apache.brooklyn.core.effector.EffectorTasks;
 import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
@@ -33,6 +34,8 @@ import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
 
+import static org.apache.brooklyn.core.effector.ssh.SshEffectorTasks.ssh;
+import static org.apache.brooklyn.util.ssh.BashCommands.pipeTextToFile;
 import static org.apache.brooklyn.util.ssh.BashCommands.sudo;
 
 public class AnsiblePlaybookTasks {
@@ -42,7 +45,7 @@ public class AnsiblePlaybookTasks {
     public static TaskFactory<?> installAnsible(String ansibleDirectory, 
boolean force) {
         String installCmd = cdAndRun(ansibleDirectory, 
AnsibleBashCommands.INSTALL_ANSIBLE);
         if (!force) installCmd = BashCommands.alternatives("which ansible", 
installCmd);
-        return SshEffectorTasks.ssh(installCmd).summary("install ansible");
+        return ssh(installCmd).summary("install ansible");
     }
 
     public static TaskFactory<?> installPlaybook(final String 
ansibleDirectory, final String playbookName, final String playbookUrl) {
@@ -68,7 +71,7 @@ public class AnsiblePlaybookTasks {
     }
 
     public static TaskFactory<?> runAnsible(final String dir, Object 
extraVars, String playbookName) {
-        String cmd = sudo(String.format("ansible-playbook -i \"localhost,\" -c 
local "
+        String cmd = sudo(String.format("ansible-playbook "
             + optionalExtraVarsParameter(extraVars)
             + " -s %s.yaml", playbookName));
 
@@ -76,7 +79,7 @@ public class AnsiblePlaybookTasks {
             LOG.debug("Ansible command: {}", cmd);
         }
 
-        return SshEffectorTasks.ssh(cdAndRun(dir, cmd)).
+        return ssh(cdAndRun(dir, cmd)).
                 summary("run ansible playbook for " + 
playbookName).requiringExitCodeZero();
     }
 
@@ -84,7 +87,7 @@ public class AnsiblePlaybookTasks {
         final String command = "ansible localhost "
             + optionalExtraVarsParameter(extraVars)
             + " -m '" + module + "' -a '" + args + "'";
-        return SshEffectorTasks.ssh(sudo(BashCommands.chain("cd " + root, 
command)))
+        return ssh(sudo(BashCommands.chain("cd " + root, command)))
             .summary("ad-hoc: " + command).requiringExitCodeZero();
     }
 
@@ -105,5 +108,9 @@ public class AnsiblePlaybookTasks {
         }
         return " --extra-vars \"@" + EXTRA_VARS_FILENAME + "\" ";
     }
+
+    public static TaskFactory<?> setUpHostsFile(String installDir, boolean 
force) {
+        return ssh(pipeTextToFile("localhost ansible_connection=local", 
"/etc/ansible/hosts"))
+            .summary("write hosts file");    }
 }
 

Reply via email to