考えたらわかる事だったのですが、ちょっと迷ってしまったのでメモ。
普通にtask単位での環境変数は environmentで可能です
- name: get hoge list
shell: hoge list
register: hoge_list
environment:
HOGE_URL: "hogehoge.com"
HOGE_USER: "hoge"
HOGE_PASSWORD: "password"
これで hoge のコマンド実行時に設定した環境変数が渡されます。
追加でまたhogeコマンドのtaskを追加したいとします。fugaユーザがいなかったら追加するタスクです。
そこにも環境変数が欲しい場合、毎回書くとこんな感じになって、コマンド増えるたびに追記が必要でちょっとしんどいですね。
- name: get hoge list
shell: hoge list
register: hoge_list
environment:
HOGE_URL: "hogehoge.com"
HOGE_USER: "hoge"
HOGE_PASSWORD: "password"
- name: create fuga user
shell: hoge create fuga
when: "hoge_list.stdout_lines | intersect('fuga') | length == 0"
environment:
HOGE_URL: "hogehoge.com"
HOGE_USER: "hoge"
HOGE_PASSWORD: "password"
このような、hoge コマンドで共通に使うような環境変数を逃すやり方として、有名なのが .bashrc
.bash_profire
に記述してあげる方法です。
echoで書いてあげれば可能なのですが、実行シェルの関係だったり読み込みタイミングだったり色々と面倒です。
https://qiita.com/FGtatsuro/items/2366c93131c47aef8dfe
あくまで、このplaybookを実行中だけ共通の環境変数を持ちたいならplayに書いてあげるのが楽だと思います。
- hosts: hoge_ip
environment:
HOGE_URL: "hogehoge.com"
HOGE_USER: "hoge"
HOGE_PASSWORD: "password"
serial: 1
become: yes
become_user: root
roles:
- create-hoge-jobs
これでtasksの記述が簡略化できます。taskには、あくまでそのタスクにだけ使うような物のみ記述してあげるのが良さそうです。
- name: get hoge list
shell: hoge list
register: hoge_list
- name: create fuga user
shell: hoge create fuga
when: "hoge_list.stdout_lines | intersect('fuga') | length == 0"
実行確認
$ hoge list | jq .
{
"stdout_lines": [
"hoge",
"piyo"
]
}
$ ansible-playbook -i 127.0.0.1, create_hoge_jobs.yml
PLAY [create_hoge_jobs] ***************************************************************************************************************************************************************
TASK [get hoge list] ****************************************************************************************************************************************************************
changed: [127.0.0.1]
TASK [create fuga user] ****************************************************************************************************************************************************************
ok: [127.0.0.1]
PLAY RECAP ****************************************************************************************************************************************************************************
127.0.0.1 : ok=1 changed=1 unreachable=0 failed=0
$ hoge list | jq .
{
"stdout_lines": [
"hoge",
"piyo",
"fuga"
]
}
hoge追加のtaskも通ってますね。両方通っているので、環境変数がうまく渡っています。