@@ -255,14 +255,46 @@ def check_dependency_version(handler: CheckResultHandler):
255
255
handler .log_info ('Checking dependency version...' )
256
256
shell = sh .LocalShell ()
257
257
out = shell .get_stdout_or_raise_error (None , 'corosync -v' )
258
- match = re .search (r"version\s+'((\d+)(?:\.\d+)*)'" , out )
259
- if not match or match .group (2 ) != '3' :
258
+ _check_version_range (
259
+ handler ,
260
+ 'Corosync' , (3 ,),
261
+ re .compile (r"version\s+'(\d+(?:\.\d+)*)'" ),
262
+ shell .get_stdout_or_raise_error (None , 'corosync -v' ),
263
+ )
264
+ _check_version_range (
265
+ handler ,
266
+ 'Pacemaker' , (3 ,),
267
+ re .compile (r"^Pacemaker\s+(\d+(?:\.\d+)*)" ),
268
+ shell .get_stdout_or_raise_error (None , 'pacemakerd --version' ),
269
+ )
270
+
271
+
272
+ def _check_version_range (
273
+ handler : CheckResultHandler , component_name : str ,
274
+ minimum : tuple ,
275
+ pattern ,
276
+ text : str ,
277
+ ):
278
+ match = pattern .search (text )
279
+ if not match :
260
280
handler .handle_problem (
261
- False , 'Corosync version not supported' , [
262
- 'Supported version: corosync >= 3 ' ,
263
- f'Actual version: corosync == { match . group ( 1 ) } ' ,
281
+ False , f' { component_name } version not supported' , [
282
+ 'Unknown version:' ,
283
+ text ,
264
284
],
265
285
)
286
+ else :
287
+ version = tuple (int (x ) for x in match .group (1 ).split ('.' ))
288
+ if not minimum <= version :
289
+ handler .handle_problem (
290
+ False , f'{ component_name } version not supported' , [
291
+ 'Supported version: {} <= {}' .format (
292
+ '.' .join (str (x ) for x in minimum ),
293
+ component_name ,
294
+ ),
295
+ f'Actual version: { component_name } == { match .group (1 )} ' ,
296
+ ],
297
+ )
266
298
267
299
268
300
def check_service_status (handler : CheckResultHandler ):
0 commit comments