pvl/hosts/host.py
changeset 733 45bedeba92e5
parent 696 55796948021e
child 734 5770ed34c1f0
equal deleted inserted replaced
732:ddb77f32b35a 733:45bedeba92e5
   174             Return a Host initialized from data attributes.
   174             Return a Host initialized from data attributes.
   175 
   175 
   176             This handles all string parsing to our data types.
   176             This handles all string parsing to our data types.
   177         """
   177         """
   178 
   178 
       
   179         ip4 = parse_dict(ip, ipaddr.IPv4Address)
       
   180         ip6 = parse_dict(ip6, ipaddr.IPv6Address)
       
   181 
       
   182         ip = {label: (ip4.get(label), ip6.get(label)) for label in set(ip4) | set(ip6)}
       
   183 
   179         return cls(name,
   184         return cls(name,
   180                 domain      = domain,
   185                 domain      = domain,
   181                 ip          = parse_ip(ip, ipaddr.IPv4Address),
   186                 ip4         = ip4.get(None),
   182                 ip6         = parse_ip(ip6, ipaddr.IPv6Address),
   187                 ip6         = ip6.get(None),
       
   188                 ip          = ip,
   183                 ethernet    = parse_dict(ethernet,  parse_ethernet),
   189                 ethernet    = parse_dict(ethernet,  parse_ethernet),
   184                 owner       = owner,
   190                 owner       = owner,
   185                 location    = parse_location(location, domain),
   191                 location    = parse_location(location, domain),
   186                 alias       = parse_list(alias),
   192                 alias       = parse_list(alias),
   187                 alias4      = parse_list(alias4),
   193                 alias4      = parse_list(alias4),
   192                 boot        = parse_dhcp_boot(boot),
   198                 boot        = parse_dhcp_boot(boot),
   193                 extensions  = extensions,
   199                 extensions  = extensions,
   194         )
   200         )
   195 
   201 
   196     def __init__ (self, name, domain,
   202     def __init__ (self, name, domain,
   197             ip=None, ip6=None,
   203             ip4=None, ip6=None,
       
   204             ip={},
   198             ethernet={ },
   205             ethernet={ },
   199             owner=None,
   206             owner=None,
   200             location=None,
   207             location=None,
   201             alias=(), alias4=(), alias6=(),
   208             alias=(), alias4=(), alias6=(),
   202             forward=None, reverse=None,
   209             forward=None, reverse=None,
   205             extensions={},
   212             extensions={},
   206     ):
   213     ):
   207         """
   214         """
   208             name        - str
   215             name        - str
   209             domain      - str
   216             domain      - str
   210             ip          - ipaddr.IPv4Address
   217             ip4         - primary ipaddr.IPv4Address
   211             ip6         - ipaddr.IPv6Address
   218             ip6         - primary ipaddr.IPv6Address
       
   219             ip          - secondary { index: (ip4, ip6) } interface addresses
   212             ethernet    - { index: ethernet }
   220             ethernet    - { index: ethernet }
   213             alias       - [ str ]: generate CNAMEs for given relative names
   221             alias       - [ str ]: generate CNAMEs for given relative names
   214             owner       - str: LDAP uid
   222             owner       - str: LDAP uid
   215             location    - None or (name, domain)
   223             location    - None or (name, domain)
   216             alias4      - [ str ]: generate additional A records for given relative names
   224             alias4      - [ str ]: generate additional A records for given relative names
   224             down        - mark as offline for polling
   232             down        - mark as offline for polling
   225         """
   233         """
   226 
   234 
   227         self.name = name
   235         self.name = name
   228         self.domain = domain
   236         self.domain = domain
       
   237         self.ip4 = ip4
       
   238         self.ip6 = ip6
   229         self.ip = ip
   239         self.ip = ip
   230         self.ip6 = ip6
       
   231         self.ethernet = ethernet
   240         self.ethernet = ethernet
   232         self.alias = alias
   241         self.alias = alias
   233         self.alias4 = alias4
   242         self.alias4 = alias4
   234         self.alias6 = alias6
   243         self.alias6 = alias6
   235         self.owner = owner
   244         self.owner = owner