0

我正在尝试在剧本之间保持自定义事实(set_fact)。

IE 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 中的密钥将需要某种硬编码,因为它是以主机文件中的 IP 命名的,即“ansible_facts 10.1.0.7

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

4

1 回答 1

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

你应该会看到something从 redis 中获取。

请记住,该cacheable选项是在 Ansible 2.4 中引入的。

于 2017-11-23T18:41:35.807 回答