playbookやtemplateの.j2ファイルで対象ホストのIPアドレスを取得するには下記の変数を使えばよいです。
{{ ansible_eth0.ipv4.address }}
きちんとIPアドレスを取ってくれるか、下記のタスクを実行してみます。
- name: get remote host ip address
command: echo {{ ansible_eth0.ipv4.address }}
-vオプションを付けないとchangedしか出ないので付けてから実行します。
[ansible@gealach] ~
% ansible-playbook -i adm -l lua site.yml -t iptest -v
PLAY [lua-servers] *********************************************************
GATHERING FACTS ***************************************************************
ok: [lua]
TASK: [lua | get remote host ip address] ***********************************
changed: [lua] => {"changed": true, "cmd": "echo 10.3.0.157", "delta": "0:00:00.002865", "end": "2015-11-01 21:36:59.131677", "rc": 0, "start": "2015-11-01 15:36:59.128812", "stderr": "", "stdout": "10.3.0.157", "warnings": []}
PLAY RECAP ********************************************************************
lua : ok=2 changed=1 unreachable=0 failed=0
IPアドレスが取得できています。
こういった情報は「GATHERING FACTS」で取得しているそうです。
さらに便利に使う
取得した値は変換することができます。
{{ ansible_eth0.ipv4.address | regex_replace(\'.\', \'\\.\') }}
この例ではregex_replaceを通して、指定した条件に従って値を書き換えています。
私はApacheの設定ファイルをテンプレート化する際、自ホストのIPアドレスを「10.3.0.157」のように表現したかったので助かりました。
「GATHERING FACTS」ではCPUやメモリに関する情報も取ってきてくれているようなので、上の例の他にも、搭載されているメモリ容量によってPHPのメモリ割り当てを動的に決めたり、色んなパラメータを環境に応じて割り当てたりできそうだなーと思いました。