【问题标题】:ansible fact caching in redisRedis中的ansible事实缓存
【发布时间】:2017-11-23 18:09:00
【问题描述】:

我正在尝试在剧本之间保持自定义事实 (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 中的键需要某种硬编码,因为它是以主机文件中的 IP 命名的,即“ansible_facts10.1.0.7

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

【问题讨论】:

    标签: ansible ansible-facts


    【解决方案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

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

    【讨论】:

    • 好的,我知道现在有什么问题了......我的第一个剧本已经可以缓存,但如果在不同的主机上运行。是否可以从不同的主机访问 set_fact 而无需复杂的 redis 查找?
    • 请查看docs
    猜你喜欢
    • 2018-01-09
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2017-03-15
    • 2020-04-25
    • 2018-01-30
    相关资源
    最近更新 更多