def create_distro_tree(distro=None, distro_name=None, osmajor=u'DansAwesomeLinux6', osminor=u'9', distro_tags=None, arch=u'i386', variant=u'Server', lab_controllers=None, urls=None, harness_dir=True, osmajor_installopts_arch=None, date_created=None, **kwargs): if distro is None: distro = create_distro(name=distro_name, osmajor=osmajor, osminor=osminor, tags=distro_tags, harness_dir=harness_dir, date_created=date_created) distro_tree = DistroTree.lazy_create(distro=distro, arch=Arch.lazy_create(arch=arch), variant=variant) if date_created is not None: distro_tree.date_created = date_created if distro_tree.arch not in distro.osversion.arches: distro.osversion.arches.append(distro_tree.arch) DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=variant, repo_type=u'variant', path=u'') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.kernel, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/vmlinuz') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.initrd, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/initrd') # make it available in all lab controllers by default if lab_controllers is None: lab_controllers = LabController.query for lc in lab_controllers: add_distro_tree_to_lab(distro_tree, lc, urls=urls) if osmajor_installopts_arch: io = OSMajorInstallOptions.lazy_create( osmajor_id=distro_tree.distro.osversion.osmajor.id, arch_id=distro_tree.arch.id) io.ks_meta = osmajor_installopts_arch.get('ks_meta', '') io.kernel_options = osmajor_installopts_arch.get('kernel_options', '') io.kernel_options_post = osmajor_installopts_arch.get( 'kernel_options_post', '') log.debug('Created distro tree %r', distro_tree) return distro_tree
def create_rhel62_server_x86_64(distro, lab_controller): rhel62_server_x86_64 = data_setup.create_distro_tree( distro=distro, variant=u'Server', arch=u'x86_64', lab_controllers=[lab_controller], urls=[ u'http://lab.test-kickstart.invalid/distros/RHEL-6.2/Server/x86_64/os/', u'nfs://lab.test-kickstart.invalid:/distros/RHEL-6.2/Server/x86_64/os/' ]) rhel62_server_x86_64.repos[:] = [ DistroTreeRepo(repo_id=u'HighAvailability', repo_type=u'addon', path=u'HighAvailability'), DistroTreeRepo(repo_id=u'LoadBalancer', repo_type=u'addon', path=u'LoadBalancer'), DistroTreeRepo(repo_id=u'ResilientStorage', repo_type=u'addon', path=u'ResilientStorage'), DistroTreeRepo(repo_id=u'ScalableFileSystem', repo_type=u'addon', path=u'ScalableFileSystem'), DistroTreeRepo(repo_id=u'Server', repo_type=u'os', path=u'Server'), DistroTreeRepo(repo_id=u'optional-x86_64-os', repo_type=u'addon', path=u'../../optional/x86_64/os'), DistroTreeRepo(repo_id=u'debug', repo_type=u'debug', path=u'../debug'), DistroTreeRepo(repo_id=u'optional-x86_64-debug', repo_type=u'debug', path=u'../../optional/x86_64/debug'), ] return rhel62_server_x86_64
def create_distro_tree(distro=None, distro_name=None, osmajor=u'DansAwesomeLinux6', osminor=u'9', distro_tags=None, arch=u'i386', variant=u'Server', lab_controllers=None, urls=None, harness_dir=True, osmajor_installopts_arch=None): if distro is None: distro = create_distro(name=distro_name, osmajor=osmajor, osminor=osminor, tags=distro_tags, harness_dir=harness_dir) distro_tree = DistroTree.lazy_create(distro=distro, arch=Arch.lazy_create(arch=arch), variant=variant) if distro_tree.arch not in distro.osversion.arches: distro.osversion.arches.append(distro_tree.arch) DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=variant, repo_type=u'variant', path=u'') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.kernel, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/vmlinuz') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.initrd, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/initrd') existing_urls = [lc_distro_tree.url for lc_distro_tree in distro_tree.lab_controller_assocs] # make it available in all lab controllers by default if lab_controllers is None: lab_controllers = LabController.query for lc in lab_controllers: default_urls = [u'%s://%s%s/distros/%s/%s/%s/os/' % (scheme, lc.fqdn, scheme == 'nfs' and ':' or '', distro_tree.distro.name, distro_tree.variant, distro_tree.arch.arch) for scheme in ['nfs', 'http', 'ftp']] for url in (urls or default_urls): if url in existing_urls: break lab_controller_distro_tree = LabControllerDistroTree( lab_controller=lc, url=url) distro_tree.lab_controller_assocs.append(lab_controller_distro_tree) if osmajor_installopts_arch: io = OSMajorInstallOptions.lazy_create(osmajor_id=distro_tree.distro.osversion.osmajor.id, arch_id=distro_tree.arch.id) io.ks_meta = osmajor_installopts_arch.get('ks_meta', '') io.kernel_options = osmajor_installopts_arch.get('kernel_options', '') io.kernel_options_post = osmajor_installopts_arch.get('kernel_options_post', '') log.debug('Created distro tree %r', distro_tree) return distro_tree
def create_distro_tree(distro=None, distro_name=None, osmajor=u'DansAwesomeLinux6', osminor=u'9', distro_tags=None, arch=u'i386', variant=u'Server', lab_controllers=None, urls=None, harness_dir=True): if distro is None: distro = create_distro(name=distro_name, osmajor=osmajor, osminor=osminor, tags=distro_tags, harness_dir=harness_dir) distro_tree = DistroTree.lazy_create(distro=distro, arch=Arch.lazy_create(arch=arch), variant=variant) if distro_tree.arch not in distro.osversion.arches: distro.osversion.arches.append(distro_tree.arch) DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=variant, repo_type=u'variant', path=u'') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.kernel, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/vmlinuz') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.initrd, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/initrd') existing_urls = [lc_distro_tree.url for lc_distro_tree in distro_tree.lab_controller_assocs] # make it available in all lab controllers by default if lab_controllers is None: lab_controllers = LabController.query for lc in lab_controllers: default_urls = [u'%s://%s%s/distros/%s/%s/%s/os/' % (scheme, lc.fqdn, scheme == 'nfs' and ':' or '', distro_tree.distro.name, distro_tree.variant, distro_tree.arch.arch) for scheme in ['nfs', 'http', 'ftp']] for url in (urls or default_urls): if url in existing_urls: break lab_controller_distro_tree = LabControllerDistroTree( lab_controller=lc, url=url) distro_tree.lab_controller_assocs.append(lab_controller_distro_tree) log.debug('Created distro tree %r', distro_tree) return distro_tree
def create_distro_tree(distro=None, distro_name=None, osmajor=u'DansAwesomeLinux6', osminor=u'9', distro_tags=None, arch=u'i386', variant=u'Server', lab_controllers=None, urls=None, harness_dir=True, osmajor_installopts_arch=None, **kwargs): if distro is None: distro = create_distro(name=distro_name, osmajor=osmajor, osminor=osminor, tags=distro_tags, harness_dir=harness_dir) distro_tree = DistroTree.lazy_create(distro=distro, arch=Arch.lazy_create(arch=arch), variant=variant) if distro_tree.arch not in distro.osversion.arches: distro.osversion.arches.append(distro_tree.arch) DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=variant, repo_type=u'variant', path=u'') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.kernel, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/vmlinuz') DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=ImageType.initrd, kernel_type=KernelType.by_name(u'default'), path=u'pxeboot/initrd') # make it available in all lab controllers by default if lab_controllers is None: lab_controllers = LabController.query for lc in lab_controllers: add_distro_tree_to_lab(distro_tree, lc, urls=urls) if osmajor_installopts_arch: io = OSMajorInstallOptions.lazy_create(osmajor_id=distro_tree.distro.osversion.osmajor.id, arch_id=distro_tree.arch.id) io.ks_meta = osmajor_installopts_arch.get('ks_meta', '') io.kernel_options = osmajor_installopts_arch.get('kernel_options', '') io.kernel_options_post = osmajor_installopts_arch.get('kernel_options_post', '') log.debug('Created distro tree %r', distro_tree) return distro_tree
def create_rhel62_server_x86_64(lab_controller): rhel62 = create_rhel62() x86_64 = Arch.by_name(u'x86_64') try: return DistroTree.query.filter_by(distro=rhel62, variant=u'Server', arch=x86_64).one() except NoResultFound: rhel62_server_x86_64 = data_setup.create_distro_tree( distro=rhel62, variant=u'Server', arch=u'x86_64', lab_controllers=[lab_controller], urls=[ u'http://lab.test-kickstart.invalid/distros/RHEL-6.2/Server/x86_64/os/', u'nfs://lab.test-kickstart.invalid:/distros/RHEL-6.2/Server/x86_64/os/' ]) rhel62_server_x86_64.repos[:] = [ DistroTreeRepo(repo_id=u'HighAvailability', repo_type=u'addon', path=u'HighAvailability'), DistroTreeRepo(repo_id=u'LoadBalancer', repo_type=u'addon', path=u'LoadBalancer'), DistroTreeRepo(repo_id=u'ResilientStorage', repo_type=u'addon', path=u'ResilientStorage'), DistroTreeRepo(repo_id=u'ScalableFileSystem', repo_type=u'addon', path=u'ScalableFileSystem'), DistroTreeRepo(repo_id=u'Server', repo_type=u'os', path=u'Server'), DistroTreeRepo(repo_id=u'optional-x86_64-os', repo_type=u'addon', path=u'../../optional/x86_64/os'), DistroTreeRepo(repo_id=u'debug', repo_type=u'debug', path=u'../debug'), DistroTreeRepo(repo_id=u'optional-x86_64-debug', repo_type=u'debug', path=u'../../optional/x86_64/debug'), ] return rhel62_server_x86_64
def add_distro_tree(self, new_distro): lab_controller = identity.current.user.lab_controller variant = new_distro.get('variant') arch = Arch.lazy_create(arch=new_distro['arch']) osmajor = OSMajor.lazy_create(osmajor=new_distro['osmajor']) try: osmajor = OSMajor.by_alias(new_distro['osmajor']) except NoResultFound: pass else: raise BX( _('Cannot import distro as %s: it is configured as an alias for %s' % (new_distro['osmajor'], osmajor.osmajor))) osversion = OSVersion.lazy_create(osmajor=osmajor, osminor=new_distro['osminor']) if 'arches' in new_distro: for arch_name in new_distro['arches']: osversion.add_arch(Arch.lazy_create(arch=arch_name)) osversion.add_arch(arch) distro = Distro.lazy_create(name=new_distro['name'], osversion=osversion) # Automatically tag the distro if tags exists if 'tags' in new_distro: for tag in new_distro['tags']: distro.add_tag(tag) distro.date_created = datetime.utcfromtimestamp( float(new_distro['tree_build_time'])) distro_tree = DistroTree.lazy_create(distro=distro, variant=variant, arch=arch) distro_tree.date_created = datetime.utcfromtimestamp( float(new_distro['tree_build_time'])) if 'repos' in new_distro: for repo in new_distro['repos']: dtr = DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=repo['repoid'], repo_type=repo['type'], path=repo['path']) if 'kernel_options' in new_distro: distro_tree.kernel_options = new_distro['kernel_options'] if 'kernel_options_post' in new_distro: distro_tree.kernel_options_post = new_distro['kernel_options_post'] if 'ks_meta' in new_distro: distro_tree.ks_meta = new_distro['ks_meta'] if 'images' in new_distro: for image in new_distro['images']: try: image_type = ImageType.from_string(image['type']) except ValueError: continue # ignore if 'kernel_type' not in image: image['kernel_type'] = 'default' try: kernel_type = KernelType.by_name(image['kernel_type']) except ValueError: continue # ignore dti = DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=image_type, kernel_type=kernel_type, path=image['path']) DistroTrees.add_distro_urls(distro_tree, lab_controller, new_distro['urls']) return distro_tree.id
def add_distro_tree(self, new_distro): lab_controller = identity.current.user.lab_controller # osmajor is required if 'osmajor' in new_distro: osmajor = OSMajor.lazy_create(osmajor=new_distro['osmajor']) else: return '' if 'osminor' in new_distro: osversion = OSVersion.lazy_create(osmajor=osmajor, osminor=new_distro['osminor']) else: return '' if 'arches' in new_distro: for arch_name in new_distro['arches']: try: arch = Arch.by_name(arch_name) if arch not in osversion.arches: osversion.arches.append(arch) except NoResultFound: pass distro = Distro.lazy_create(name=new_distro['name'], osversion=osversion) arch = Arch.lazy_create(arch=new_distro['arch']) variant = new_distro.get('variant') distro_tree = DistroTree.lazy_create(distro=distro, variant=variant, arch=arch) # Automatically tag the distro if tags exists if 'tags' in new_distro: for tag in new_distro['tags']: if tag not in distro.tags: distro.tags.append(tag) if arch not in distro.osversion.arches: distro.osversion.arches.append(arch) distro_tree.date_created = datetime.utcfromtimestamp(float(new_distro['tree_build_time'])) distro.date_created = datetime.utcfromtimestamp(float(new_distro['tree_build_time'])) if 'repos' in new_distro: for repo in new_distro['repos']: dtr = distro_tree.repo_by_id(repo['repoid']) if dtr is None: dtr = DistroTreeRepo(repo_id=repo['repoid']) distro_tree.repos.append(dtr) dtr.repo_type = repo['type'] dtr.path = repo['path'] if 'kernel_options' in new_distro: distro_tree.kernel_options = new_distro['kernel_options'] if 'kernel_options_post' in new_distro: distro_tree.kernel_options_post = new_distro['kernel_options_post'] if 'ks_meta' in new_distro: distro_tree.ks_meta = new_distro['ks_meta'] if 'images' in new_distro: for image in new_distro['images']: try: image_type = ImageType.from_string(image['type']) except ValueError: continue # ignore if 'kernel_type' not in image: image['kernel_type'] = 'default' try: kernel_type = KernelType.by_name(image['kernel_type']) except NoResultFound: continue # ignore dti = distro_tree.image_by_type(image_type, kernel_type) if dti is None: dti = DistroTreeImage(image_type=image_type, kernel_type=kernel_type) distro_tree.images.append(dti) dti.path = image['path'] new_urls_by_scheme = dict((urlparse.urlparse(url).scheme, url) for url in new_distro['urls']) if None in new_urls_by_scheme: raise ValueError('URL %r is not absolute' % new_urls_by_scheme[None]) for lca in distro_tree.lab_controller_assocs: if lca.lab_controller == lab_controller: scheme = urlparse.urlparse(lca.url).scheme new_url = new_urls_by_scheme.pop(scheme, None) if new_url != None and lca.url != new_url: distro_tree.activity.append(DistroTreeActivity( user=identity.current.user, service=u'XMLRPC', action=u'Changed', field_name=u'lab_controller_assocs', old_value=u'%s %s' % (lca.lab_controller, lca.url), new_value=u'%s %s' % (lca.lab_controller, new_url))) lca.url = new_url for url in new_urls_by_scheme.values(): distro_tree.lab_controller_assocs.append(LabControllerDistroTree( lab_controller=lab_controller, url=url)) distro_tree.activity.append(DistroTreeActivity( user=identity.current.user, service=u'XMLRPC', action=u'Added', field_name=u'lab_controller_assocs', old_value=None, new_value=u'%s %s' % (lab_controller, url))) return distro_tree.id
def add_distro_tree(self, new_distro): lab_controller = identity.current.user.lab_controller variant = new_distro.get('variant') arch = Arch.lazy_create(arch=new_distro['arch']) osmajor = OSMajor.lazy_create(osmajor=new_distro['osmajor']) try: osmajor = OSMajor.by_alias(new_distro['osmajor']) except NoResultFound: pass else: raise BX( _('Cannot import distro as %s: it is configured as an alias for %s' % (new_distro['osmajor'], osmajor.osmajor))) osversion = OSVersion.lazy_create(osmajor=osmajor, osminor=new_distro['osminor']) if 'arches' in new_distro: for arch_name in new_distro['arches']: osversion.add_arch(Arch.lazy_create(arch=arch_name)) osversion.add_arch(arch) distro = Distro.lazy_create(name=new_distro['name'], osversion=osversion) # Automatically tag the distro if tags exists if 'tags' in new_distro: for tag in new_distro['tags']: distro.add_tag(tag) distro.date_created = datetime.utcfromtimestamp( float(new_distro['tree_build_time'])) distro_tree = DistroTree.lazy_create(distro=distro, variant=variant, arch=arch) distro_tree.date_created = datetime.utcfromtimestamp( float(new_distro['tree_build_time'])) if 'repos' in new_distro: for repo in new_distro['repos']: dtr = DistroTreeRepo.lazy_create(distro_tree=distro_tree, repo_id=repo['repoid'], repo_type=repo['type'], path=repo['path']) if 'kernel_options' in new_distro: distro_tree.kernel_options = new_distro['kernel_options'] if 'kernel_options_post' in new_distro: distro_tree.kernel_options_post = new_distro['kernel_options_post'] if 'ks_meta' in new_distro: distro_tree.ks_meta = new_distro['ks_meta'] if 'images' in new_distro: for image in new_distro['images']: try: image_type = ImageType.from_string(image['type']) except ValueError: continue # ignore if 'kernel_type' not in image: image['kernel_type'] = 'default' try: kernel_type = KernelType.by_name(image['kernel_type']) except ValueError: continue # ignore dti = DistroTreeImage.lazy_create(distro_tree=distro_tree, image_type=image_type, kernel_type=kernel_type, path=image['path']) new_urls_by_scheme = dict( (urlparse.urlparse(url).scheme, url) for url in new_distro['urls']) if None in new_urls_by_scheme: raise ValueError('URL %r is not absolute' % new_urls_by_scheme[None]) for lca in distro_tree.lab_controller_assocs: if lca.lab_controller == lab_controller: scheme = urlparse.urlparse(lca.url).scheme new_url = new_urls_by_scheme.pop(scheme, None) if new_url != None and lca.url != new_url: distro_tree.activity.append( DistroTreeActivity(user=identity.current.user, service=u'XMLRPC', action=u'Changed', field_name=u'lab_controller_assocs', old_value=u'%s %s' % (lca.lab_controller, lca.url), new_value=u'%s %s' % (lca.lab_controller, new_url))) lca.url = new_url for url in new_urls_by_scheme.values(): distro_tree.lab_controller_assocs.append( LabControllerDistroTree(lab_controller=lab_controller, url=url)) distro_tree.activity.append( DistroTreeActivity(user=identity.current.user, service=u'XMLRPC', action=u'Added', field_name=u'lab_controller_assocs', old_value=None, new_value=u'%s %s' % (lab_controller, url))) return distro_tree.id