deploy artifacts - but download them only once, not for each host ?

271 views
Skip to first unread message

Torsten Reinhard

unread,
Nov 4, 2014, 7:00:45 AM11/4/14
to ansible...@googlegroups.com
Hi,

we are working on some playbooks that will deploy Maven artifacts (*.tar, *.zip) to our target environments.
Due to the fact the target environment cannot directly access the Nexus Server (artifact repository) we need first to download them onto the control-machine
- and copy/ synchronize from there to the target servers.

When we implement the "download from Nexus" as just a simple task (inside a role) - it would be executed for each host when the playbook is run.
for( host : hosts )
{
  task
: download
  task
: copy to host
  task
: install to host
}

Is there any way to execute "run only once" tasks, before looping over all hosts is executed ?

pre-task: download
for( host : hosts )
{
  task
: copy to host
  task
: install to host
}

Some kind of "hook" where we can put preparation tasks ?

Thanx for any hints,

Torsten

Brian Coca

unread,
Nov 4, 2014, 8:19:18 AM11/4/14
to ansible...@googlegroups.com
separate it into 2 plays, the first using hosts: localhost (or the control server), this runs all the tasks you only want to run once (downloads), the 2nd play can have the deploy to the target hosts.

You can have multiple plays per file and per invocation.

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/1c8a50dc-1d2d-4533-903a-54570a935014%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Brian Coca

Torsten Reinhard

unread,
Nov 5, 2014, 10:00:04 AM11/5/14
to ansible...@googlegroups.com
Thanx, Brian,

sounds like an easy solution - but what about encapsulation? I need to break down things than into
- preparation steps (artifact to be downloaded)
- roles that are executed - and depend on those artifacts

Can I keep all "encapsulated" in one role ?

Thx, Torsten

Brian Coca

unread,
Nov 5, 2014, 10:32:29 AM11/5/14
to ansible...@googlegroups.com
not sure why you need to encapsulate at role level, just put both plays in same file.

you cannot do host selection at roles anyway, that is a play property


For more options, visit https://groups.google.com/d/optout.



--
Brian Coca

Michael DeHaan

unread,
Nov 5, 2014, 5:37:25 PM11/5/14
to ansible...@googlegroups.com
The get_url module can take a md5sum that can be used to avoid repeated downloads.

There is also a "force" parameter which can avoid downloads if the file is already there.

If using sudo, however, sometimes this force detection, due to permissions, can not engage.



Reply all
Reply to author
Forward
0 new messages