示例#1
0
class WriteTemplate(Transaction, LoggerChild):
    def __init__(self, logger, filename, content):
        LoggerChild.__init__(self, logger)
        self.filename = filename
        self.new = File(self.filename + ".new", False)
        self.old = File(self.filename + ".old", False)
        self.content = content

    def prepare(self):
        umask(0077)
        with self.new.open("wb") as f:
            f.write(self.content)

    def save(self):
        umask(0077)
        self.old.copyFrom(self.filename)

    def apply(self):
        self.critical("Write the new multisite template")
        self.new.renameTo(self.filename)

    def rollback(self):
        if self.old.exist:
            self.old.renameTo(self.filename)
        else:
            unlinkQuiet(self.filename)

    def cleanup(self):
        self.old.unlink(quiet=True)
        self.new.unlink(quiet=True)
示例#2
0
class ReplaceTemplate(Transaction, LoggerChild):
    def __init__(self, logger, component, netcfg, ruleset, template, use_template):
        LoggerChild.__init__(self, logger)
        self.component = component
        self.netcfg = netcfg
        self.ruleset = ruleset  # Ruleset name (str)
        self.template = template
        self.use_template = use_template
        self.filename = rulesetFilename("ruleset", self.ruleset)
        self.old = File(self.filename + ".old", False)

    def save(self):
        umask(0077)
        self.old.copyFrom(self.filename)

    def apply(self):
        self.debug("Replace multisite templates in ruleset %s" % self.ruleset)
        logger = self.getLogger()
        ruleset = Ruleset(self.component, logger, self.netcfg)
        ruleset.load(logger, "ruleset", self.ruleset)
        if self.use_template:
            template = self.template
        else:
            template = None
        replaceTemplate(self.getLogger(), ruleset, template)
        ruleset.write(self.filename)

    def rollback(self):
        self.old.renameTo(self.filename)

    def cleanup(self):
        self.old.unlink(quiet=True)
示例#3
0
class WriteGenericLinks(Transaction, LoggerChild):
    def __init__(self, links, logger):
        LoggerChild.__init__(self, logger)
        self.filename = GENERIC_LINKS_XML
        self.links = links
        self.old = File(self.filename + ".old", False)

    def prepare(self):
        filename = self.filename + ".new"
        generic_links = BaseGenericLinks(filename)
        generic_links.setLinks(self.links)
        generic_links.write()
        self.new = File(filename, True)

    def save(self):
        umask(0077)
        self.old.copyFrom(self.filename)

    def apply(self):
        self.error("Write new generic links")
        self.new.renameTo(self.filename)

    def rollback(self):
        if self.old.exist:
            self.old.renameTo(self.filename)
        else:
            unlinkQuiet(self.filename)

    def cleanup(self):
        self.old.unlink(quiet=True)
        self.new.unlink(quiet=True)
示例#4
0
class RemoveTemplate(Transaction, LoggerChild):
    def __init__(self, logger, filename):
        LoggerChild.__init__(self, logger)
        self.filename = filename
        self.copy = File(self.filename + ".copy", False)

    def save(self):
        umask(0077)
        self.copy.copyFrom(self.filename)

    def apply(self):
        self.critical("Remove multisite template")
        try:
            unlink(self.filename)
        except IOError, err:
            raise RulesetError(tr("Unable to delete the multisite template: %s!"), exceptionAsUnicode(err))
示例#5
0
class WriteRules(Transaction, LoggerChild):
    def __init__(self, logger, ufwi_ruleset_rules):
        LoggerChild.__init__(self, logger)
        self.ufwi_ruleset_rules = ufwi_ruleset_rules
        self.filename = RULES_FILENAME
        self.old_rules = File(self.filename + ".old", False)
        self.new_rules = File(self.filename + ".new", False)

    def prepare(self):
        self.info("Write new rules")
        umask(0077)
        with self.new_rules.open("wb") as fp:
            pickle.dump(self.ufwi_ruleset_rules, fp, pickle.HIGHEST_PROTOCOL)

    def save(self):
        self.info("Keep current rules")
        umask(0077)
        self.old_rules.copyFrom(self.filename)

    def apply(self):
        self.error("Write rules to disk")
        try:
            self.new_rules.renameTo(self.filename)
        except OSError:
            self.error("No new rules to rename.")

    def rollback(self):
        self.error("Restore old rules")
        try:
            self.old_rules.renameTo(self.filename)
        except OSError:
            self.error("No old rules to rename.")


    def cleanup(self):
        self.error("Remove temp files")
        try:
            self.old_rules.unlink(quiet=True)
        except OSError:
            self.error("No old rules to clean.")
        try:
            self.new_rules.unlink(quiet=True)
        except OSError:
            self.error("No new rules to clean.")
示例#6
0
class ProductionRuleset(Transaction):
    def __init__(self, new_ruleset):
        Transaction.__init__(self)
        self.filename = PRODUCTION_RULESET
        self.new_ruleset = new_ruleset
        self.old_production = File(self.filename + ".old", False)

    def save(self):
        self.old_production.copyFrom(self.filename)

    def apply(self):
        copyfile(self.new_ruleset, self.filename)

    def rollback(self):
        if self.old_production.exist:
            self.old_production.renameTo(self.filename)
        else:
            unlinkQuiet(self.filename)

    def cleanup(self):
        self.old_production.unlink(quiet=True)