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 ?
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.