アドホックコマンドを使用して、ホストまたはグループのすべてのAnsible変数をリストしますか?


25

Ansible変数はさまざまなソースから取得されます。名前のサブフォルダにYAMLファイルを作成することにより、host_varsとgroup_varsを提供するために、例えば可能であるhost_varsgroup_vars、それぞれインベントリファイルを含むフォルダの。

Ansible Playbook 内のグループまたはホストについて知っているすべての変数を一覧表示するにはどうすればよいですか?注:私が試したし、無駄に。ansible -m debug -e 'var=hostvars' hostansible -m debug -e '- debug: var=hostvars'

ヒント:他のソースからのすべての変数が含まれているわけでansible <group|host> -m setupないため、正しい答えではありませ(含まれているだけ{ "ansible_facts" : { ... } }です。実際、動的インベントリスクリプト(経由_metaなど)によって提供される変数も含まれていません。

Ansibleバージョン:1.9.1。

回答:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"動作するようです。有効な変数のソース(host_varsgroup_vars_meta動的在庫、等)は、すべての考慮されます。

動的インベントリスクリプトの場合hosts.sh

#!/bin/sh
if test "$1" = "--host"; then
        echo {}
else
        cat <<EOF
{
  "ungrouped": [ "x.example.com", "y.example.com" ],
  "group1": [ "a.example.com" ],
  "group2": [ "b.example.com" ],
  "groups": {
    "children": [ "group1", "group2" ],
    "vars": { "ansible_ssh_user": "user" }
  },
  "_meta": {
    "hostvars": {
      "a.example.com": { "ansible_ssh_host": "10.0.0.1" },
      "b.example.com": { "ansible_ssh_host": "10.0.0.2" }
    }
  }
}
EOF
fi

得られる:

$ chmod +x hosts.sh
$ ansible -i hosts.sh a.example.com -m debug -a "var=hostvars[inventory_hostname]"
a.example.com | success >> {
    "var": {
        "hostvars": {
            "ansible_ssh_host": "10.0.0.1", 
            "ansible_ssh_user": "user", 
            "group_names": [
                "group1", 
                "groups"
            ], 
            "groups": {
                "all": [
                    "x.example.com", 
                    "y.example.com", 
                    "a.example.com", 
                    "b.example.com"
                ], 
                "group1": [
                    "a.example.com"
                ], 
                "group2": [
                    "b.example.com"
                ], 
                "groups": [
                    "a.example.com", 
                    "b.example.com"
                ], 
                "ungrouped": [
                    "x.example.com", 
                    "y.example.com"
                ]
            }, 
            "inventory_hostname": "a.example.com", 
            "inventory_hostname_short": "a"
        }
    }
}

ansible 2.0.2では、これはもう機能しないようです。出力はlocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
-Zulakis

推奨編集に使用する"var=hostvars[inventory_hostname]"上で2.0> ansible
スチュアート・ウォーレン

1.9.4では、ansible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
akostadinov

1
これは私のために働いたansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
とMontaro

2

参考:この githubプロジェクトは、すべてのホストで変数の90%をリストする方法を示しています。単一のホストコマンドよりもグローバルに便利だと思います。READMEには、簡単なインベントリレポートを作成するための手順が含まれています。プレイブックの最後でこれを実行して、すべての事実を確認することはさらに価値があります。タスクの動作もデバッグするには、レジスタを使用します。


2

上記の非常に良い答えに小さなヒントを追加します。プログラムで確認したい場合は、

hostvarsの既存の回答を使用します

ansible -m debug myhost -a "var=hostvars[inventory_hostname].ansible_version"

ただし、モジュールを実行しないため、 ansible_factsは空です。したがって、出力をトリミングして有効なjsonにした後など、特別なことを試す必要があります。debugsetupjq

ansible -m setup myhost | sed 's#.*SUCCESS =>##' | jq .ansible_facts.ansible_all_ipv4_addresses

私は、あなたがただ一つのようなものが欲しいときに、不可解な事実に戻ってくるテキストの巨大な壁を調査するとき、人々がこれを役に立つと思うかもしれないと思いました jq .ansible_facts.ansible_devices.vda.size

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.