回答編集履歴

3

typo 修正

2024/03/17 07:24

投稿

__kina
__kina

スコア11

test CHANGED
@@ -105,7 +105,7 @@
105
105
  * 11行目: fileモジュールの path パラメータは、前タスクの stat モジュールの実行結果から `item.stat.path` を参照する
106
106
  * 12行目: `state` パラメータのインデントを修正
107
107
  * 16行目: ダブルクォーテーションだけでは文字列として評価されてしまうため、 `"{{ hoge_check.results }}"` の形で変数を参照する
108
- * 17行目: when ステートメントの定義がないので、それを 18 行目に追加する
108
+ * 17行目: when ステートメントの定義がないので、それを追加する
109
109
 
110
110
  っで、以下のような感じでしょうか。2つのファイルのうち、片方は存在する、もう片方は存在しないパターンで試してみました。
111
111
 

2

投稿主様にコメントいただいた点を回答する形で追記。

2024/03/17 07:22

投稿

__kina
__kina

スコア11

test CHANGED
@@ -96,3 +96,54 @@
96
96
  }
97
97
 
98
98
  ```
99
+
100
+ 追記1:
101
+
102
+ コメントいただいた部分に回答しますね。
103
+ hoge.yml についての修正箇所は...
104
+
105
+ * 11行目: fileモジュールの path パラメータは、前タスクの stat モジュールの実行結果から `item.stat.path` を参照する
106
+ * 12行目: `state` パラメータのインデントを修正
107
+ * 16行目: ダブルクォーテーションだけでは文字列として評価されてしまうため、 `"{{ hoge_check.results }}"` の形で変数を参照する
108
+ * 17行目: when ステートメントの定義がないので、それを 18 行目に追加する
109
+
110
+ っで、以下のような感じでしょうか。2つのファイルのうち、片方は存在する、もう片方は存在しないパターンで試してみました。
111
+
112
+ ```yaml
113
+ ---
114
+ - hosts: localhost
115
+ gather_facts: false
116
+ tasks:
117
+ - ansible.builtin.stat:
118
+ path: "hoge_hoge/{{ item }}"
119
+ register: hoge_check
120
+ loop:
121
+ - "hoge1.log" # 存在する
122
+ - "hoge2.log" # 存在しない
123
+
124
+ - ansible.builtin.file:
125
+ path: "{{ item.stat.path }}"
126
+ state: absent
127
+ loop: "{{ hoge_check.results }}"
128
+ when: item.stat.exists
129
+ ```
130
+
131
+ 実行結果
132
+ ```shell
133
+ ]$ ansible-playbook test.yml
134
+ [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
135
+
136
+ PLAY [localhost] ***********************************************************************************************************************************************************************************
137
+
138
+ TASK [ansible.builtin.stat] ************************************************************************************************************************************************************************
139
+ ok: [localhost] => (item=hoge1.log)
140
+ ok: [localhost] => (item=hoge2.log)
141
+
142
+ TASK [ansible.builtin.file] ************************************************************************************************************************************************************************
143
+ changed: [localhost] => (item={'changed': False, 'stat': {'exists': True, 'path': 'hoge_hoge/hoge1.log', (...) , 'failed': False, 'item': 'hoge1.log', 'ansible_loop_var': 'item'})
144
+ skipping: [localhost] => (item={'changed': False, 'stat': {'exists': False}, (...) , 'failed': False, 'item': 'hoge2.log', 'ansible_loop_var': 'item'})
145
+
146
+ PLAY RECAP *****************************************************************************************************************************************************************************************
147
+ localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
148
+ ```
149
+

1

debug モジュールのパラメータに関する言及を追加

2024/03/17 01:47

投稿

__kina
__kina

スコア11

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ですので、ファイルの削除タスクでは `hoge_check.results` を loop させて、when ステートメントもこれにあわせた定義にすると複数ファイルに対応してファイルの有無によるロジックを記述できるかと思います。
4
4
 
5
- トラブルシュートする際は、`ansible.builtin.debug` を積極的に活用して変数のデータ構造を確認する習慣をつけるとこの手の問題に悩まされることも少なくなると思いますのでオススメです。
5
+ トラブルシュートする際は、`ansible.builtin.debug` の `var` パラメータなどを積極的に活用して変数のデータ構造を確認する習慣をつけるとこの手の問題に悩まされることも少なくなると思いますのでオススメです。
6
6
 
7
7
  以下のような感じですね。ご参考になれば幸いです。
8
8