[英]Ansible: print only user defined variables
如何在group_vars
host_vars
事实的情况下打印仅在group_vars
、 host_vars
处声明的变量?
这样的代码很好:
- name: "Ansible | List all known variables and facts"
debug:
var: hostvars[inventory_hostname]
但我不需要主机 IP、磁盘等。
我的意思是在继续执行 Play 之前再检查一次我的所有变量。
有 3 类变量: ansible 事实、 特殊变量和用户变量。 从主机变量中删除 ansible 事实和特殊变量,剩下的是用户变量。 ansible事实的列表在变量ansible_facts 中可用。 必须创建特殊变量的列表(我认为)。
创建特殊变量列表
如果您运行下面的剧本,您将看到特殊变量和用户变量的列表
- hosts: localhost
tasks:
- debug:
msg: "{{ hostvars[inventory_hostname]|
difference(ansible_facts) }}"
消除用户的变量并将特殊变量列表放入文件中。 例如
shell> cat special_vars.yml
special_vars:
- ansible_python_interpreter
- ansible_connection
- inventory_hostname
...
此特殊变量列表可能不完整,仅用于此主机的用途。
从主机变量中删除 ansible 事实和特殊变量
- 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
用户的变量还将包括用户设置的配置变量(例如连接变量:ansible_user 或特权升级: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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.