問題:
Ansibleでターゲットノード上の状況により処理の実行可否を決める際、一般には別タスクでの事前情報収拾が必要
例えば以下の様に情報収集タスクと実行タスクの2タスク必要。
tasks
-
name: ターゲットノードで/tmp/abc.txtに"ABC"という文字列が含まれるならば
shell: grep "ABC" /tmp/abc.txt
register: r
-
name: 何らかの処理を行う
when: r.rc == 0
shell: rm /tmp/abc.txt
ソリューション:
when:にlookup('pipe','ssh ..')を使用して情報を入手させる対応が可能
例えば以下の様に書ける。
tasks
-
name: ターゲットノードで/tmp/abc.txtに"ABC"という文字列が含まれるならば何らかの処理を行う
when: >-
lookup('pipe','
ssh
-l '+ansible_env.SUDO_USER+'
-p '+ansible_ssh_port|string+'
-i '+ansible_ssh_private_key_file+'
-o StrictHostKeyChecking=no '+
ansible_ssh_host+'
grep -q "ABC" /tmp/abc.txt;
echo $?
') == '0'
shell: rm /tmp/abc.txt
書けないことは無いが、、、可読性は悪いですね。。。。
sudoなどは必要に応じて追加。
この例ではstdoutを使っているのでgrepの-qオプションなどを省くと問題が生じる。