回答編集履歴
3
typo 修正
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 ステートメントの定義がないので、それを
|
108
|
+
* 17行目: when ステートメントの定義がないので、それを追加する
|
109
109
|
|
110
110
|
っで、以下のような感じでしょうか。2つのファイルのうち、片方は存在する、もう片方は存在しないパターンで試してみました。
|
111
111
|
|
2
投稿主様にコメントいただいた点を回答する形で追記。
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 モジュールのパラメータに関する言及を追加
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
|
|