あきろぐ

いろいろめもするよ

Ansibleでインベントリに書いたIPアドレスを変数として使いたい②

以前、Ansibleでインベントリに書いたIPアドレスを使って、それを変数として使いたい場合の変数の書き方について記事を書きました。
akng-engineer.hatenablog.com
しかし、上記の書き方だと他のパターンに適用することが難しいので、今回は別の書き方についてまとめます。

何をしたいのか

前回は、インベントリにIPアドレスのみを記載していたのですが、この書き方だと各ホストを識別し各ホストのIPアドレスをリモートサーバー上で展開させるような変数を定義することが困難でした。
今回やりたいことは、playbookで作成したシェルスクリプトに自身のIPアドレスを変数定義し、templateモジュールでリモートサーバー上で変数を展開させるような処理を記述したいので、インベントリにホスト名を記載する書き方で私のやりたいことを実現させます。

環境

  • Ansible2.7
  • CentOS7.6

実現方法

今までの書き方

今までは、インベントリを以下のように記載していました。

[compute]
192.168.10.xx
192.168.10.xx
192.168.10.xx
192.168.10.xx
192.168.10.xx

この書き方だと、どのホストのIPアドレスか識別するような変数の書き方ができません。

今回の書き方

今回は、以下のようにインベントリを書きます。
このようにインベントリを記載し、テンプレート化するシェルスクリプト内では、"{{ ansible_host }}"と記述することで各ホストのIPアドレスをリモートサーバー上で展開することが可能になります。

hosts.ini
[compute]
host01 ansible_host=192.168.10.xx
host02 ansible_host=192.168.10.xx
host03 ansible_host=192.168.10.xx
host04 ansible_host=192.168.10.xx
host05 ansible_host=192.168.10.xx

テンプレート化するシェルスクリプトでは、以下のように変数を記述することでそれぞれのホストのIPアドレスが展開されるようになります。

test-script.sh.j2
host_ip_address={{ ansible_host }}

参考ドキュメントはこちら。
docs.ansible.com

おしまい!