実現したいこと
psコマンドを使って特定のプロセス(hoge)の起動状態を確認して、起動していた場合には
エラー終了させたいです。
6行目のfailed_when句でnullの状態でなければエラー終了するように条件を設定していますが
該当するプロセスが起動している場合に処理が止まりません。
反対に該当プロセス(hoge)が起動していない場合、failed_when の判定ではエラー扱いとなり
タスクが停止してしまいます。
該当のplaybookについて何かお気づきの方がいらっしゃいましたらご教授頂けないでしょうか。
宜しくお願い致します。
該当のソースコード
hoge.yml
1 - name: Check yinst set 2 ansible.builtin.shell: 3 executable: /bin/bash 4 cmd: set -o pipefail && ps aux | grep hoge | grep -v grep 5 register: hoge_hoge 6 failed_when: hoge_hoge.stdout_lines | select('regex', null) | list | length != 1
# hogeプロセスが起動していない場合、リターンコードは1となり、変数(hoge_hoge.stdout_lines)の値はnull値"[]"に見えます。 - name: Echo result ansible.builtin.debug: msg: "{{ hoge_hoge }}" ok: [localhost] => { "msg": { "changed": false, "cmd": "set -o pipefail && ps aux | grep hoge | grep -v grep", "delta": "0:00:00.046253", "end": "2024-03-21 22:32:41.905407", "failed": false, "failed_when_result": false, "msg": "non-zero return code", "rc": 1, "start": "2024-03-21 22:32:41.859154", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": [] } }
# 変数(hoge_hoge) はdict型、値は"VARIABLE IS NOT DEFINED!" - name: Echo result ansible.builtin.debug: var: hoge_hoge ok: [localhost] => { "<class 'dict'>": "VARIABLE IS NOT DEFINED!" }
# 変数(hoge_hoge.stdout_lines) はlist型 - name: Echo result ansible.builtin.debug: msg: "{{ hoge_hoge.stderr_lines | type_debug }}" ok: [localhost] => { "msg": "list" }
試したこと
6行目のfailed_when句の設定(nullの場合の条件設定)が問題だと考えています。
nullの代わりに下記にしてみても結果は同じようにプロセス"hoge"が起動している場合は処理が止まらず
起動していない場合は処理が停止します。
failed_when: "'[]' in hoge_hoge.stdout_lines"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/03/22 01:45 編集
2024/03/23 03:56
2024/03/23 04:31