質問編集履歴

5

情報追加

2020/10/13 12:12

投稿

ntaniuch
ntaniuch

スコア12

test CHANGED
File without changes
test CHANGED
@@ -312,7 +312,7 @@
312
312
 
313
313
 
314
314
 
315
- こちらgroup_varsをコマンドから明示的に指定する方法はあるのでしょうか?
315
+ こちらgroup_varsを読ませるためのうまい書き方か、最悪コマンドから明示的に指定する方法はあるのでしょうか?
316
316
 
317
317
  またそもそも何故group_varsを読んでくれないのでしょうか?
318
318
 

4

情報追加

2020/10/13 12:12

投稿

ntaniuch
ntaniuch

スコア12

test CHANGED
File without changes
test CHANGED
@@ -36,9 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- やりたい構成でやってみると Permission denied とってしまう
39
+ やりたい構成でやってみると group_vars に設定した認証情報を読んでくれ
40
-
41
- (元の構成にすると当然問題ない)
42
40
 
43
41
 
44
42
 
@@ -306,4 +304,40 @@
306
304
 
307
305
 
308
306
 
307
+ # 問題の暫定対応策
308
+
309
+
310
+
311
+ 以下のようにインベントリファイルに変数まで書き、group_varsを読みに行かなくてもよいようにすることでPlaybookは実行することが出来ました。
312
+
313
+
314
+
315
+ こちらgroup_varsをコマンドから明示的に指定する方法はあるのでしょうか?
316
+
309
- **こうう場合調査の仕方のヒントだけも頂けると助ります**
317
+ またそもそも何故group_varsを読んでくれないのでしょう
318
+
319
+
320
+
321
+ $ cat inventory/fact.ini
322
+
323
+ ```
324
+
325
+ [prd_lin]
326
+
327
+ <ホストFQDN>
328
+
329
+
330
+
331
+ [prd_lin:vars]
332
+
333
+ ansible_user=opc
334
+
335
+ ansible_connection=ssh
336
+
337
+ ansible_port=22
338
+
339
+ ansible_ssh_private_key_file=<絶対パスで記載>
340
+
341
+ become_user=root
342
+
343
+ ```

3

情報追加

2020/10/13 11:57

投稿

ntaniuch
ntaniuch

スコア12

test CHANGED
File without changes
test CHANGED
@@ -252,6 +252,10 @@
252
252
 
253
253
 
254
254
 
255
+ ・group_varsに記載した秘密鍵や、ポート情報が表示されない。
256
+
257
+
258
+
255
259
  ```
256
260
 
257
261
  $ ansible-playbook -i inventory/fact.ini work/fact.yml -vvv
@@ -270,7 +274,7 @@
270
274
 
271
275
  <<ターゲットノード名>> (255, b'', b"Warning: Permanently added '<ターゲットノード名>,<IP>' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic).\r\n")
272
276
 
273
-
277
+ ```
274
278
 
275
279
 
276
280
 
@@ -278,6 +282,10 @@
278
282
 
279
283
 
280
284
 
285
+ ・group_varsに記載した秘密鍵や、ポート情報が表示される。
286
+
287
+
288
+
281
289
  ```
282
290
 
283
291
  $ ansible-playbook -i inventory/fact.ini fact.yml -vvv
@@ -298,12 +306,4 @@
298
306
 
299
307
 
300
308
 
301
- group_varsに記載した秘密鍵が接続出来ない場合には出力されません。
302
-
303
- その他使用ポートなども。
304
-
305
-
306
-
307
-
308
-
309
309
  **こういう場合の調査の仕方のヒントだけでも頂けると助かります**

2

情報追加

2020/10/13 11:40

投稿

ntaniuch
ntaniuch

スコア12

test CHANGED
File without changes
test CHANGED
@@ -62,6 +62,8 @@
62
62
 
63
63
  ```
64
64
 
65
+ <top directory>
66
+
65
67
  |- group_vars/prd_lin.yml # 認証情報を格納
66
68
 
