'Add records.  The first argument is the replace mode.  If
false, RRs are added to an existing RRset; if true, the RRset
is replaced with the specified contents.  The second
argument is the section to add to.  The third argument
is always a name.  The other arguments can be:
- rdataset...
- ttl, rdata...
- ttl, rdtype, string...'

def _add(self, replace, section, name, *args):

    if isinstance(name, (str, unicode)):
        name = dns.name.from_text(name, None)
    if isinstance(args[0], dns.rdataset.Rdataset):
        for rds in args:
            if replace:
                self.delete(name, rds.rdtype)
            for rd in rds:
                self._add_rr(name, rds.ttl, rd, section=section)
    else:
        args = list(args)
        ttl = int(args.pop(0))
        if isinstance(args[0], dns.rdata.Rdata):
            if replace:
                self.delete(name, args[0].rdtype)
            for rd in args:
                self._add_rr(name, ttl, rd, section=section)
        else:
            rdtype = args.pop(0)
            if isinstance(rdtype, str):
                rdtype = dns.rdatatype.from_text(rdtype)
            if replace:
                self.delete(name, rdtype)
            for s in args:
                rd = dns.rdata.from_text(self.zone_rdclass, rdtype, s, self.origin)
                self._add_rr(name, ttl, rd, section=section)
