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動画