我正在研究一个只需要收集一个事实的角色.
性能这是一个问题,我知道收集事实是耗时的.
我正在寻找一些方法来过滤gather_facts
剧本,这将允许我只收集所需的事实.
这可以使用安装核心模块:
ansible -m setup -a 'filter=ansible_hostname' my_host 10.200.0.127 | success >> { "ansible_facts": { "ansible_hostname": "my_host" }, "changed": false }
在剧本中可以使用这个功能吗?像这样的东西?
- hosts: all sudo: yes gather_facts: True filter: "filter=ansible_*"
PS:上面的代码抛出语法异常.
编辑1:如果有人需要获取主机名,那么还有另一个有用的变量inventory_hostname.
是的,这是可能的,但不是收集事实的默认行为.设置gather_facts
为true
简单地调用设置模块作为游戏的第一个任务.这样您就无法参数化setup
模块调用.
但您可以使用filter参数禁用默认行为并自行调用设置.
- hosts: all sudo: yes gather_facts: False tasks: - setup: filter: ansible_*
由于您正在处理某个角色,并且可能不希望在您的角色中进行此设置调用,因此您可以使用pre_tasks.
- hosts: all sudo: yes gather_facts: False pre_tasks: - setup: filter: ansible_* roles: - your_role_here
剧本顶部的Ansible方式(其他方式):
---- - hosts: web gather_facts: True gather_subset: - network - virtual
使用以下命令调试变量:
- name: Print some debug information vars: msg: | Module Variables ("vars"): -------------------------------- {{ vars | to_nice_json }} Environment Variables ("environment"): -------------------------------- {{ environment | to_nice_json }} GROUP NAMES Variables ("group_names"): -------------------------------- {{ group_names | to_nice_json }} GROUPS Variables ("groups"): -------------------------------- {{ groups | to_nice_json }} HOST Variables ("hostvars"): -------------------------------- {{ hostvars | to_nice_json }} debug: msg: "{{ msg.split('\n') }}" tags: debug_info
在询问并回答了这个问题后,Ansible 2.1将gather_subset
选项添加到设置模块,因此现在可以使用!facter,!ohai,network
文档中描述的语法而不是正则表达式过滤器:
- hosts: all sudo: yes gather_facts: False pre_tasks: - setup: gather_subset: !facter,!ohai,network roles: - your_role_here