I have a playbook with two plays, one local and one remote. I have two inventories, one for test and one for production. Each inventory defines a variable for the remote group, but I would like to use the variable in the local play without using delegation. Is that possbile and how would I do that?
Example Playbook:
- hosts: local
tasks:
# ... lots of local build steps here
- command: tar -czf {{ archive_name }} /build_dir
- hosts: remote
tasks:
- unarchive: src={{ archive_name }} dest=/deploy_dir
Test inventory:
[local]
127.0.0.1
[remote]
test.example.com
[remote:vars]
archive_name=/tmp/test-build.tgz
Production Inventory:
[local]
127.0.0.1
[remote]
www.example.com
[remote:vars]
archive_name=/tmp/production-build.tgz
This example fails because {{ archive_name }}
is not defined for the local
group.
A solution to this would have the following constraints:
- I can't put it into a file in
group_vars
because I have different inventories with the same group names. - I'd rather not delegate the build process tasks instead of using a separate play.
- I would like to keep the variable in the inventory file and not dynamically load other files.
The only option I see at the moment is to define {{ archive_name }}
again for the local
group, but that's error-prone.
You should be able to access the value of
archive_name
throughhostvars
: