繁体   English   中英

Ansible:仅打印用户定义的变量

[英]Ansible: print only user defined variables

如何在group_vars host_vars事实的情况下打印仅在group_varshost_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM