web-dev-qa-db-ja.com

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

Ansible変数はさまざまなソースから取得されます。たとえば、インベントリファイルを含むフォルダーのHost_varsおよびgroup_varsという名前のサブフォルダーにYAMLファイルを作成することで、Host_varsおよびgroup_varsを提供できます。

プレイリスト内のグループまたはホストについて知っているすべての変数 Ansibleをどのようにリストできますか?注:私はansible -m debug -e 'var=hostvars' Hostansible -m debug -e '- debug: var=hostvars'を試しましたが、うまくいきませんでした。

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

Ansibleバージョン:1.9.1。

26
0xC0000022L

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"
        }
    }
}
29
yaegashi

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

2
Larry Fast

上記の本当に良い答えに小さなヒントを追加します。

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

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

ただし、debugsetupモジュールを実行しないため、ansible_factsは空です。そのため、出力をトリミングして有効なjsonにした後、jqなどの追加機能を試す必要があります。

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

jq .ansible_facts.ansible_devices.vda.sizeのようなものが1つだけ必要な場合に、不愉快な事実に戻る巨大なテキストの壁を調査するときに、人々はこれが役立つと思うかもしれません。

2
KCD