我正在尝试在剧本之间保持自定义事实( set_fact )。
即 provision something.yaml -> email.yaml
我为redis配置了缓存:
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379:0
我可以看到存储在redis中的事实(“ansible_facts10.1.0.7):
127.0.0.1:6379> keys *
1) "ansible_cache_keys"
2) "ansible_factslocalhost"
3) "ansible_facts10.1.0.7"
我无法理解的是如何在另一场戏中获得自定义事实?
我的问题是,如果我需要使用 redis查找,那么使用事实缓存是没有意义的,因为我可以通过redis任务将set_facts写入redis。
有没有办法在不使用以下内容的情况下自动查找redis缓存中的变量:
- name: query redis for somekey
debug: msg="{{ lookup('redis_kv', 'redis://localhost:6379,somekey') }} is value in Redis for somekey"
目前,我的缓存事实的redis密钥需要某种硬编码,因为它是以来自hosts文件的IP命名的,即“ansible_facts 10.1.0.7 ”
有人能指出我正确的方向吗?
答案 0 :(得分:1)
您可能希望使用set_fact模块的cacheable
选项:
- name: provision
hosts: myhost
tasks:
- set_fact:
myfact: something
cacheable: true
这种方式myfact=something
将进入myhost
主机的redis缓存。
当你进行其他游戏时
- name: check_fact
hosts: myhost
tasks:
- debug:
var: myfact
你应该看到从redis中获取something
。
请注意,Ansible 2.4中引入了cacheable
选项。