On Fri, Dec 20, 2013 at 2:48 PM, Hrvoje Ribicic <[email protected]> wrote:
> > > > On Fri, Dec 20, 2013 at 11:20 AM, Helga Velroyen <[email protected]>wrote: > >> >> >> >> On Fri, Dec 20, 2013 at 10:09 AM, Hrvoje Ribicic <[email protected]> wrote: >> >>> This patch further expands the workload by performing various node >>> operations. >>> >>> Signed-off-by: Hrvoje Ribicic <[email protected]> >>> --- >>> qa/rapi-workload.py | 83 >>> +++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 83 insertions(+) >>> >>> diff --git a/qa/rapi-workload.py b/qa/rapi-workload.py >>> index 7d9699d..af7469c 100755 >>> --- a/qa/rapi-workload.py >>> +++ b/qa/rapi-workload.py >>> @@ -29,6 +29,7 @@ >>> >>> import sys >>> >>> +import ganeti.constants as constants >>> from ganeti.rapi.client import GanetiApiError >>> >>> import qa_config >>> @@ -333,6 +334,84 @@ def TestSingleInstance(client, instance_name, >>> alternate_name, node_one, >>> Finish(client, client.DeleteInstance, instance_name) >>> >>> >>> +def MarkUnmarkNode(client, node, state): >>> + """ Given a certain node state, marks a node as being in that state, >>> and then >>> + unmarks it. >>> + >>> + @type client C{GanetiRapiClientWrapper} >>> + @param client A wrapped RAPI client. >>> + @type node string >>> + @type state string >>> >> >> colons after variable names for consistency >> >> > > Will fix in one last swooping patch. > Sure. > > >> + >>> + """ >>> + # pylint: disable=W0142 >>> + Finish(client, client.ModifyNode, node, **{state: True}) >>> + Finish(client, client.ModifyNode, node, **{state: False}) >>> + # pylint: enable=W0142 >>> + >>> + >>> +def TestNodeOperations(client, non_master_node): >>> + """ Tests various operations related to nodes only >>> + >>> + @type client C{GanetiRapiClientWrapper} >>> + @param client A wrapped RAPI client. >>> + @type non_master_node string >>> + @param non_master_node The name of a non-master node in the c >> >> rfall Grid T-Grid Builders Recent Builds Buildslaves Changesources - About >> >> Transposed Grid View >> >> >>> Ganeti core >> >> rfall Grid T-Grid Builders Recent Builds Buildslaves Changesources - About >> >> Transposed Grid View >> >> >>> Ganeti core >> >> luster. >>> + >>> + """ >>> + >>> + client.GetNode(non_master_node) >>> + >>> + old_role = client.GetNodeRole(non_master_node) >>> + >>> + # Should fail >>> + Finish(client, client.SetNodeRole, >>> + non_master_node, "master", False, auto_promote=True) >>> + >>> + Finish(client, client.SetNodeRole, >>> + non_master_node, "regular", False, auto_promote=True) >>> + >>> + Finish(client, client.SetNodeRole, >>> + non_master_node, "master-candidate", False, auto_promote=True) >>> + >>> + Finish(client, client.SetNodeRole, >>> + non_master_node, "drained", False, auto_promote=True) >>> + >>> + Finish(client, client.SetNodeRole, >>> + non_master_node, old_role, False, auto_promote=True) >>> + >>> + Finish(client, client.PowercycleNode, >>> + non_master_node, force=False) >>> + >>> + storage_units_fields = [ >>> + "name", "allocatable", "free", "node", "size", "type", "used", >>> + ] >>> + >>> + for storage_type in [constants.ST_LVM_PV, >>> + constants.ST_LVM_VG, >>> + constants.ST_FILE, >>> + ]: >>> >> >> Consider using the constant constants.STS_REPORT which captures exactly >> those types that report storage space. >> >> ACK > >> >> >>> + storage_units = Finish(client, client.GetNodeStorageUnits, >>> + non_master_node, storage_type, >>> + ",".join(storage_units_fields)) >>> + >>> + if len(storage_units) > 0 and len(storage_units[0]) > 0: >>> + # Name is the first entry of the first result, allocatable the >>> other >>> + unit_name = storage_units[0][0] >>> + Finish(client, client.ModifyNodeStorageUnits, >>> + non_master_node, storage_type, unit_name, >>> + allocatable=not storage_units[0][1]) >>> + Finish(client, client.ModifyNodeStorageUnits, >>> + non_master_node, storage_type, unit_name, >>> + allocatable=storage_units[0][1]) >>> + Finish(client, client.RepairNodeStorageUnits, >>> + non_master_node, storage_type, unit_name) >>> + >>> + MarkUnmarkNode(client, non_master_node, "drained") >>>> >>>> rfall Grid T-Grid Builders Recent Builds Buildslaves Changesources - >>>> About >>> >>> Transposed Grid View >>> >>> >>>> Ganeti core >>> >>> + MarkUnmarkNode(client, non_master_node, "powered") >>> + MarkUnmarkNode(client, non_master_node, "offline") >>> + >>> + >>> def Workload(client): >>> """ The actual RAPI workload used for tests. >>> >>> @@ -370,6 +449,10 @@ def Workload(client): >>> instance_one.Release() >>> qa_config.ReleaseManyNodes(nodes) >>> >>> + node = qa_config.AcquireNode(exclude=qa_config.GetMasterNode()) >>> + TestNodeOperations(client, node.primary) >>> + node.Release() >>> + >>> >>> def Usage(): >>> sys.stderr.write("Usage:\n\trapi-workload.py qa-config-file") >>> -- >>> 1.8.5.1 >>> >>> >> Rest LGTM >> >> -- >> -- >> Helga Velroyen | Software Engineer | [email protected] | >> >> Google Germany GmbH >> Dienerstr. 12 >> 80331 München >> >> Registergericht und -nummer: Hamburg, HRB 86891 >> Sitz der Gesellschaft: Hamburg >> Geschäftsführer: Graham Law, Christine Elizabeth Flores >> > > Thanks, interdiff for constant change is: > > diff --git a/qa/rapi-workload.py b/qa/rapi-workload.py > index 7a5d13d..19a5e31 100755 > --- a/qa/rapi-workload.py > +++ b/qa/rapi-workload.py > @@ -387,10 +387,7 @@ def TestNodeOperations(client, non_master_node): > "name", "allocatable", "free", "node", "size", "type", "used", > ] > > - for storage_type in [constants.ST_LVM_PV, > - constants.ST_LVM_VG, > - constants.ST_FILE, > - ]: > + for storage_type in constants.STS_REPORT: > storage_units = Finish(client, client.GetNodeStorageUnits, > non_master_node, storage_type, > ",".join(storage_units_fields)) > (still) LGTM, thanks -- -- Helga Velroyen | Software Engineer | [email protected] | Google Germany GmbH Dienerstr. 12 80331 München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores
