@@ -352,10 +352,35 @@ def parseFCoEInterface(self):
352352
353353 return results
354354
355+ def parseBonding (self , nethw ):
356+ nodes = getElementsByTagName (self .top_node , ['bonding' ])
357+ if len (nodes ) > 1 :
358+ raise AnswerfileException ("<bonding> must appear only once" )
359+ if nodes :
360+ node = nodes [0 ]
361+ bond_name = getStrAttribute (node , ['name' ], mandatory = True )
362+ if bond_name != "bond0" :
363+ raise AnswerfileException ("<bonding> name must be 'bond0'" )
364+
365+ bond_mode = getStrAttribute (node , ['mode' ], mandatory = True )
366+ if bond_mode != "lacp" :
367+ raise AnswerfileException ("<bonding> mode must be 'lacp'" )
368+
369+ bond_members_str = getStrAttribute (node , ['members' ], mandatory = True )
370+ bond_members = bond_members_str .split ("," )
371+ if len (bond_members ) < 2 :
372+ raise AnswerfileException ("<bonding> members must be at least two" )
373+ for member in bond_members :
374+ if member not in nethw :
375+ raise AnswerfileException ("<bonding> member %r not in detected NICs" % (member ,))
376+
377+ netutil .configure_bonding_interface (nethw , bond_name , bond_mode , bond_members )
378+
355379 def parseInterface (self ):
356380 results = {}
357381 node = getElementsByTagName (self .top_node , ['admin-interface' ], mandatory = True )[0 ]
358382 nethw = netutil .scanConfiguration ()
383+ self .parseBonding (nethw )
359384
360385 if_name = getStrAttribute (node , ['name' ])
361386 if_hwaddr = getStrAttribute (node , ['hwaddr' ])
0 commit comments