Ansible変数はさまざまなソースから取得されます。たとえば、インベントリファイルを含むフォルダーのHost_vars
およびgroup_vars
という名前のサブフォルダーにYAMLファイルを作成することで、Host_varsおよびgroup_varsを提供できます。
プレイリスト内のグループまたはホストについて知っているすべての変数 Ansibleをどのようにリストできますか?注:私はansible -m debug -e 'var=hostvars' Host
とansible -m debug -e '- debug: var=hostvars'
を試しましたが、うまくいきませんでした。
ヒント:ansible <group|Host> -m setup
はnot正しい答えですnot他のソースからのすべての変数を含めます({ "ansible_facts" : { ... } }
のみが含まれます。実際には、動的インベントリスクリプト(_meta
などを介して)によって提供される変数も含まれません。
Ansibleバージョン:1.9.1。
ansible -m debug -a "var=hostvars[inventory_hostname]"
は動作するようです。有効な変数ソース(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"
}
}
}
参考: これ githubプロジェクトは、すべてのホストの変数の90%をリストする方法を示します。単一のHostコマンドよりもグローバルに便利だと思います。 READMEには、簡単なインベントリレポートを作成するための手順が含まれています。プレイブックの最後にこれを実行してすべてのファクトを確認すると、さらに価値があります。タスクの動作もデバッグするには、レジスタを使用します。
上記の本当に良い答えに小さなヒントを追加します。
hostvarsの既存の回答を使用します。
ansible -m debug myhost -a "var=hostvars[inventory_hostname].ansible_version"
ただし、debug
はsetup
モジュールを実行しないため、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つだけ必要な場合に、不愉快な事実に戻る巨大なテキストの壁を調査するときに、人々はこれが役立つと思うかもしれません。