67
69
  |- inventory/<サーバ名>.ini # インベントリ。グループ名を記載して、group_varsから認証情報を取得
@@ -196,4 +198,112 @@
196
198
 
197
199
 
198
200
 
201
+ # 調べたこと
202
+
203
+
204
+
205
+ ansible.cfgはトップディレクトリ直下のものを使ってくれていそうです。
206
+
207
+ (挙動的にはトップレベルPlaybookと同じ階層ではなくて、ansible-playbookコマンドを叩いた階層のものを使ってくれていそうですね。)
208
+
209
+
210
+
211
+
212
+
213
+ ```
214
+
215
+ $ ansible-playbook -i inventory/fact.ini work/fact.yml -vvv
216
+
217
+ ansible-playbook 2.9.11
218
+
219
+ config file = <top directory>/ansible.cfg★
220
+
221
+ configured module search path = ['<user home>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
222
+
223
+ ansible python module location = <user home>/.local/lib/python3.6/site-packages/ansible
224
+
225
+ executable location = /usr/local/bin/ansible-playbook
226
+
227
+ python version = 3.6.8 (default, Aug 7 2019, 08:02:28) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39.0.1)]
228
+
229
+ Using <top directory>/ansible.cfg as config file★
230
+
231
+ host_list declined parsing <top directory>/inventory/fact.ini as it did not pass its verify_file() method
232
+
233
+ script declined parsing <top directory>/inventory/fact.ini as it did not pass its verify_file() method
234
+
235
+ auto declined parsing <top directory>/inventory/fact.ini as it did not pass its verify_file() method
236
+
237
+ yaml declined parsing <top directory>/inventory/fact.ini as it did not pass its verify_file() method
238
+
239
+ Parsed <top directory>/inventory/fact.ini inventory source with ini plugin
240
+
241
+ ```
242
+
243
+
244
+
245
+
246
+
247
+ そして接続出来ていない理由ですが、group_varsに記載した認証情報がうまく使えていないためのようです。
248
+
249
+
250
+
251
+ ■接続出来ない場合
252
+
253
+
254
+
255
+ ```
256
+
257
+ $ ansible-playbook -i inventory/fact.ini work/fact.yml -vvv
258
+
259
+ ・・(中略)
260
+
261
+ TASK [setup] ***********************************************************************************************************************************************************
262
+
263
+ task path: <top directory>/work/fact.yml:8
264
+
265
+ Tuesday 13 October 2020 20:21:18 +0900 (0:00:00.036) 0:00:00.036 *******
266
+
267
+ <<ターゲットノード名>> ESTABLISH SSH CONNECTION FOR USER: None
268
+
269
+ <<ターゲットノード名>> SSH: EXEC ssh -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=<user home>/.ansible/cp/884b7719cc <ターゲットノード名> '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
270
+
271
+ <<ターゲットノード名>> (255, b'', b"Warning: Permanently added '<ターゲットノード名>,<IP>' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic).\r\n")
272
+
273
+
274
+
275
+
276
+
277
+ ■接続出来る場合
278
+
279
+
280
+
281
+ ```
282
+
283
+ $ ansible-playbook -i inventory/fact.ini fact.yml -vvv
284
+
285
+ ・・(中略)
286
+
287
+ TASK [setup] ***********************************************************************************************************************************************************
288
+
289
+ Tuesday 13 October 2020 20:23:19 +0900 (0:00:00.038) 0:00:00.038 *******
290
+
291
+ <<ターゲットノード名>> ESTABLISH SSH CONNECTION FOR USER: opc
292
+
293
+ <<ターゲットノード名>> SSH: EXEC ssh -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ★Port=22 -o 'IdentityFile="<user home>/<秘密鍵相対パス>/<秘密鍵名>"'★ -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="opc"' -o ConnectTimeout=10 -o ControlPath=<user home>/.ansible/cp/0fa6c29352 <ターゲットノード名> '/bin/sh -c '"'"'echo ~opc && sleep 0'"'"''
294
+
295
+ <<ターゲットノード名>> (0, b'/home/opc\n', b"Warning: Permanently added '<ターゲットノード名>,<IP>' (ECDSA) to the list of known hosts.\r\n")
296
+
297
+ ```
298
+
299
+
300
+
301
+ group_varsに記載した秘密鍵が接続出来ない場合には出力されません。
302
+
303
+ その他使用ポートなども。
304
+
305
+
306
+
307
+
308
+
199
309
  **こういう場合の調査の仕方のヒントだけでも頂けると助かります**

1

情報追加

2020/10/13 11:38

投稿

ntaniuch
ntaniuch

スコア12

test CHANGED
File without changes
test CHANGED
@@ -50,4 +50,150 @@
50
50
 
51
51
 
52
52
 
53
+ # 環境
54
+
55
+
56
+
57
+ こんなディレクトリ構成で実行しています。
58
+
59
+
60
+
61
+
62
+
63
+ ```
64
+
65
+ |- group_vars/prd_lin.yml # 認証情報を格納
66
+
67
+ |- inventory/<サーバ名>.ini # インベントリ。グループ名を記載して、group_varsから認証情報を取得
68
+
69
+ |- ansible.cfg # 内容は後述
70
+
71
+ |- work/fact.yml # 件の移動したいPlaybook
72
+
73
+ ```
74
+
75
+
76
+
77
+
78
+
79
+ それぞれ中身はこんな感じです。
80
+
81
+
82
+
83
+ > ansible-playbook -i inventory/fact.ini work/fact.yml
84
+
85
+
86
+
87
+ $ cat work/fact.yml
88
+
89
+ ```
90
+
91
+ # fact.yml
92
+
93
+ ---
94
+
95
+ - hosts: all
96
+
97
+ gather_facts: no
98
+
99
+ become: yes
100
+
101
+ become_user: opc
102
+
103
+ tasks:
104
+
105
+ - setup:
106
+
107
+
108
+
109
+ - debug: msg="{{ item }}"
110
+
111
+ loop:
112
+
113
+ - "{{ inventory_hostname }} : {{ ansible_nodename }} : {{ ansible_os_family }}"
114
+
115
+ ```
116
+
117
+
118
+
119
+ $ cat inventory/fact.ini
120
+
121
+ ```
122
+
123
+ # fact.ini
124
+
125
+
126
+
127
+ [prd_lin]
128
+
129
+ <ホストFQDN>
130
+
131
+ ```
132
+
133
+
134
+
135
+ $ cat group_vars/prd_lin.yml
136
+
137
+ ```
138
+
139
+ ansible_user: opc
140
+
141
+ ansible_connection: ssh
142
+
143
+ ansible_port: 22
144
+
145
+ ansible_ssh_private_key_file: <絶対パスで記載>
146
+
147
+ ```
148
+
149
+
150
+
151
+ $ cat ansible.cfg
152
+
153
+ ```
154
+
155
+ [defaults]
156
+
157
+ inventory_ignore_extensions = ~, .orig, .bak, .cfg, .retry, .pyc, .pyo, .md
158
+
159
+ interpreter_python = auto_silent
160
+
161
+ callback_whitelist = profile_tasks
162
+
163
+ log_path= ansible.log
164
+
165
+ remote_tmp = ~/.ansible/tmp
166
+
167
+ forks = 15
168
+
169
+ gathering = smart
170
+
171
+ fact_caching = jsonfile
172
+
173
+ fact_caching_connection = ./connect/facts
174
+
175
+ fact_caching_timeout = 3600
176
+
177
+ display_args_to_stdout = false
178
+
179
+
180
+
181
+ [privilege_escalation]
182
+
183
+ become = true
184
+
185
+
186
+
187
+ [ssh_connection]
188
+
189
+ control_path = %(directory)s/%%h-%%r
190
+
191
+ ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
192
+
193
+ host_key_checking = False
194
+
195
+ ```
196
+
197
+
198
+
53
199
  **こういう場合の調査の仕方のヒントだけでも頂けると助かります**