如何获取 Ansible playbook 中使用的变量列表?

Pet*_*ter 7 ansible ansible-facts

我想获取 ansible 剧本中使用的变量列表。我研究了设置和调试模块,但我怀疑我能做到这一点。

有没有通用的方法?

Vla*_*tka 8

看一眼vars

    - debug: var=vars
Run Code Online (Sandbox Code Playgroud)

您将看到所有变量,其中一些变量作为属性重复hostvars

    - debug: var=hostvars
Run Code Online (Sandbox Code Playgroud)

可以仅列出不在主机变量中的变量。例如,剧本

shell> cat playbook.yml
- hosts: test_01
  vars:
    var1: test
  tasks:
    - set_fact:
        my_vars: "{{ vars.keys()|
                     difference(hostvars[inventory_hostname].keys())|
                     list|
                     sort }}"
    - debug:
        var: my_vars
Run Code Online (Sandbox Code Playgroud)

给出(删节)

ok: [test_01] => {
    "my_vars": [
        "ansible_dependent_role_names",
        "ansible_play_batch",
        "ansible_play_hosts",
        "ansible_play_hosts_all",
        "ansible_play_name",
        "ansible_play_role_names",
        "ansible_role_names",
        "environment",
        "hostvars",
        "play_hosts",
        "role_names",
        "var1"
    ]
}
Run Code Online (Sandbox Code Playgroud)

你可以看到剩下的是特殊变量和变量var1。我不知道有任何关于如何仅列出特殊变量的方法、过滤器或函数。如果您创建这样的列表,您可以创建差异并仅获取变量。