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}}'
--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]#
[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]#