実現したいこと
statモジュールで対象ファイルの有無確認を行い、変数(stat.exists)の結果がtrueの場合に
①のタスクにて複数のファイルを同時に削除をしたいです。
対象ファイルは複数あるため、loopやwith_itemsを使って1タスク内で複数のファイルの有無を
同時にチェックして存在するファイルは削除したいです。
①のように"path"に対して1ファイルだけを設定してstatモジュールでチェックした場合、
変数(hoge_check.stat.exists)はbool型であるためファイルの有無がチェックできますが、
②のようにloop処理で"path"に対して複数のファイルを通す場合、
変数(hoge_check.stat.exists)は"VARIABLE IS NOT DEFINED!"となります。
変数(hoge_check.stat.exists)は、
'dict object' has no attribute 'stat'. 'dict object' has no attribute 'stat'
となり値が存在しない結果となります。
変数(hoge_check)を確認すると③の結果となっており、変数(hoge_check.results)はlist型であるため、stat.existsによるtrue/falseが確認出来ません。
1タスク内で複数のファイルの有無をチェックして、存在する場合に削除する方法はありますでしょうか。
fileモジュールのstateにabsentを設定すればファイルが無い場合には何もしないので
有無チェックは本来不要ですが、どのようにすれば有無チェック出来るのか知りたいです。
発生している問題・エラーメッセージ
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'hoge_check.stat.exists' failed. The error was: error while evaluating conditional (hoge_check.stat.exists): 'dict object' has no attribute 'stat'. 'dict object' has no attribute 'stat'\n\nThe error appears to be in '/hoge/hoge2.yml: line 15, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n- name: Check hoge_web.log\n ^ here\n"}
該当のソースコード
# 本来は下記のように複数ファイルの有無を同時にチェックして複数存在する場合は同時に削除したい - name: Check hoge_web.log ansible.builtin.stat: path: "{{ task_dir }}/hoge_hoge/{{ item }}" register: hoge_check loop: - "hoge1.log" - "hoge2.log" - name: Delete hoge_web.log ansible.builtin.file: path: "{{ task_dir }}/hoge_hoge/{{ item }}" state: absent loop: - "hoge1.log" - "hoge2.log" when: hoge_check.stat.exists
①
- name: Check hoge_web.log ansible.builtin.stat: path: "{{ task_dir }}/hoge_hoge/hoge1.log" register: hoge_check - name: Result hoge_web.log ansible.builtin.debug: var: hoge_check.stat.exists
結果
# var: hoge_check.stat.exists ok: [localhost] => { "hoge_check.stat.exists": true } # msg: hoge_check.stat.exists ok: [localhost] => { "msg": "bool" }
②
- name: Check hoge_web.log ansible.builtin.stat: path: "{{ task_dir }}/hoge_hoge/{{ item }}" loop: - "hoge1.log" - "hoge2.log" register: hoge_check - name: Result hoge_web.log ansible.builtin.debug: msg: hoge_check.results
結果
③
# var: hoge_check.stat.exists ok: [localhost] => { "hoge_check.stat.exists": "VARIABLE IS NOT DEFIND!" }
# msg: "{{ hoge_check.results | type_debug }}" ok: [localhost] => { "msg": "list" }
④
hoge.yml
1- name: Check hoge_web.log 2 ansible.builtin.stat: 3 path: "{{ task_dir }}/hoge_hoge/{{ item }}" 4 register: hoge_check 5 loop: 6 - "hoge1.log" 7 - "hoge2.log" 8 9- name: Delete hoge_web.log 10 ansible.builtin.file: 11 path: "{{ task_dir }}/hoge_hoge/{{ item }}" 12 state: absent 13 register: check_loop ・ 14 ・ 15 loop: 16 - "hoge_check.results" 17 when:
Delete hoge_web.logタスクの結果
# 下記の「Check hoge_web.logタスクのitemに渡される一覧の抜粋」が次々と渡されている様子 ok: [localhost] => (item=[{'invocation': {'module_args': {'checksum_algorithm': 'sha1', 'get_checksum': True, 'follow': False, 'path': '/home/hoge_hoge/hoge1.log', 'get_md5': False, 'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'binary', 'uid': 0, 'exists': True, 'attr_flags': 'e', 'woth': False, 'isreg': True, 'device_type': 0, 'mtime': 1710652113.4640188, 'block_size': 4096, 'inode': 2416182, 'isgid': False, 'size': 1219, 'executable': False, 'roth': True, 'isuid': False, 'readable': True, 'version': '1282907058', 'pw_name': 'root', 'gid': 0, 'ischr': False, 'wusr': True, 'writeable': True, 'isdir': False, 'blocks': 8, 'xoth': False, 'rusr': True, 'nlink': 1, 'issock': False, 'rgrp': True, 'gr_name': 'root', 'path': '/home/hoge_hoge/hoge1.log', 'xusr': False, 'atime': 1710627251.1956754, 'mimetype': 'application/octet-stream', 'ctime': 1710652113.4640188, 'isblk': False, 'checksum': '4・・1b55・・・49a3d・・', 'dev': 64513, 'wgrp': False, 'isfifo': False, 'mode': '0644', 'xgrp': False, 'islnk': False, 'attributes': ['extents']}, 'changed': False, 'failed': False, 'item': 'saveMessage.log', 'ansible_loop_var': 'item'}, {'invocation': {'module_args': {'checksum_algorithm': 'sha1', 'get_checksum': True, 'follow': False, 'path': '/home/hoge_hoge/hoge2.log', 'get_md5': False, 'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'us-ascii', 'uid': 0, 'exists': True, 'attr_flags': 'e', 'woth': False, 'isreg': True, 'device_type': 0, 'mtime': 1710652114.3400238, 'block_size': 4096, 'inode': 2416199, 'isgid': False, 'size': 1189, 'executable': False, 'roth': True, 'isuid': False, 'readable': True, 'version': '1282907076', 'pw_name': 'root', 'gid': 0, 'ischr': False, 'wusr': True, 'writeable': True, 'isdir': False, 'blocks': 8, 'xoth': False, 'rusr': True, 'nlink': 1, 'issock': False, 'rgrp': True, 'gr_name': 'root', 'path': '/home/hoge_hoge/hoge2.log', 'xusr': False, 'atime': 1710627252.0996804, 'mimetype': 'text/plain', 'ctime': 1710652114.3400238, 'isblk': False, 'checksum': '960b・・・deb55337b07', 'dev': 64513, 'wgrp': False, 'isfifo': False, 'mode': '0644', 'xgrp': False, 'islnk': False, 'attributes': ['extents']}, 'changed': False, 'failed': False, 'item': 'hoge2.log', 'ansible_loop_var': 'item'}])
回答1件
あなたの回答
tips
プレビュー