def create_system(arch=u'i386', type=SystemType.machine, status=SystemStatus.automated, owner=None, fqdn=None, shared=True, exclude_osmajor=[], exclude_osversion=[], hypervisor=None, kernel_type=None, date_added=None, return_existing=False, private=False, with_power=True, **kw): if owner is None: owner = create_user() if fqdn is None: fqdn = unique_name(u'system%s.testdata') if System.query.filter(System.fqdn == fqdn).count(): if return_existing: system = System.query.filter(System.fqdn == fqdn).first() for property, value in kw.iteritems(): setattr(system, property, value) else: raise ValueError('Attempted to create duplicate system %s' % fqdn) else: system = System(fqdn=fqdn,type=type, owner=owner, status=status, **kw) session.add(system) if date_added is not None: system.date_added = date_added system.custom_access_policy = SystemAccessPolicy() if not private: system.custom_access_policy.add_rule(SystemPermission.view, everybody=True) if shared: system.custom_access_policy.add_rule( permission=SystemPermission.reserve, everybody=True) if isinstance(arch, list): for a in arch: system.arch.append(Arch.by_name(a)) system.excluded_osmajor.extend(ExcludeOSMajor(arch=Arch.by_name(a), osmajor=osmajor) for osmajor in exclude_osmajor) system.excluded_osversion.extend(ExcludeOSVersion(arch=Arch.by_name(a), osversion=osversion) for osversion in exclude_osversion) else: system.arch.append(Arch.by_name(arch)) system.excluded_osmajor.extend(ExcludeOSMajor(arch=Arch.by_name(arch), osmajor=osmajor) for osmajor in exclude_osmajor) system.excluded_osversion.extend(ExcludeOSVersion(arch=Arch.by_name(arch), osversion=osversion) for osversion in exclude_osversion) if with_power: configure_system_power(system) if hypervisor: system.hypervisor = Hypervisor.by_name(hypervisor) if kernel_type: system.kernel_type = KernelType.by_name(kernel_type) system.date_modified = datetime.datetime.utcnow() log.debug('Created system %r', system) return system
def _from_csv(cls,system,data,csv_type,log): """ Import data from CSV file into System Objects """ try: arch = Arch.by_name(data['arch']) except ValueError: log.append("%s: Invalid Arch %s" % (system.fqdn, data['arch'])) return False if data['update'] and data['family']: try: osversion = OSVersion.by_name(OSMajor.by_name(unicode(data['family'])), unicode(data['update'])) except InvalidRequestError: log.append("%s: Invalid Family %s Update %s" % (system.fqdn, data['family'], data['update'])) return False if osversion not in [oldosversion.osversion for oldosversion in system.excluded_osversion_byarch(arch)]: if data['excluded'] == 'True': exclude_osversion = ExcludeOSVersion(osversion=osversion, arch=arch) system.excluded_osversion.append(exclude_osversion) system.record_activity(user=identity.current.user, service=u'CSV', action=u'Added', field=u'Excluded_families', old=u'', new=u'%s/%s' % (osversion, arch)) else: if data['excluded'] == 'False': for old_osversion in system.excluded_osversion_byarch(arch): if old_osversion.osversion == osversion: system.record_activity(user=identity.current.user, service=u'CSV', action=u'Removed', field=u'Excluded_families', old=u'%s/%s' % (old_osversion.osversion, arch), new=u'') session.delete(old_osversion) if not data['update'] and data['family']: try: osmajor = OSMajor.by_name(data['family']) except InvalidRequestError: log.append("%s: Invalid family %s " % (system.fqdn, data['family'])) return False if osmajor not in [oldosmajor.osmajor for oldosmajor in system.excluded_osmajor_byarch(arch)]: if data['excluded'].lower() == 'true': exclude_osmajor = ExcludeOSMajor(osmajor=osmajor, arch=arch) system.excluded_osmajor.append(exclude_osmajor) system.record_activity(user=identity.current.user, service=u'CSV', action=u'Added', field=u'Excluded_families', old=u'', new=u'%s/%s' % (osmajor, arch)) else: if data['excluded'].lower() == 'false': for old_osmajor in system.excluded_osmajor_byarch(arch): if old_osmajor.osmajor == osmajor: system.record_activity(user=identity.current.user, service=u'CSV', action=u'Removed', field=u'Excluded_families', old=u'%s/%s' % (old_osmajor.osmajor, arch), new=u'') session.delete(old_osmajor) return True
def create_system(arch=u'i386', type=SystemType.machine, status=None, owner=None, fqdn=None, shared=True, exclude_osmajor=[], exclude_osversion=[], hypervisor=None, kernel_type=None, date_added=None, return_existing=False, private=False, with_power=True, lab_controller=None, **kw): if owner is None: owner = create_user() if fqdn is None: name = get_test_name() fqdn = unique_name(u'system%s.' + name.replace('_', '.')) if status is None: status = SystemStatus.automated if lab_controller is not None else SystemStatus.manual if System.query.filter(System.fqdn == fqdn).count(): if return_existing: system = System.query.filter(System.fqdn == fqdn).first() for property, value in kw.iteritems(): setattr(system, property, value) else: raise ValueError('Attempted to create duplicate system %s' % fqdn) else: system = System(fqdn=fqdn,type=type, owner=owner, status=status, lab_controller=lab_controller, **kw) session.add(system) # Normally the system would be "idle" when first added, and then becomes # "pending" when a user flips it to Automated status. But for simplicity in # the tests, we will just force it back to "idle" here since we know we # just created it. This lets a subsequent call to the scheduler pick it up # immediately, without going through an iteration of # schedule_pending_systems() first. system.scheduler_status = SystemSchedulerStatus.idle if date_added is not None: system.date_added = date_added system.custom_access_policy = SystemAccessPolicy() if not private: system.custom_access_policy.add_rule(SystemPermission.view, everybody=True) if shared: system.custom_access_policy.add_rule( permission=SystemPermission.reserve, everybody=True) if isinstance(arch, list): for a in arch: system.arch.append(Arch.by_name(a)) system.excluded_osmajor.extend(ExcludeOSMajor(arch=Arch.by_name(a), osmajor=osmajor) for osmajor in exclude_osmajor) system.excluded_osversion.extend(ExcludeOSVersion(arch=Arch.by_name(a), osversion=osversion) for osversion in exclude_osversion) elif arch is not None: system.arch.append(Arch.by_name(arch)) system.excluded_osmajor.extend(ExcludeOSMajor(arch=Arch.by_name(arch), osmajor=osmajor) for osmajor in exclude_osmajor) system.excluded_osversion.extend(ExcludeOSVersion(arch=Arch.by_name(arch), osversion=osversion) for osversion in exclude_osversion) if with_power: configure_system_power(system) if hypervisor: system.hypervisor = Hypervisor.by_name(hypervisor) if kernel_type: system.kernel_type = KernelType.by_name(kernel_type) system.date_modified = datetime.datetime.utcnow() log.debug('Created system %r', system) return system