5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ansibleでサーバ毎に変数ファイルを使い分ける

Last updated at Posted at 2019-06-02

最近、新規のサーバーを構築するのに、Ansibleを使用しているのですが、
どうやったら各サーバー毎にvarsファイルを読み込ませることが出来るのか。。

悩んでいたら、@tanuki_mujina様のこの記事を拝見しました。大変わかりやすい記事をありがとうございます!
Ansibleでサーバ毎にユニークな処理を行う

しかし、自分の場合は、名前解決のしていない新規サーバーを一から構築したかったので、
IPアドレスだけでどうにかできないものかと、考えた末、前述の記事をヒントにこういう方法を見つけました。
※多分もっといい方法はあるのかなと思います。。ご教授いただけるとすごく喜びます。

インベントリファイル

まずインベントリファイルを以下の形で記述します。

hosts
[TestServer1]
192.168.0.5

[TestServer1:vars]
ansible_ssh_user=Ansible
ansible_ssh_pass=******
ansible_sudo_pass=******
ansible_ssh_port=22

[TestServer2]
192.168.0.6

[TestServer2:vars]
ansible_ssh_user=Ansible
ansible_ssh_pass=******
ansible_sudo_pass=******
ansible_ssh_port=22

変数ファイルの作成

varsディレクトリを作成し、ファイル名を「リモート対象のIPアドレス.yml」とします。

vars/192.168.0.5.yml
test: testno1
vars/192.168.0.6.yml
test: testno2

Playbookの作成

以下のようにPlaybookを記述します。
前述の記事では、ansible_hostname を使い、読み込み対象のvarsファイルを動的に生成していたのですが、今回はIPアドレスを使用したいので、 inventory_hostname を使用します。
inventory_hostname には、インベントリファイルに書かれたホスト名が設定されます。

site.yml
- hosts: all
  vars_files:
    - vars/{{ inventory_hostname }}.yml
  tasks:
    - debug: msg="TestServer={{test}}"

Playbookの実行

実行結果は以下のようになりました。

$ ansible-playbook -i hosts site.yml

PLAY [all] ****************************************************************************************

TASK [Gathering Facts] ****************************************************************************
ok: [192.168.0.6]
ok: [192.168.0.5]

TASK [debug] **************************************************************************************
ok: [192.168.0.5] => {
    "msg": "TestServer=testno1"
}
ok: [192.168.0.6] => {
    "msg": "TestServer=Testno2"
}

PLAY RECAP ****************************************************************************************
192.168.0.5                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.0.6                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ちゃんと各々のサーバー毎にユニークに変数が読み込まれていることがわかります。

その他参考

Using Variables
Ansible マジック変数の一覧と内容

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?