Пример #1
0
    def run(self):
        conf = {
            'powerdns_backend': "sqlite",
            'powerdns_db': self.settings.db
        }
        self.pdns = Powerdns(ObjectDict(**conf))
        lookup_map_doc = self.db.get(self.pdns.map_doc_id)
        self.pdns.set_lookup_map(lookup_map_doc)

        domains = []
        for domain in self.db.view(
            self._cmd("domain_by_name"), include_docs=True
        ):
            domains.append(domain['key'])
        if self.settings.target:
            self._rebuild(self.settings.target)
        else:
            sys.stdout.write("Do you really want to procced and rebuild all domains? yes/no: ")
            choice = raw_input().lower()
            if choice == 'yes':
                self.pdns.del_domains()
                if not self.settings.only_delete:
                    for domain in domains:
                        print("adding:", domain)
                        self._rebuild(domain, pre_delete=False)
                else:
                    print("only deletion of data was requestd")
Пример #2
0
    def run(self):
        conf = {
            'powerdns_backend': "sqlite",
            'powerdns_db': self.settings.db
        }
        pdns = Powerdns(ObjectDict(**conf))
        dest = self.settings.dest
        output = []

        domains = pdns.get_domains()

        for domain in domains:
            records = pdns.get_records(domain)
            for rtype in records:
                for record in records[rtype]:
                    entry = u"{dname} {rtype} {key} {value}\n".format(
                            dname=domain, rtype=rtype.upper(),
                            key=record[0], value=record[1]
                    )
                    output.append(entry)
        output.sort()
        with open(dest, 'w') as f:
            f.writelines(output)
Пример #3
0
 def _remove_domain(self, domain, docs=None):
     # cleanup
     pdns = Powerdns(ObjectDict(**self.conf))
     pdns.del_domain(domain)
     if docs:
         self.db.delete_doc(docs)
Пример #4
0
class PowerdnsRebuildCommand(SettingsCommandDb):
    def setup_parser(self, subparsers, config_parser):
        rebuild_powerdns_parser = subparsers.add_parser(
            'dns-rebuild-powerdns',
            help="""rebuilds the dns entries for a domain""",
            description="""rebuilds the dns entries for a domain, or all domains"""
        )
        rebuild_powerdns_parser.add_argument(
            *config_parser['args'], **config_parser['kwargs']
        )

        rebuild_powerdns_parser.add_argument(
            "db",
            help="""path to the sqlite database"""
        )

        rebuild_powerdns_parser.add_argument(
            "target", default=None, nargs="?",
            help="name of the domain to process, or nothing for all domains (needs confirmation)",
        )

        rebuild_powerdns_parser.add_argument(
            "-d", "--only-delete", dest="only_delete",
            action="store_true", default=False,
            help="""only delete all domains, no recreate"""
        )

        return rebuild_powerdns_parser

    def _rebuild(self, domain, pre_delete=True):
        unmerged_doc = self.db.view(
            self._cmd("domain_by_name"), include_docs=True, key=domain
        ).one()['doc']
        doc = MergedDoc(self.db, unmerged_doc).doc
        self.pdns.doc = doc
        if pre_delete:
            self.pdns.set_domain(domain)
            last_serial = self.pdns.get_soa_serial()
            self.pdns.del_domain(domain)
            self.pdns.create()
            self.pdns.update_soa(serial=last_serial)
        else:
            self.pdns.create()
            self.pdns.update_soa(serial=None)

    def run(self):
        conf = {
            'powerdns_backend': "sqlite",
            'powerdns_db': self.settings.db
        }
        self.pdns = Powerdns(ObjectDict(**conf))
        lookup_map_doc = self.db.get(self.pdns.map_doc_id)
        self.pdns.set_lookup_map(lookup_map_doc)

        domains = []
        for domain in self.db.view(
            self._cmd("domain_by_name"), include_docs=True
        ):
            domains.append(domain['key'])
        if self.settings.target:
            self._rebuild(self.settings.target)
        else:
            sys.stdout.write("Do you really want to procced and rebuild all domains? yes/no: ")
            choice = raw_input().lower()
            if choice == 'yes':
                self.pdns.del_domains()
                if not self.settings.only_delete:
                    for domain in domains:
                        print("adding:", domain)
                        self._rebuild(domain, pre_delete=False)
                else:
                    print("only deletion of data was requestd")