一時コマンドを使用して、ホストまたはグループのすべてのAnsible変数を一覧表示しますか?

一時コマンドを使用して、ホストまたはグループのすべてのAnsible変数を一覧表示しますか?

Ansible変数はさまざまなソースから来ます。たとえば、マニフェストファイルを含むフォルダのサブフォルダとサブフォルダにそれぞれYAMLファイルを作成して、host_varshost_varsとgroup_varsを提供できます。group_vars

どのようにリストを上げることができますか?すべての変数アンシプール会議プレイブックに出てくるグループやホストを知っていますか?注:私はこれを試しましたが、成功ansible -m debug -e 'var=hostvars' hostしませんでしたansible -m debug -e '- debug: var=hostvars'

ヒント:ansible <group|host> -m setupはいいいえ正解はこれですいいえ他のソースからのすべての変数が含まれます(のみ含まれています。実際には、動的{ "ansible_facts" : { ... } }マニフェストスクリプト(などを介して)_metaで提供されている変数も含まれません。

アンサーブルバージョン:1.9.1。

答え1

ansible <host pattern> -m debug -a "var=hostvars[inventory_hostname]"うまくいくようです。有効なものに
変更してください。<host pattern>ホストモード

有効な変数ソース(動的リストのhost_varsなどgroup_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"
        }
    }
}

答え2

上記の非常に良い答えに小さなメモを追加すると、プログラムでナビゲートするには、次の手順を実行します。

既存の回答の使用ホスト変数:

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

しかし、 考えられる事実debugモジュールが実行されていないため空ですsetup。したがって、jq有効なjsonにするために出力をトリミングした後、いくつかの追加操作を試す必要があります。

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

私は、人々がAnsibleという事実で返されたテキストの巨大な壁を調べるとき、次のようなことがありますが、必要に応じてこれが役に立つと思います。jq .ansible_facts.ansible_devices.vda.size

答え3

参考までに:これこのgithubプロジェクトは、すべてのホストの変数の90%を一覧表示する方法を示しています。単一のホストコマンドよりもグローバルに役立つと思います。追加情報ファイルには、簡単な在庫レポートを作成する手順が含まれています。すべての事実を確認するには、プレイブックの最後でこのコマンドを実行する方が価値があります。ジョブの動作をデバッグするには、レジスタを使用します。

関連情報