首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制在所有主机上收集事实

强制在所有主机上收集事实
EN

Stack Overflow用户
提问于 2015-05-04 15:22:21
回答 4查看 14.7K关注 0票数 32

我坐在一个相当复杂的Ansible项目前面,我们用它来设置我们的本地开发环境(多个VM ),有一个角色使用Ansible收集的事实在每个VM上设置/etc/hosts文件。不幸的是,当您只想为一台主机运行攻略时(使用-limit参数),来自其他主机的事实(显然)就会丢失。

有没有一种方法可以强制Ansible收集所有主机上的事实,即使您将攻略限制到一个特定的主机?

我们试图向行动手册添加一个剧本,以从所有主机收集事实,但当然这也会限制在-limit参数给定的一个主机上。如果有一种方法可以在其他游戏之前在所有主机上运行此游戏,那将是完美的。

我用谷歌搜索了一下,找到了使用redis的事实缓存的解决方案,但由于我们的攻略是在本地使用的,我想避免需要额外的软件。我知道,这不是什么大问题,但我只是在寻找一种“更干净”的、仅适用于Ansible的解决方案,并且想知道是否存在这样的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2017-08-15 07:13:06

Ansible版本2引入了一种干净的、官方的方式来使用委托事实来完成这项工作(请参阅:http://docs.ansible.com/ansible/latest/playbooks_delegation.html#delegated-facts)。

when: hostvars[item]['ansible_default_ipv4'] is not defined是一种检查,以确保您不会检查您已经知道的主机中的事实

代码语言:javascript
复制
---
# This play will still work as intended if called with --limit "<host>" or --tags "some_tag"

- name: Hostfile generation
  hosts: all
  become: true

  pre_tasks:
    - name: Gather facts from ALL hosts (regardless of limit or tags)
      setup:
      delegate_to: "{{ item }}"
      delegate_facts: True
      when: hostvars[item]['ansible_default_ipv4'] is not defined
      with_items: "{{ groups['all'] }}"

  tasks:
    - template:
        src: "templates/hosts.j2"
        dest: "/etc/hosts"
      tags:
        - hostfile

     ...
票数 33
EN

Stack Overflow用户

发布于 2015-05-04 19:24:19

通常,即使您不想在所有主机上运行任务,获取所有主机的事实的方法也是这样做的:

代码语言:javascript
复制
- hosts: all
  tasks: [ ]  

但正如您所提到的,--limit参数将限制将应用于哪些主机。

我不认为有一种方法可以简单地告诉Ansible忽略任何plays上的--limit参数。然而,在Ansible中可能有另一种方法可以完全完成您想要的操作。

我还没有亲自使用过它,但是从Ansible 1.8开始,fact caching就可以使用了。简而言之,启用事实缓存后,Ansible将使用redis服务器来缓存所有关于它遇到的主机的事实,您将能够在后续的攻略中引用它们:

在启用事实缓存的情况下,一个组中的计算机可以引用另一个组中的计算机的变量,尽管在当前执行/usr/bin/ansible-playbook时尚未与这些变量进行通信。

票数 11
EN

Stack Overflow用户

发布于 2016-07-01 07:14:38

在2016年,这似乎仍然是一个没有干净解决方案的问题,但Ansible的新版本提供了一个"jsonfile“事实缓存后端,这似乎是为了满足这一需求而在本地安装Redis的一个不错的折衷方案。现在,在使用--limit选项运行攻略之前,我只需启动一个ansible all -m setup。对爵士来说已经足够好了!

http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30024664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档