pvl/hosts/zone.py
changeset 734 5770ed34c1f0
parent 733 45bedeba92e5
child 740 74352351d6f5
equal deleted inserted replaced
733:45bedeba92e5 734:5770ed34c1f0
    29 
    29 
    30         yield pvl.dns.ZoneRecord.CNAME(label, forward)
    30         yield pvl.dns.ZoneRecord.CNAME(label, forward)
    31     
    31     
    32     elif host.forward is None:
    32     elif host.forward is None:
    33         # forward
    33         # forward
    34         for sublabel, (ip4, ip6) in host.ip.iteritems():
    34         for sublabel, ip in host.addresses():
    35             if sublabel:
    35             if sublabel:
    36                 sublabel = pvl.dns.join(sublabel, label)
    36                 sublabel = pvl.dns.join(sublabel, label)
    37             else:
    37             else:
    38                 sublabel = label
    38                 sublabel = label
    39             
    39             
    40             if ip4:
    40             if ip.version == 4:
    41                 log.info("%s: ip: %s@%s A %s", host, sublabel, origin, ip4)
    41                 log.info("%s: ip: %s@%s A %s", host, sublabel, origin, ip)
    42 
    42 
    43                 yield pvl.dns.ZoneRecord.A(sublabel, ip4)
    43                 yield pvl.dns.ZoneRecord.A(sublabel, ip)
    44 
    44 
    45             if ip6:
    45             elif ip.version == 6:
    46                 log.info("%s: ip6: %s@%s AAAA %s", host, label, origin, ip6)
    46                 log.info("%s: ip6: %s@%s AAAA %s", host, label, origin, ip)
    47 
    47 
    48                 yield pvl.dns.ZoneRecord.AAAA(sublabel, ip6)
    48                 yield pvl.dns.ZoneRecord.AAAA(sublabel, ip)
       
    49 
       
    50             else:
       
    51                 raise ValueError(ip)
    49 
    52 
    50     else:
    53     else:
    51         log.info("%s: skip forward", host)
    54         log.info("%s: skip forward", host)
    52         return
    55         return
    53 
    56 
    77 def host_reverse (host, prefix) :
    80 def host_reverse (host, prefix) :
    78     """
    81     """
    79         Yield (ipaddr.IPAddress, ZoneRecord) tuples for host within given prefix's reverse-dns zone.
    82         Yield (ipaddr.IPAddress, ZoneRecord) tuples for host within given prefix's reverse-dns zone.
    80     """
    83     """
    81     
    84     
    82     for sublabel, (ip4, ip6) in host.ip.iteritems():
    85     for sublabel, ip in host.addresses():
    83         if prefix.version == 4:
    86         if ip.version != prefix.version:
    84             ip = ip4
       
    85             
       
    86             # reverse= is IPv4-only
       
    87             reverse = host.reverse
       
    88 
       
    89         elif prefix.version == 6:
       
    90             ip = ip6
       
    91             
       
    92             # if reverse= is set, always omit, for lack of reverse6=
       
    93             reverse = None if host.reverse is None else False
       
    94 
       
    95         else:
       
    96             raise ValueError("%s: unknown ip version: %s" % (prefix, prefix.version))
       
    97 
       
    98         if not ip:
       
    99             log.debug("%s: no ip%d", host, prefix.version)
       
   100             continue
    87             continue
   101 
    88 
   102         if ip not in prefix:
    89         if ip not in prefix:
   103             log.debug("%s: %s out of prefix: %s", host, ip, prefix)
    90             log.debug("%s: %s out of prefix: %s", host, ip, prefix)
   104             continue
    91             continue
   105         
    92 
       
    93         if ip.version == 4:
       
    94             # reverse= is IPv4-only
       
    95             reverse = host.reverse
       
    96 
       
    97         elif prefix.version == 6:
       
    98             # if reverse= is set, always omit, for lack of reverse6=
       
    99             reverse = None if host.reverse is None else False
       
   100 
   106         # relative label
   101         # relative label
   107         label = pvl.dns.reverse_label(prefix, ip)
   102         label = pvl.dns.reverse_label(prefix, ip)
   108        
   103        
   109         if reverse:
   104         if reverse:
   110             alias = pvl.dns.fqdn(reverse)
   105             alias = pvl.dns.fqdn(reverse)