Need clarification on set_fact module

Ansible documentation for set_fact module says “Set cacheable to yes to save variables across executions using a fact cache”. So my understanding is that setting ‘cacheable: yes’ would make the contents of custom variable available across differnt playbooks (as opposed to default behaviour of custom variable output being available only for current playbook).

However when i tried to use a custom variable saved in 1 playbook in another playbook, it didn’t work. So i wonder if my understanding is correct? Below is playbook:

PLAYBOOK 1: I define a custom variable called ‘my_name’ and save it in fact cache using cacheable: yes

tasks:

  • name: GATHER INTERFACE INFO

ios_command:

commands: “show ip int brief”

register: show_ip

  • set_fact:

my_name: “{{ show_ip }}”

cacheable: yes

PLAYBOOK 2: I reference earlier custom variable in 2nd playbook for comparison but doesn’t work.

tasks:

  • name: GATHER INTERFACE INFO AFTER RELOAD

ios_command:

commands: “show ip int brief”

register: show_ip_new

  • assert:

that:

  • show_ip.stdout[0] | regex_findall(‘up’) | length == show_ip_new.stdout[0] | regex_findall(‘up’) | length

fail_msg: “THERE IS INTERFACE MISMATCH. PLAYBOOK IS ENDING FOR CURRENT HOST.”

success_msg: “INTERFACE STATUS MATCHED”

Thanks,
Vikram

Are these plays run against the same host?

Hi,

Yes, i run them against the same host. But both these playbooks are executed separately.

Regards,
Vikram

Ansible documentation for set_fact module says “Set cacheable to yes to save variables across executions using a fact cache”.

It also says “This boolean converts the variable into an actual ‘fact’ which will also be added to the fact cache, if fact caching is enabled.”

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html#parameter-cacheable

So, did you enable fact caching?

Hi,

Do youmean that if in addition to adding ‘cacheable: yes’ in set_fact task, i should also be adding below config in ansible.cfg? If so, i didn’t add it but i can test.

gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/facts_cache
fact_caching_timeout = 7200

Regards,
Vikram

Setting cacheable means that it will be cached if you enable it.
Those are two different things.
https://docs.ansible.com/ansible/latest/plugins/cache.html#enabling-fact-cache-plugins