def create_files(self, dest=None, src=None): auth = auth_from_uri(self.settings.couchdb_uri) if hasattr(self.settings, 'src_client_ldif') and ( self.settings.src_client_ldif): client_ldif = IspmanClientLDIF( open(self.settings.src_client_ldif, 'r'), sys.stdout, editor=auth[0] ) client_ldif.parse() data = [(k, v) for k, v in client_ldif.clients.iteritems()] json_files = FilesForCouch(data, dest) json_files.create() dns_ldif = IspmanDnsLDIF( open(src, 'r'), sys.stdout, self.settings, clients_ldif=client_ldif, editor=auth[0] ) else: dns_ldif = IspmanDnsLDIF( open(src, 'r'), sys.stdout, self.settings, editor=auth[0] ) dns_ldif.parse() if self.settings.show_ips: for ip in dns_ldif.a_record_ips: try: hostname = gethostbyaddr(ip)[0] except: hostname = None print("ip:{} ({}), \ndomains:{}\n".format( ip, hostname, dns_ldif.a_record_hosts[ip])) data = [[k, v] for k, v in dns_ldif.domains.iteritems()] docs_processor = DnsDocsProcessor(self.settings, data) docs_processor.process() json_files = FilesForCouch(data, dest, use_id_in_data=True) json_files.create()
class LdifPlainDnsCommand(SettingsCommand): def setup_parser(self, subparsers, config_parser): ldifplain_parser = subparsers.add_parser( 'dns-ldifplain', help="""converts ldif files to plain text""", description="""Converts ldifs to plain text dns data for diff from dns-export""" ) ldifplain_parser.add_argument(*config_parser['args'], **config_parser['kwargs']) ldifplain_parser.add_argument( "src", help="source of the ldif file with the DNS data", ) ldifplain_parser.add_argument( "dest", help="dest of the plain text dns data file", ) return ldifplain_parser def plain_text_records(self, dname, rtype, records): items = [] if rtype in records: for record in records[rtype]: key_id, value_id = self.dns_ldif.structure_map[rtype] if rtype != 'mx': key = record[key_id] value = record[value_id] else: key = "@" value = record[key_id] if value == '.': value = '' entry = u"{dname} {rtype} {key} {value}\n".format( dname=dname, rtype=rtype.upper(), key=key, value=value ) items.append(entry) return items def run(self): src, dest = self.settings.src, self.settings.dest output = [] self.dns_ldif = IspmanDnsLDIF( open(src, 'r'), sys.stdout, self.settings ) self.dns_ldif.parse() domains = [[k, v] for k, v in self.dns_ldif.domains.iteritems()] domains = sorted(domains, key=lambda x: x[0]) for domain in domains: for rtype in ['a', 'aaaa', 'cname', 'mx', 'ns', 'txt', 'srv']: dname, records = domain[0], domain[1] if rtype == 'ns': output.extend([u"%s NS @ %s\n" % (dname, n) for n in records['nameservers']]) else: output.extend(self.plain_text_records(dname, rtype, records)) output.sort() with open(dest, 'w') as f: f.writelines(output)
def run(self): src, dest = self.settings.src, self.settings.dest output = [] self.dns_ldif = IspmanDnsLDIF( open(src, 'r'), sys.stdout, self.settings ) self.dns_ldif.parse() domains = [[k, v] for k, v in self.dns_ldif.domains.iteritems()] domains = sorted(domains, key=lambda x: x[0]) for domain in domains: for rtype in ['a', 'aaaa', 'cname', 'mx', 'ns', 'txt', 'srv']: dname, records = domain[0], domain[1] if rtype == 'ns': output.extend([u"%s NS @ %s\n" % (dname, n) for n in records['nameservers']]) else: output.extend(self.plain_text_records(dname, rtype, records)) output.sort() with open(dest, 'w') as f: f.writelines(output)