かべぎわブログ

技術的なことについてかけたらいいな…

Ansibleのファクト変数を確認する

Ansibleのファクト変数を見てみたいと思います。

そもそもファクト変数とは?

ターゲットノードのメタデータが格納されている変数のことです。
IPアドレスからCPUやディスクの情報などを見ることができます。

特に意識しなくてもデフォルトでansible-playbookを実行したときにメタデータを取得してくれています。

実際に見てみる

以下のコマンドでファクト変数を取得することができます。

$ ansible -i ./ansible_hosts test_server -m setup

(ansible_hostsはインベントリファイルで、test_serverはそのグループです)

実行結果

以下のようにいろいろな情報が取得できます。
本当にいろいろ取得できてめちゃめちゃ記事が長くなるので省略。

192.140.1.62 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.140.1.62"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::49c:a8ff:fe3f:24ae"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "08/24/2006", 
        "ansible_bios_version": "4.2.amazon", 
        "ansible_cmdline": {
            "BOOT_IMAGE": "/boot/vmlinuz-4.9.76-38.79.amzn2.x86_64", 
            "biosdevname": "0", 
            "console": "ttyS0,115200n8", 
            "net.ifnames": "0", 
            "nvme_core.io_timeout": "4294967295", 
            "ro": true, 
            "root": "UUID=a065cb27-9117-45b3-afc3-53eaff6cd0a1"
        }, 
        "ansible_date_time": {
            "date": "2018-03-21", 
            "day": "21", 
            "epoch": "1521628532", 
            "hour": "10", 

~~~~~~省略~~~~~~

活用法を考えてみる

活用法を考えてみます。

以下のようなplaybookをつくってCPUがx86の64bitだったときのみ⌘を実行するようにしてみる。

実行結果

x86_64だよ!!!というメッセージが出力されていることがわかります。

$ ansible-playbook -i ansible_hosts fact_x86.yml

PLAY [localhost] ********************************************************************

TASK [Gathering Facts] ********************************************************************
ok: [localhost]

TASK [check architecture x86_64] ********************************************************************
ok: [localhost] => {
    "msg": "x86_64だよ!!!"
}

PLAY RECAP ********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0 

おわりに

ファクト変数をみてみました。
たぶんもっといいつかいかたがあると思いますけれど思いつかぬ。

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)