class InstallerTools(object): def __init__(self): object.__init__(self) self.cfg = PaellaConfig() self.conn = PaellaConnection() self.profile = os.environ['PAELLA_PROFILE'] self.target = os.environ['PAELLA_TARGET'] self.suite = get_suite(self.conn, self.profile) self.pe = ProfileEnvironment(self.conn, self.profile) self.tp = TraitParent(self.conn, self.suite) def env(self): env = self.tp.Environment() env.update(self.pe.ProfileData()) return env def set_trait(self, trait): self.tp.set_trait(trait)
def make_traitlist_orig(self): traitparent = TraitParent(self.conn, self.suite) profile_traits = [x.trait for x in self.profiletrait.trait_rows()] all_traits = list(self.traitparent.get_traitset(profile_traits)) traitlist = [] while len(profile_traits): profile_traits_prepended = False trait = profile_traits[0] traitparent.set_trait(trait) parents = [r.parent for r in traitparent.parents()] for p in parents: if not profile_traits_prepended and p not in traitlist: profile_traits = [p] + profile_traits profile_traits_prepended = True self.log.info("profile_traits prepended with %s" % p) if not profile_traits_prepended: traitlist.append(trait) del profile_traits[0] self.log.info("%s %s" % (str(traitlist), profile_traits)) return traitlist
def make_traitlist_orig(self): traitparent = TraitParent(self.conn, self.suite) profile_traits = [x.trait for x in self.profiletrait.trait_rows()] all_traits = list(self.traitparent.get_traitset(profile_traits)) traitlist = [] while len(profile_traits): profile_traits_prepended = False trait = profile_traits[0] traitparent.set_trait(trait) parents = [r.parent for r in traitparent.parents()] for p in parents: if not profile_traits_prepended and p not in traitlist: profile_traits = [p] + profile_traits profile_traits_prepended = True self.log.info('profile_traits prepended with %s' % p) if not profile_traits_prepended: traitlist.append(trait) del profile_traits[0] self.log.info('%s %s' % (str(traitlist), profile_traits)) return traitlist
class ProfileInstaller(Installer): def __init__(self, conn, cfg): os.environ["DEBIAN_FRONTEND"] = "noninteractive" Installer.__init__(self, conn, cfg) self.profiletrait = ProfileTrait(self.conn) self.profile = None self.installer = None self.cfg = cfg self._profile = Profile(self.conn) self.log.info("profile installer initialized") def set_profile(self, profile): self.profile = profile self._profile.set_profile(profile) os.environ["PAELLA_PROFILE"] = profile self.profiletrait.set_profile(profile) self.traits = self.profiletrait.trait_rows() self.env = ProfileEnvironment(self.conn, self.profile) self.familydata = self._profile.get_family_data() self.profiledata = self._profile.get_profile_data() self.suite = get_suite(self.conn, profile) self.installer = TraitInstaller(self.conn, self.suite, self.cfg) self.installer.log = self.log self.installer.familydata = self.familydata self.installer.profiledata = self.profiledata self.traitparent = TraitParent(self.conn, self.suite) self.log.info("profile set to %s" % profile) def get_profile_data(self): return self.env.ProfileData() def set_logpath(self, logpath): Installer.set_logpath(self, logpath) if hasattr(self, "installer"): self.installer.set_logpath(logpath) def make_traitlist_orig(self): traitparent = TraitParent(self.conn, self.suite) profile_traits = [x.trait for x in self.profiletrait.trait_rows()] all_traits = list(self.traitparent.get_traitset(profile_traits)) traitlist = [] while len(profile_traits): profile_traits_prepended = False trait = profile_traits[0] traitparent.set_trait(trait) parents = [r.parent for r in traitparent.parents()] for p in parents: if not profile_traits_prepended and p not in traitlist: profile_traits = [p] + profile_traits profile_traits_prepended = True self.log.info("profile_traits prepended with %s" % p) if not profile_traits_prepended: traitlist.append(trait) del profile_traits[0] self.log.info("%s %s" % (str(traitlist), profile_traits)) return traitlist def make_traitlist(self): tp = TraitParent(self.conn, self.suite) listed = [x.trait for x in self.profiletrait.trait_rows()] all = list(self.traitparent.get_traitset(listed)) setfun = tp.set_trait parfun = tp.parents log = self.log return make_deplist(listed, all, setfun, parfun, log) def process(self): traits = self.make_traitlist() self.processed = [] for trait in traits: self.process_trait(trait) self.log.info("currently processed %s" % ",".join(self.processed)) self.log.info("all traits processed for profile %s" % self.profile) self.log.info("------------------------------------") def process_trait(self, trait): self.traitparent.set_trait(trait) self.installer.set_trait(trait) parents = [r.parent for r in self.traitparent.parents()] for p in parents: if p not in self.processed: raise UnbornError self.log.info("processing trait %s" % trait) self.installer.process() self.processed.append(trait) self.log.info("processed: %s" % ", ".join(self.processed)) def set_template_path(self, path): self.installer.set_template_path(path) def set_target(self, target, update=False): Installer.set_target(self, target) self.installer.set_target(target) if update: os.system(self.command("apt-get update")) def install_kernel(self, package): os.system(self.command("touch /boot/vmlinuz-fake")) os.system(self.command("ln -s boot/vmlinuz-fake vmlinuz")) os.system(self.command("apt-get -y install %s" % package)) print "kernel %s installed" % package
class TemplateEnvironment(ScrolledWindow): def __init__(self, conn): ScrolledWindow.__init__(self) self.conn = conn self.editor = TemplateEditor() self.menu = SimpleMenu() self.editor.connect('populate-popup', self.populate_menu, self.menu) self.add_with_viewport(self.editor) self.show() def set_suite(self, suite): self.suite = suite self.__set_suitecursors__() def __set_suitecursors__(self): self.traitparent = TraitParent(self.conn, self.suite) self.traittemplate = TraitTemplate(self.conn, self.suite) self.traitpackage = TraitPackage(self.conn, self.suite) def set_trait(self, trait): self.trait = trait self.traitparent.set_trait(trait) self.traittemplate.set_trait(trait) self.traitpackage.set_trait(trait) self.__set_environment__() def __set_environment__(self): self.environ = dict(self.traitparent.get_environment([self.trait])) self.sections = dict([(k, v.keys()) for k, v in self.environ.items()]) def populate_menu(self, widget, mainmenu, tmenu): self.__set_environment__() populate_menu(mainmenu, '_define_', ['_create_'], self.make_new_tag) for section, vars in self.sections.items(): populate_menu(mainmenu, section, vars, self.make_tag) def make_tag(self, menuitem, name, parent): parentname = parent.get_name() tagname = ujoin(parentname, name) self.editor.make_tag(tagname) def make_new_tag(self, menuitem, name, parent): parentname = parent.get_name() if (parentname, name) == ('_define_', '_create_'): self.editor.create_new_tag(self.create_entry) def create_entry(self, *args): var = dict(self.editor.dialogs['create'].items()) debug('var is %s' % var) self.environ[self.trait][var['name']] = var['value'] tagname = ujoin(self.trait, var['name']) self.editor.make_tag(tagname) self.editor.destroy_dialog(self.editor.dialogs['create']) def preview(self, *args): subs = self.traitparent.get_superdict(self.environ.keys()) self.editor.buffer.set_subs(subs) self.editor.preview(*args) def set_text(self, text): self.editor.buffer.set_text(text) def get_text(self): return self.editor.get_text()
class TemplateEnvironment(ScrolledWindow): def __init__(self, conn): ScrolledWindow.__init__(self) self.conn = conn self.editor = TemplateEditor() self.menu = SimpleMenu() self.editor.connect('populate-popup', self.populate_menu, self.menu) self.add_with_viewport(self.editor) self.show() def set_suite(self, suite): self.suite = suite self.__set_suitecursors__() def __set_suitecursors__(self): self.traitparent = TraitParent(self.conn, self.suite) self.traittemplate = TraitTemplate(self.conn, self.suite) self.traitpackage = TraitPackage(self.conn, self.suite) def set_trait(self, trait): self.trait = trait self.traitparent.set_trait(trait) self.traittemplate.set_trait(trait) self.traitpackage.set_trait(trait) self.__set_environment__() def __set_environment__(self): self.environ = dict(self.traitparent.get_environment([self.trait])) self.sections = dict([(k, v.keys()) for k,v in self.environ.items()]) def populate_menu(self, widget, mainmenu, tmenu): self.__set_environment__() populate_menu(mainmenu, '_define_', ['_create_'], self.make_new_tag) for section, vars in self.sections.items(): populate_menu(mainmenu, section, vars, self.make_tag) def make_tag(self, menuitem, name, parent): parentname = parent.get_name() tagname = ujoin(parentname, name) self.editor.make_tag(tagname) def make_new_tag(self, menuitem, name, parent): parentname = parent.get_name() if (parentname, name) == ('_define_', '_create_'): self.editor.create_new_tag(self.create_entry) def create_entry(self, *args): var = dict(self.editor.dialogs['create'].items()) debug('var is %s' % var) self.environ[self.trait][var['name']] = var['value'] tagname = ujoin(self.trait, var['name']) self.editor.make_tag(tagname) self.editor.destroy_dialog(self.editor.dialogs['create']) def preview(self, *args): subs = self.traitparent.get_superdict(self.environ.keys()) self.editor.buffer.set_subs(subs) self.editor.preview(*args) def set_text(self, text): self.editor.buffer.set_text(text) def get_text(self): return self.editor.get_text()
class InstallerTools(object): def __init__(self): object.__init__(self) self.cfg = PaellaConfig() self.conn = PaellaConnection() self.profile = os.environ['PAELLA_PROFILE'] self.target = os.environ['PAELLA_TARGET'] self.machine = None self.trait = None self.suite = get_suite(self.conn, self.profile) self.pr = Profile(self.conn) self.pr.set_profile(self.profile) self.traitlist = self.pr.make_traitlist() self.pe = ProfileEnvironment(self.conn, self.profile) self.tp = TraitParent(self.conn, self.suite) self.fm = Family(self.conn) self.tr = Trait(self.conn, self.suite) self.families = list( self.fm.get_related_families(self.pr.get_families())) self._envv = None self.default = DefaultEnvironment(self.conn) self.installer = TraitInstaller(self.conn, self.suite, self.cfg) if os.environ.has_key('PAELLA_MACHINE'): self.machine = os.environ['PAELLA_MACHINE'] if os.environ.has_key('PAELLA_TRAIT'): self.set_trait(os.environ['PAELLA_TRAIT']) def env(self): env = RefDict(self.tp.Environment()) env.update(self.pr.get_family_data()) env.update(self.pr.get_profile_data()) return env def set_trait(self, trait): self.trait = trait self.tp.set_trait(trait) self.tr.set_trait(trait) self.parents = self.tr.parents() self._envv = self.env() self.installer.set_trait(trait) self.packages = self.installer.traitpackage.packages() self.templates = self.installer.traittemplate.templates() def get(self, key): if self._envv is None: raise Error, 'need to set trait first' return self._envv.dereference(key) def install_modules(self, name): modules = str2list(self.get(name)) print 'installing modules', modules, 'to %s/etc/modules' % self.target setup_modules(self.target, modules) def remove_packages(self, packages=None): if packages is None: packages = self.packages if len(packages): if hasattr(packages[0], 'package'): packages = [p.package for p in packages] package_list = ' '.join(packages) command = 'apt-get -y remove %s' % package_list self.installer.run('remove', command, proc=True)
class ProfileInstaller(Installer): def __init__(self, conn, cfg): os.environ['DEBIAN_FRONTEND'] = 'noninteractive' Installer.__init__(self, conn, cfg) self.profiletrait = ProfileTrait(self.conn) self.profile = None self.installer = None self.cfg = cfg self._profile = Profile(self.conn) self.log.info('profile installer initialized') def set_profile(self, profile): self.profile = profile self._profile.set_profile(profile) os.environ['PAELLA_PROFILE'] = profile self.profiletrait.set_profile(profile) self.traits = self.profiletrait.trait_rows() self.env = ProfileEnvironment(self.conn, self.profile) self.familydata = self._profile.get_family_data() self.profiledata = self._profile.get_profile_data() self.suite = get_suite(self.conn, profile) self.installer = TraitInstaller(self.conn, self.suite, self.cfg) self.installer.log = self.log self.installer.familydata = self.familydata self.installer.profiledata = self.profiledata self.traitparent = TraitParent(self.conn, self.suite) self.log.info('profile set to %s' % profile) def get_profile_data(self): return self.env.ProfileData() def set_logpath(self, logpath): Installer.set_logpath(self, logpath) if hasattr(self, 'installer'): self.installer.set_logpath(logpath) def make_traitlist_orig(self): traitparent = TraitParent(self.conn, self.suite) profile_traits = [x.trait for x in self.profiletrait.trait_rows()] all_traits = list(self.traitparent.get_traitset(profile_traits)) traitlist = [] while len(profile_traits): profile_traits_prepended = False trait = profile_traits[0] traitparent.set_trait(trait) parents = [r.parent for r in traitparent.parents()] for p in parents: if not profile_traits_prepended and p not in traitlist: profile_traits = [p] + profile_traits profile_traits_prepended = True self.log.info('profile_traits prepended with %s' % p) if not profile_traits_prepended: traitlist.append(trait) del profile_traits[0] self.log.info('%s %s' % (str(traitlist), profile_traits)) return traitlist def make_traitlist(self): tp = TraitParent(self.conn, self.suite) listed = [x.trait for x in self.profiletrait.trait_rows()] all = list(self.traitparent.get_traitset(listed)) setfun = tp.set_trait parfun = tp.parents log = self.log return make_deplist(listed, all, setfun, parfun, log) def process(self): traits = self.make_traitlist() self.processed = [] for trait in traits: self.process_trait(trait) self.log.info('currently processed %s' % ','.join(self.processed)) self.log.info('all traits processed for profile %s' % self.profile) self.log.info('------------------------------------') def process_trait(self, trait): self.traitparent.set_trait(trait) self.installer.set_trait(trait) parents = [r.parent for r in self.traitparent.parents()] for p in parents: if p not in self.processed: raise UnbornError self.log.info('processing trait %s' % trait) self.installer.process() self.processed.append(trait) self.log.info('processed: %s' % ', '.join(self.processed)) def set_template_path(self, path): self.installer.set_template_path(path) def set_target(self, target, update=False): Installer.set_target(self, target) self.installer.set_target(target) if update: os.system(self.command('apt-get update')) def install_kernel(self, package): os.system(self.command('touch /boot/vmlinuz-fake')) os.system(self.command('ln -s boot/vmlinuz-fake vmlinuz')) os.system(self.command('apt-get -y install %s' % package)) print 'kernel %s installed' % package
class ProfileInstaller(Installer): def __init__(self, conn, cfg): Installer.__init__(self, conn, cfg) self.profiletrait = ProfileTrait(self.conn) self.profile = None self.installer = None self.cfg = cfg self.log.info('profile installer initialized') def set_profile(self, profile): self.profile = profile os.environ['PAELLA_PROFILE'] = profile self.profiletrait.set_profile(profile) self.traits = self.profiletrait.trait_rows() self.env = ProfileEnvironment(self.conn, self.profile) self.profiledata = self.get_profile_data() self.suite = get_suite(self.conn, profile) self.installer = TraitInstaller(self.conn, self.suite, self.cfg) self.installer.log = self.log self.installer.profiledata = self.profiledata self.traitparent = TraitParent(self.conn, self.suite) self.log.info('profile set to %s' % profile) def get_profile_data(self): return self.env.ProfileData() def set_logpath(self, logpath): Installer.set_logpath(self, logpath) if hasattr(self, 'installer'): self.installer.set_logpath(logpath) def make_traitlist(self): traitparent = TraitParent(self.conn, self.suite) profile_traits = [x.trait for x in self.profiletrait.trait_rows()] all_traits = list(self.traitparent.get_traitset(profile_traits)) traitlist = [] while len(profile_traits): profile_traits_prepended = False trait = profile_traits[0] traitparent.set_trait(trait) parents = [r.parent for r in traitparent.parents()] for p in parents: if not profile_traits_prepended and p not in traitlist: profile_traits = [p] + profile_traits profile_traits_prepended = True self.log.info('profile_traits prepended with %s' % p) if not profile_traits_prepended: traitlist.append(trait) del profile_traits[0] self.log.info('%s %s' % (str(traitlist), profile_traits)) return traitlist def process(self): traits = self.make_traitlist() self.processed = [] for trait in traits: self.process_trait(trait) self.log.info('currently processed %s' % ','.join(self.processed)) self.log.info('all traits processed for profile %s' % self.profile) self.log.info('------------------------------------') def process_trait(self, trait): self.traitparent.set_trait(trait) self.installer.set_trait(trait) parents = [r.parent for r in self.traitparent.parents()] for p in parents: if p not in self.processed: raise UnbornError self.log.info('processing trait %s' % trait) self.installer.process() self.processed.append(trait) self.log.info('processed: %s' % ', '.join(self.processed)) def set_template_path(self, path): self.installer.set_template_path(path) def set_target(self, target, update=False): Installer.set_target(self, target) self.installer.set_target(target) if update: os.system(self.command('apt-get update')) def install_kernel(self, package): os.system(self.command('touch /boot/vmlinuz-fake')) os.system(self.command('ln -s boot/vmlinuz-fake vmlinuz')) os.system(self.command('apt-get -y install %s' % package)) print 'kernel %s installed' % package
class InstallerTools(object): def __init__(self): object.__init__(self) self.cfg = PaellaConfig() self.conn = PaellaConnection() self.profile = os.environ['PAELLA_PROFILE'] self.target = os.environ['PAELLA_TARGET'] self.machine = None self.trait = None self.suite = get_suite(self.conn, self.profile) self.pr = Profile(self.conn) self.pr.set_profile(self.profile) self.traitlist = self.pr.make_traitlist() self.pe = ProfileEnvironment(self.conn, self.profile) self.tp = TraitParent(self.conn, self.suite) self.fm = Family(self.conn) self.tr = Trait(self.conn, self.suite) self.families = list(self.fm.get_related_families(self.pr.get_families())) self._envv = None self.default = DefaultEnvironment(self.conn) self.installer = TraitInstaller(self.conn, self.suite, self.cfg) if os.environ.has_key('PAELLA_MACHINE'): self.machine = os.environ['PAELLA_MACHINE'] if os.environ.has_key('PAELLA_TRAIT'): self.set_trait(os.environ['PAELLA_TRAIT']) def env(self): env = RefDict(self.tp.Environment()) env.update(self.pr.get_family_data()) env.update(self.pr.get_profile_data()) return env def set_trait(self, trait): self.trait = trait self.tp.set_trait(trait) self.tr.set_trait(trait) self.parents = self.tr.parents() self._envv = self.env() self.installer.set_trait(trait) self.packages = self.installer.traitpackage.packages() self.templates = self.installer.traittemplate.templates() def get(self, key): if self._envv is None: raise Error, 'need to set trait first' return self._envv.dereference(key) def install_modules(self, name): modules = str2list(self.get(name)) print 'installing modules', modules, 'to %s/etc/modules' % self.target setup_modules(self.target, modules) def remove_packages(self, packages=None): if packages is None: packages = self.packages if len(packages): if hasattr(packages[0], 'package'): packages = [p.package for p in packages] package_list = ' '.join(packages) command = 'apt-get -y remove %s' % package_list self.installer.run('remove', command, proc=True)