AnsiblePlaybookのシステム情報(ファクト)にアクセスする方法
デフォルトでは、プレイブックで定義された一連のタスクを実行する前に、Ansibleはプロビジョニングされているシステムに関する情報を収集するために少し時間がかかります。 facts と呼ばれるこの情報には、ネットワークインターフェイスとアドレス、リモートノードで実行されているオペレーティングシステム、使用可能なメモリなどの詳細が含まれています。
AnsibleはファクトをJSON形式で保存し、アイテムはノードにグループ化されます。 プロビジョニングしているシステムで利用できる情報の種類を確認するには、 setup
アドホックコマンドを使用するモジュール:
- ansible all -i inventory -m setup -u sammy
このコマンドは、サーバーに関する情報を含む広範なJSONを出力します。 そのデータのサブセットを取得するには、 filter
パラメータとパターンを提供します。 たとえば、リモートノードのすべてのIPv4アドレスに関する情報を取得する場合は、次のコマンドを使用できます。
- ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy
次のような出力が表示されます。
Output203.0.113.10 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"203.0.113.10",
"198.51.100.23"
],
"ansible_default_ipv4": {
"address": "203.0.113.10",
"alias": "eth0",
"broadcast": "203.0.113.255",
"gateway": "203.0.113.1",
"interface": "eth0",
"macaddress": "06:c7:91:16:2e:b7",
"mtu": 1500,
"netmask": "203.0.113.0",
"network": "203.0.113.0",
"type": "ether"
}
},
"changed": false
}
プレイに役立つ事実を見つけたら、それに応じてプレイブックを更新できます。 例として、次のプレイブックはデフォルトのネットワークインターフェイスのIPv4アドレスを出力します。 前のコマンド出力から、この値は次のコマンドで使用できることがわかります。 ansible_default_ipv4.address
Ansibleが提供するJSONで。
と呼ばれる新しいファイルを作成します playbook-03.yml
あなたの中で ansible-practice
ディレクトリ:
- nano ~/ansible-practice/playbook-03.yml
次に、新しいプレイブックファイルに次の行を追加します。
---
- hosts: all
tasks:
- name: print facts
debug:
msg: "IPv4 address: {{ ansible_default_ipv4.address }}"
完了したら、ファイルを保存して閉じます。
インベントリファイルからサーバーでこのプレイブックを試すには、次を実行します ansible-playbook
最初の例を実行するときに以前に使用したものと同じ接続引数を使用します。 ここでも、という名前のインベントリファイルを使用します inventory
およびsammyユーザーは、リモートサーバーに接続します。
- ansible-playbook -i inventory playbook-03.yml -u sammy
プレイブックを実行すると、期待どおりにリモートサーバーのIPv4アドレスが出力に表示されます。
Output...
TASK [print facts] ***************************************************************************************************************************************************************************
ok: [server1] => {
"msg": "IPv4 address: 203.0.113.10"
}
...
ファクトは、プレイブックをより適切にカスタマイズするために活用できる重要なデータをカプセル化します。 ファクトを通じて取得できるすべての情報の詳細については、公式のAnsibleドキュメントを参照してください。