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"); } }