質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

733閲覧

Ansible selectattrの正規表現の条件文がエラーとなる

khaii21

総合スコア65

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2023/05/10 03:49

編集2023/05/10 16:42

実現したいこと

ファイルが存在しない場合、”stat”キーにある”exists”の結果がfalseなります。
falseだった場合にはNOを出力したいです。

ファイルの有無確認を行い、存在しない場合にはNOのメッセージを出力するplaybookを作成したのですが実行するとエラーとなります。
チェック対象の結果に対して意図通りに値が取得できません。
何かお気づきの方がいらっしゃましたらご教授頂けないでしょうか。
宜しくお願い致します。

発生している問題・エラーメッセージ

fatal: [localhost]: FAILED! => {"msg": "The conditional check 'chk_file | selectattr(\"exists\", \"match\", \"false\") | list | length == 1' failed. The error was: error while evaluating conditional (chk_file | selectattr(\"exists\", \"match\", \"false\") | list | length == 1): 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'exists'. 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'exists'\n\nThe error appears to be in '/hoge.yml': line ??, column ?, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n# ファイルが無い場合にはNO\n- name: hoge_hoge\n ^ here\n"}

該当のソースコード

playbook.yml

1- name: Check /etc/hoge.txt 2 ansible.builtin.stat: 3 path: /etc/hoge.txt 4 register: chk_file 5- name: Check chk_file 6 ansible.builtin.debug: 7 var: chk_file 8 9# ファイルが無い場合にはNO 10- name: hoge_hoge 11 ansible.builtin.debug: 12 msg: "NO" 13 register: execution_add_repo 14 when: chk_file | selectattr("exists", "match", "false") | list | length == 1

chk_fileの結果

1ok: [localhost] => { 2 "chk_file": { 3 "ansible_facts": { 4 "discovered_interpreter_python": "/usr/bin/python" 5 }, 6 "changed": false, 7 "failed": false, 8 "stat": { 9 "exists": false 10 } 11 } 12}

試したこと

selectattrの代わりにselectを使いましたがSyntax Errorになります

when: chk_file | select("regex", "\"exists\"\: false") | list | length == 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

chk_file.stat.existsで参照しましょう。
Ansibleモジュール(モジュールのつくりによりけり)の戻り値は、普通の文字列ではなく、yamlの変数として利用できます。

つまり

yaml

1when: not chk_file.stat.exists

になります。

投稿2023/05/10 04:24

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khaii21

2023/05/10 04:29

ご確認ありがとうございます。 大変助かりました。
comefigo

2023/05/10 07:42

無事解決できてよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問