Is it possible to create an Ansible inventory variable that isn't
associated with an inventory host or group but the server tier the playbook
is run on? I have an Ansible role that installs the libffi-dev package
using APT, but I may want to install a different version of that package on
each server tier. I've created a variable "libffi-dev_ver" for that
purpose. I also have the inventory files "development", "staging", and
"production" that correspond to each of my tiers.
My role's main task, which is called from my main site.yml playbook, checks
that version variable exists prior to running the role:
# roles/misc_libs/tasks/main.yml
- include: check_vars.yml tags=misc_libs
- include: misc_libs.yml tags=misc_libs
check_vars.yml checks to ensure that the package version variable exists:
# roles/misc_libs_tasks/check_vars.yml
- name: check that required role variables are set
fail: msg="{{ item }} is not defined"
when: not {{ item }}
with_items:
- libffi-dev_ver
The misc_libs role actually uses that variable to install the package:
# roles/misc_libs/tasks/misc_libs.yml
- name: install libffi-dev
apt: >
pkg=libffi-dev={{ libffi-dev_ver }}
update_cache=yes
cache_valid_time=3600
become: True
My development inventory file looks like this:
# development
[webservers]
web01.example.com ansible_ssh_host=<ip_address>
[dev:children]
webservers
[webservers:vars]
libffi-dev_ver="3.1-2+b2"
When I run this command:
ansible-playbook -i development site.yml -l webservers
I get this Ansible error:
fatal: [web01.example.com] => error while evaluating conditional: not
libffi-dev_ver
What is the correct way to declare a package versioning variable like this
in Ansible? The variable's value depends on the server tier which
indicates to me that it goes in an inventory file since inventory files are
server tier-specific. But all inventory variables seem to have to be
associated with a host or group. I've done that but the role still doesn't
see the variable. I could add a task to the role that detects the server
tier and uses a "when" conditional to set the variable accordingly but that
solution seems ugly because if you're installing multiple packages in a
role, you'd need three conditionals for each package version variable.
I've looked through the Ansible documentation and read numerous blog posts
on setting up multi-tier playbooks but I don't see this particular
situation addressed. What's the right way to declare a tier-specific
variable like this?
Thanks!
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/ad513ee6-cd89-4e97-8564-9ab307385cec%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.