2016年8月11日木曜日

[CentOS6][Ansible] include_vars で外部ファイルに定義した変数を読み込む


Ansible のプレイブックで使用する変数を、個別のファイルに定義して、必要に応じて include_vars で読み込むことができます。

例えば、以下の2種類の変数ファイルを用意してパッケージをインストールしてみます。
demo1.yml は 「demo1サーバ用」、demo2.yml は「demo2サーバ用」とします。

[root@localhost workspace]# cat ./demo1.yml
---
pkg_names:
  - telnet
  - httpd
[root@localhost workspace]# cat ./demo2.yml
---
pkg_names:
  - mysql
  - tcpdump
[root@localhost workspace]#

プレイブックは以下のとおり。
「include_vars で変数ファイルを読み込むタスク」と、「yum でパッケージをインストールするタスク」があります。
なお、変数の TYPE の値は ansible を実行するときに引数で渡すことにします。

---
- hosts: all
  remote_user: root
  become: false
  vars:
  tasks:

    - name: 変数の入力
      include_vars: '{{TYPE}}.yml'

    - name: パッケージのインストール
      yum: name={{item}} state=latest
      with_items: '{{pkg_names}}'

demo1.yml を使用してプレイブックを実行すると以下のとおり。
--check をつけて自ホストでシミュレーションしてます。

[root@localhost workspace]# ansible-playbook -i ,127.0.0.1 ./test_playbook.yml --check --ask-pass -e "TYPE=demo1"
SSH password:

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

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [変数の入力] *******************************************************************
ok: [127.0.0.1]

TASK [パッケージのインストール] ************************************************************
changed: [127.0.0.1] => (item=[u'telnet', u'httpd'])

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0

[root@localhost workspace]#

こんどは demo2.yml を使用するようにプレイブックを実行してみます。

[root@localhost workspace]# ansible-playbook -i ,127.0.0.1 ./test_playbook.yml --check --ask-pass -e "TYPE=demo2"
SSH password:

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

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [変数の入力] *******************************************************************
ok: [127.0.0.1]

TASK [パッケージのインストール] ************************************************************
changed: [127.0.0.1] => (item=[u'mysql', u'tcpdump'])

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0

[root@localhost workspace]#