我正在尝试使自定义事实(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键需要某种类型的硬编码,因为它是以主机文件(即"ansible_facts10.1.0.7“)的IP命名的
有人能给我指明正确的方向吗?
发布于 2017-11-23 18:41:35
您可能希望使用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。
请记住,cacheable选项是在Anble2.4中引入的。
https://stackoverflow.com/questions/47461359
复制相似问题