如何打印仅在group_vars
,host_vars
处声明且没有明显事实的变量?
这样的代码很好:
- name: "Ansible | List all known variables and facts"
debug:
var: hostvars[inventory_hostname]
但是我不需要主机IP,磁盘等
我的意思是在继续执行Play之前再检查一次我的所有变量。
答案 0 :(得分:1)
有3类变量:ansible facts,special variables和用户变量。从hostvars中删除明显的事实和特殊变量,剩下的就是用户的变量。可疑事实的列表在变量 ansible_facts 中可用。我想必须创建特殊变量的列表。
创建特殊变量列表
如果您在下面运行该剧本,则会看到特殊变量和用户变量的列表
- hosts: localhost
tasks:
- debug:
msg: "{{ hostvars[inventory_hostname]|
difference(ansible_facts) }}"
消除用户的var,并将特殊变量列表放入文件中。例如
shell> cat special_vars.yml
special_vars:
- ansible_python_interpreter
- ansible_connection
- inventory_hostname
...
此特殊变量列表可能不完整,仅用于此主机。
从hostvars中删除不可理解的事实和特殊变量
- hosts: localhost
vars_files:
- special_vars.yml
tasks:
- set_fact:
user_var1: AAA
- debug:
msg: "{{ hostvars[inventory_hostname]|
difference(ansible_facts)
difference(special_vars) }}"
仅提供用户变量列表
msg:
- user_var1
用户变量还将包括用户设置的配置变量(例如connection variables:ansible_user或priviledge escalation:ansible_become)。
名称空间
更好的做法是“命名空间”变量。例如
- hosts: localhost
vars:
prj51_var1: AAA
prj51_var2: BBB
tasks:
- debug:
msg: "{{ item }}: {{ query('vars', item)|first }}"
loop: "{{ query('varnames', 'prj51_.+$') }}"
给予
msg: 'prj51_var1: AAA'
msg: 'prj51_var2: BBB'