@@ -195,6 +195,53 @@ func (s *Module) poolType(pool filesystem.Pool, vm bool) (zos.DeviceType, error)
195
195
return typ , nil
196
196
}
197
197
198
+ func (s * Module ) mountPool (device filesystem.DeviceInfo , vm bool ) {
199
+ log .Debug ().Str ("path" , device .Path ).Msg ("mounting device" )
200
+
201
+ if device .IsPXEPartition () {
202
+ log .Info ().Str ("device" , device .Path ).Msg ("device has 'ZOSPXE' label" )
203
+ s .brokenDevices = append (s .brokenDevices , pkg.BrokenDevice {Path : device .Path , Err : fmt .Errorf ("device is a PXE partition" )})
204
+ return
205
+ }
206
+
207
+ pool , err := filesystem .NewBtrfsPool (device )
208
+ if err != nil {
209
+ log .Error ().Err (err ).Str ("device" , device .Path ).Msg ("failed to create pool on device" )
210
+ s .brokenDevices = append (s .brokenDevices , pkg.BrokenDevice {Path : device .Path , Err : err })
211
+ return
212
+ }
213
+
214
+ _ , err = pool .Mount ()
215
+ if err != nil {
216
+ log .Error ().Err (err ).Str ("device" , device .Path ).Msg ("failed to mount pool" )
217
+ s .brokenPools = append (s .brokenPools , pkg.BrokenPool {Label : pool .Name (), Err : err })
218
+ return
219
+ }
220
+
221
+ usage , err := pool .Usage ()
222
+ if err != nil {
223
+ log .Error ().Err (err ).Str ("pool" , pool .Name ()).Str ("device" , device .Path ).Msg ("failed to get usage of pool" )
224
+ }
225
+
226
+ typ , err := s .poolType (pool , vm )
227
+ if err != nil {
228
+ log .Error ().Str ("device" , device .Path ).Err (err ).Msg ("failed to get device type" )
229
+ s .brokenDevices = append (s .brokenDevices , pkg.BrokenDevice {Path : device .Path , Err : err })
230
+ return
231
+ }
232
+
233
+ switch typ {
234
+ case zos .SSDDevice :
235
+ s .totalSSD += usage .Size
236
+ s .ssds = append (s .ssds , pool )
237
+ case zos .HDDDevice :
238
+ s .totalHDD += usage .Size
239
+ s .hdds = append (s .hdds , pool )
240
+ default :
241
+ log .Error ().Str ("type" , string (typ )).Str ("device" , device .Path ).Msg ("unknown device type" )
242
+ }
243
+ }
244
+
198
245
/*
199
246
*
200
247
initialize, must be called at least onetime each boot.
@@ -226,41 +273,14 @@ func (s *Module) initialize(ctx context.Context) error {
226
273
227
274
for _ , device := range devices {
228
275
log .Debug ().Msgf ("device: %+v" , device )
229
- pool , err := filesystem .NewBtrfsPool (device )
230
- if err != nil {
231
- log .Error ().Err (err ).Str ("device" , device .Path ).Msg ("failed to create pool on device" )
232
- s .brokenDevices = append (s .brokenDevices , pkg.BrokenDevice {Path : device .Path , Err : err })
233
- continue
234
- }
235
-
236
- _ , err = pool .Mount ()
237
- if err != nil {
238
- log .Error ().Err (err ).Str ("device" , device .Path ).Msg ("failed to mount pool" )
239
- s .brokenPools = append (s .brokenPools , pkg.BrokenPool {Label : pool .Name (), Err : err })
240
- continue
241
- }
242
- usage , err := pool .Usage ()
243
- if err != nil {
244
- log .Error ().Err (err ).Str ("pool" , pool .Name ()).Str ("device" , device .Path ).Msg ("failed to get usage of pool" )
245
- }
246
276
247
- typ , err := s . poolType ( pool , vm )
248
- if err != nil {
249
- log . Error (). Str ( "device" , device . Path ). Err ( err ). Msg ( "failed to get device type" )
250
- s . brokenDevices = append ( s . brokenDevices , pkg. BrokenDevice { Path : device . Path , Err : err })
277
+ if len ( device . Children ) != 0 {
278
+ for _ , part := range device . Children {
279
+ s . mountPool ( part , vm )
280
+ }
251
281
continue
252
282
}
253
-
254
- switch typ {
255
- case zos .SSDDevice :
256
- s .totalSSD += usage .Size
257
- s .ssds = append (s .ssds , pool )
258
- case zos .HDDDevice :
259
- s .totalHDD += usage .Size
260
- s .hdds = append (s .hdds , pool )
261
- default :
262
- log .Error ().Str ("type" , string (typ )).Str ("device" , device .Path ).Msg ("unknown device type" )
263
- }
283
+ s .mountPool (device , vm )
264
284
}
265
285
266
286
log .Info ().
0 commit comments