def reserve(self, distro_tree_id, system_id=None, lab_controller_id=None): """ Either queue or provision the system now """ if system_id == 'search': redirect('/reserve_system', distro_tree_id=distro_tree_id) elif system_id: try: system = System.by_id(system_id, identity.current.user) except InvalidRequestError: flash(_(u'Invalid System ID %s' % system_id)) system_name = system.fqdn else: system_name = 'Any System' distro_names = [] return_value = dict( system_id = system_id, system = system_name, distro = '', distro_tree_ids = [], ) warn = None if not isinstance(distro_tree_id, list): distro_tree_id = [distro_tree_id] for id in distro_tree_id: try: distro_tree = DistroTree.by_id(id) if System.by_type(type=SystemType.machine, systems=distro_tree.systems(user=identity.current.user))\ .count() < 1: warn = _(u'No systems compatible with %s') % distro_tree distro_names.append(unicode(distro_tree)) return_value['distro_tree_ids'].append(id) except NoResultFound: flash(_(u'Invalid distro tree ID %s') % id) distro = ", ".join(distro_names) return_value['distro'] = distro return dict(form=self.reserveform, action='./doit', value = return_value, warn=warn, options = None, title='Reserve %s' % system_name)