148 lines
5.2 KiB
Python
148 lines
5.2 KiB
Python
|
|
"""
|
|
The atomicgroup module contains the objects and methods used to
|
|
manage atomic groups in Autotest.
|
|
|
|
The valid actions are:
|
|
create: Create a new atomic group.
|
|
delete: Delete (invalidate) an existing atomic group.
|
|
list: Lists atomic groups.
|
|
add: Adds labels to an atomic group.
|
|
remove: Removes labels from an atomic group.
|
|
|
|
See topic_common.py for a High Level Design and Algorithm.
|
|
"""
|
|
|
|
import os, sys
|
|
from autotest_lib.cli import topic_common, action_common
|
|
|
|
class atomicgroup(topic_common.atest):
|
|
"""
|
|
Atomic group class
|
|
|
|
atest atomicgroup [create|delete|list|add|remove] <options>
|
|
"""
|
|
usage_action = '[create|delete|list|add|remove]'
|
|
topic = 'atomic_group'
|
|
msg_topic = 'atomicgroup'
|
|
msg_items = '<atomicgroups>'
|
|
|
|
|
|
def __init__(self):
|
|
super(atomicgroup, self).__init__()
|
|
self.parser.add_option('-G', '--glist',
|
|
help='File listing the ATOMIC GROUPs',
|
|
type='string', default=None,
|
|
metavar='ATOMIC_GROUP_FLIST')
|
|
|
|
self.topic_parse_info = topic_common.item_parse_info(
|
|
attribute_name='atomicgroups',
|
|
filename_option='glist',
|
|
use_leftover=True)
|
|
|
|
|
|
def get_items(self):
|
|
return self.atomicgroups
|
|
|
|
|
|
class atomicgroup_help(atomicgroup):
|
|
"""Just to get the atest logic working. Usage is set by its parent."""
|
|
pass
|
|
|
|
|
|
class atomicgroup_list(action_common.atest_list, atomicgroup):
|
|
"""atest atomicgroup list [--show-invalid]"""
|
|
def __init__(self):
|
|
super(atomicgroup_list, self).__init__()
|
|
self.parser.add_option('-d', '--show-invalid',
|
|
help='Don\'t hide invalid atomic groups.',
|
|
action='store_true')
|
|
|
|
|
|
def parse(self):
|
|
options, leftover = super(atomicgroup_list, self).parse()
|
|
self.show_invalid = options.show_invalid
|
|
return options, leftover
|
|
|
|
|
|
def execute(self):
|
|
return super(atomicgroup_list, self).execute(op='get_atomic_groups')
|
|
|
|
|
|
def output(self, results):
|
|
if not self.show_invalid:
|
|
results = [atomicgroup for atomicgroup in results
|
|
if not atomicgroup['invalid']]
|
|
|
|
keys = ['name', 'description', 'max_number_of_machines', 'invalid']
|
|
super(atomicgroup_list, self).output(results, keys)
|
|
|
|
|
|
class atomicgroup_create(action_common.atest_create, atomicgroup):
|
|
def __init__(self):
|
|
super(atomicgroup_create, self).__init__()
|
|
self.parser.add_option('-n', '--max_number_of_machines',
|
|
help='Maximum # of machines for this group.',
|
|
type='int', default=None)
|
|
self.parser.add_option('-d', '--description',
|
|
help='Description of this atomic group.',
|
|
type='string', default='')
|
|
|
|
|
|
def parse(self):
|
|
options, leftover = super(atomicgroup_create, self).parse()
|
|
self.data_item_key = 'name'
|
|
self.data['description'] = options.description
|
|
self.data['max_number_of_machines'] = options.max_number_of_machines
|
|
return options, leftover
|
|
|
|
|
|
class atomicgroup_delete(action_common.atest_delete, atomicgroup):
|
|
"""atest atomicgroup delete <atomicgroup>"""
|
|
pass
|
|
|
|
|
|
class atomicgroup_add_or_remove(atomicgroup):
|
|
|
|
def __init__(self):
|
|
super(atomicgroup_add_or_remove, self).__init__()
|
|
# .add_remove_things is used by action_common.atest_add_or_remove.
|
|
self.add_remove_things = {'labels': 'label'}
|
|
lower_words = tuple(word.lower() for word in self.usage_words)
|
|
self.parser.add_option('-l', '--label',
|
|
help=('%s LABELS(s) %s the ATOMIC GROUP.' %
|
|
self.usage_words),
|
|
type='string',
|
|
metavar='LABEL')
|
|
self.parser.add_option('-L', '--label_list',
|
|
help='File containing LABELs to %s %s '
|
|
'the ATOMIC GROUP.' % lower_words,
|
|
type='string',
|
|
metavar='LABEL_FLIST')
|
|
|
|
|
|
def parse(self):
|
|
label_info = topic_common.item_parse_info(attribute_name='labels',
|
|
inline_option='label',
|
|
filename_option='label_list')
|
|
|
|
options, leftover = super(atomicgroup_add_or_remove,
|
|
self).parse([label_info],
|
|
req_items='atomicgroups')
|
|
if not getattr(self, 'labels', None):
|
|
self.invalid_syntax('%s %s requires at least one label' %
|
|
(self.msg_topic,
|
|
self.usage_action))
|
|
return options, leftover
|
|
|
|
|
|
class atomicgroup_add(action_common.atest_add, atomicgroup_add_or_remove):
|
|
"""atest atomicgroup add <atomicgroup>
|
|
[--label <label>] [--label_list <file>]"""
|
|
pass
|
|
|
|
|
|
class atomicgroup_remove(action_common.atest_remove, atomicgroup_add_or_remove):
|
|
"""atest atomicgroup remove <atomicgroup>
|
|
[--label <label>] [--label_list <file>]"""
|
|
pass
|