ansible-playbookコマンドを実行する際に、playbookに値を渡す方法を記載します。
結論から言えば、ansible-playbook -e "変数名=値"とすればplaybookに値を渡すことができます。
-eは--extra-varsと書き換えても実行可能です。
playbook内では、"{{ 変数名 }}"と記載すれば、引数で設定した値を取得できます。
実行例
この例ではAWS(EC2:CentOS7)にechoコマンドを実行し、ansible-playbook -eで指定した文字列を出力してみます。
hostsファイルはIP11.22.333.444のES2サーバーに対してcentosユーザーでログインする設定をしています。ログイン用の鍵はmykey.pemを使用します。
[group1]
11.22.333.444
[group1:vars]
ansible_user='centos'
ansible_ssh_private_key_file='~/.ssh/mykey.pem'
playbook.ymlでは、接続先サーバーの情報と実行コマンドを設定しています。
hosts: グループ名とすると、hostsファイルに定義されているグループのサーバー情報が読み込まれます。
- hosts: group1
tasks:
- name: echo_task
command: echo "{{ arg1 }}"
register: command_result
- name: result
debug:
msg: "{{ command_result.stdout }}"
tasks以降にはサーバーで実行するコマンドを記載します。
nameは任意のコメントを設定します。(なんでも良い)
commandにはサーバーで実行するコマンドを設定します。
echo "{{ arg1 }}"とすることで、ansible-playbook -e arg1="値"コマンド実行時に、"値"部分が"{{ arg1 }}"に設定されます。
register: command_resultはコマンドの実行結果を、command_resultに格納します。
debug: ~ msg:はコマンドの実行結果を出力するモジュールです。
この設定でansible-playbookコマンドを実行してみます。
ansible-playbook -i hosts playbook.yml -e "arg1=hoge"
PLAY [group1] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [11.22.333.444]
TASK [echo_task] ***************************************************************
changed: [11.22.333.444]
TASK [result] ******************************************************************
ok: [11.22.333.444] => {
"msg": "hoge"
}
PLAY RECAP *********************************************************************
11.22.333.444 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
"msg": "hoge"となっているため、echoコマンドでhogeが出力されていることを確認できました。
Udemy動画