デフォルトでは、プレイブックで定義された一連のタスクを実行する前に、Ansibleはプロビジョニングされているシステムに関する情報を収集するために少し時間がかかります。 facts と呼ばれるこの情報には、ネットワークインターフェイスとアドレス、リモートノードで実行されているオペレーティングシステム、使用可能なメモリなどの詳細が含まれています。

AnsibleはファクトをJSON形式で保存し、アイテムはノードにグループ化されます。 プロビジョニングしているシステムで利用できる情報の種類を確認するには、アドホックコマンドを使用してsetupモジュールを実行できます。

  1. ansible all -i inventory -m setup -u sammy

このコマンドは、サーバーに関する情報を含む広範なJSONを出力します。 そのデータのサブセットを取得するには、filterパラメーターを使用して、パターンを指定できます。 たとえば、リモートノードのすべてのIPv4アドレスに関する情報を取得する場合は、次のコマンドを使用できます。

  1. ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy

次のような出力が表示されます。

Output
203.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によって提供されるJSONのansible_default_ipv4.addressを介して利用可能であることがわかります。

ansible-practiceディレクトリにplaybook-03.ymlという名前の新しいファイルを作成します。

  1. nano ~/ansible-practice/playbook-03.yml

次に、次の行を新しいプレイブックファイルに追加します。

〜/ ansible-practice / playbook-03.yml
---
- hosts: all
  tasks:
    - name: print facts
      debug:
        msg: "IPv4 address: {{ ansible_default_ipv4.address }}"

完了したら、ファイルを保存して閉じます。

インベントリファイルからサーバーでこのプレイブックを試すには、最初の例を実行したときに以前に使用したのと同じ接続引数を使用してansible-playbookを実行します。 ここでも、inventoryという名前のインベントリファイルとsammyユーザーを使用してリモートサーバーに接続します。

  1. ansible-playbook -i inventory playbook-03.yml -u sammy

プレイブックを実行すると、期待どおりにリモートサーバーのIPv4アドレスが出力に表示されます。

Output
... TASK [print facts] *************************************************************************************************************************************************************************** ok: [server1] => { "msg": "IPv4 address: 203.0.113.10" } ...

ファクトは、プレイブックをより適切にカスタマイズするために活用できる重要なデータをカプセル化します。 ファクトを通じて取得できるすべての情報の詳細については、公式のAnsibleドキュメントを参照してください。