redis

时间:2017-11-23 18:09:00

标签: ansible ansible-facts

我正在尝试在剧本之间保持自定义事实( 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

有人能指出我正确的方向吗?

1 个答案:

答案 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选项。