インフラエンジニアbacchiのわかったことまとめ

bacchi.me

Ansibleで対象ホストのIPアドレスを取得する

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のメモリ割り当てを動的に決めたり、色んなパラメータを環境に応じて割り当てたりできそうだなーと思いました。

  • B!