LoginSignup
17
20

More than 5 years have passed since last update.

Ansibleでサーバ毎にユニークな処理を行う

Last updated at Posted at 2016-01-06

Ansibleを使うと、複数のサーバで一斉に同じ処理を実行することができます。しかし、IPアドレスを設定するなど、サーバ毎に異なる処理を実行したい場合には、ちょっとした工夫が必要です。
以下では、処理対象のサーバ毎にユニークな値の変数を記述したファイルを準備し、playbook からそれを読み込む方法を説明します。

サンプルの内容

2台のサーバ tanuki と mujina に対して、各々、内容が異なる専用の変数ファイルを用意し、それらを読み込んで処理を実行する playbook を作成します。

インベントリファイルの作成

インベントリファイル ansible_hosts にサーバを記述します。

tanuki
mujina

変数ファイルの配置先ディレクトリの作成

各サーバの変数ファイルを配置するための vars ディレクトリを作成します。

# mkdir vars

変数ファイルの作成

varsディレクトリ配下に各サーバ毎に変数ファイルを作成します。ファイル名は ノード名.yml とします。内容としては、各サーバ固有のIPアドレスを my_iapddr 変数に設定するというものです。

vars/tanuki.yml

---
my_ipadder: 192.168.100.61

vars/mujina.yml

---
my_ipadder: 192.168.100.62

サンプル playbook の作成

サンプルとして、vars_files で各サーバ専用の変数ファイルを読み込み、debug モジュールで変化の内容を表示させる playbook を作成します。

---
- hosts: all
  vars_files:
    - vars/{{ansible_hostname}}.yml

  tasks:
    - debug: msg="my_ipaddr = {{ansible_hostname}}/{{my_ipaddr}}"

ここでは、読み込み対象のファイル名をマジック変数 ansible_hostname から動的に生成しています。ansible_hostname には、各ノードで hostname コマンドを実行した結果が設定されます。

サンプル playbook の実行

サンプル playbook の実行結果は以下のようになります。

# ansible-playbook -i ansible_hosts foreach.yml -u root -k
SSH password: 

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

GATHERING FACTS *************************************************************** 
ok: [tanuki]
ok: [mujina]
tanuki: importing vars/tanuki.yml
mujina: importing vars/mujina.yml

TASK: [debug msg="my_ipaddr = {{ansible_hostname}}/{{my_ipaddr}}"] ********* 
ok: [tanuki] => {
    "msg": "my_ipaddr = tanuki/192.168.100.61"
}
ok: [mujina] => {
    "msg": "my_ipaddr = mujina/192.168.100.62"
}

PLAY RECAP ******************************************************************** 
tanuki                     : ok=2    changed=0    unreachable=0    failed=0   
mujina                     : ok=2    changed=0    unreachable=0    failed=0   

各々のサーバ毎に専用の変数ファイルが読み込まれ、サーバ毎にユニークな値が表示されていることがわかります。

17
20
2

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
17
20