equal
deleted
inserted
replaced
3 """ |
3 """ |
4 |
4 |
5 import pvl.args |
5 import pvl.args |
6 import pvl.dns.zone |
6 import pvl.dns.zone |
7 |
7 |
|
8 import collections |
8 import configobj |
9 import configobj |
9 import ipaddr |
10 import ipaddr |
10 import optparse |
11 import optparse |
11 import os.path |
12 import os.path |
12 |
13 |
119 alias6 = alias6.split() |
120 alias6 = alias6.split() |
120 else : |
121 else : |
121 alias6 = () |
122 alias6 = () |
122 |
123 |
123 ethernet = { } |
124 ethernet = { } |
|
125 extensions = collections.defaultdict(dict) |
124 |
126 |
125 for field, value in extra.iteritems() : |
127 for field, value in extra.iteritems() : |
|
128 if ':' in field : |
|
129 extension, field = field.split(':', 1) |
|
130 |
|
131 extensions[extension][field] = value |
|
132 |
|
133 continue |
|
134 |
126 if '.' in field : |
135 if '.' in field : |
127 field, instance = field.split('.') |
136 field, instance = field.split('.') |
128 else : |
137 else : |
129 instance = None |
138 instance = None |
130 |
139 |
131 if field == 'ethernet' : |
140 if field == 'ethernet' : |
132 if instance : |
141 if instance : |
133 ethernet[instance] = value |
142 ethernet[instance] = value |
134 else : |
143 else : |
135 for eth in value.split() : |
144 for eth in value.split() : |
168 alias6 = alias6, |
177 alias6 = alias6, |
169 owner = owner, |
178 owner = owner, |
170 boot = boot, |
179 boot = boot, |
171 forward = forward, |
180 forward = forward, |
172 reverse = reverse, |
181 reverse = reverse, |
|
182 |
|
183 **extensions |
173 ) |
184 ) |
174 |
185 |
175 def __init__ (self, host, |
186 def __init__ (self, host, |
176 domain=None, |
187 domain=None, |
177 ip=None, ip6=None, |
188 ip=None, ip6=None, |
179 alias=(), |
190 alias=(), |
180 owner=None, |
191 owner=None, |
181 boot=None, |
192 boot=None, |
182 alias4=None, alias6=None, |
193 alias4=None, alias6=None, |
183 forward=None, reverse=None, |
194 forward=None, reverse=None, |
|
195 **extensions |
184 ) : |
196 ) : |
185 """ |
197 """ |
186 host - str |
198 host - str |
187 domain - str |
199 domain - str |
188 ip - ipaddr.IPv4Address |
200 ip - ipaddr.IPv4Address |
207 self.owner = owner |
219 self.owner = owner |
208 self.boot = boot |
220 self.boot = boot |
209 self.forward = forward |
221 self.forward = forward |
210 self.reverse = reverse |
222 self.reverse = reverse |
211 |
223 |
|
224 self.extensions = extensions |
|
225 |
212 def fqdn (self) : |
226 def fqdn (self) : |
213 if '.' in self.host : |
227 if '.' in self.host : |
214 return self.host + '.' |
228 return self.host + '.' |
215 elif self.domain : |
229 elif self.domain : |
216 return pvl.dns.zone.fqdn(self.host, self.domain) |
230 return pvl.dns.zone.fqdn(self.host, self.domain) |
217 else : |
231 else : |
218 raise ValueError("%s: have no fqdn/domain" % (self, )) |
232 raise ValueError("%s: have no fqdn/domain" % (self, )) |
219 |
233 |
220 def __str__ (self) : |
234 def __str__ (self) : |
221 return str(self.host) |
235 return str(self.host) |
222 |
236 |
223 def apply_host_includes (options, config_path, include) : |
237 def apply_host_includes (options, config_path, include) : |
224 """ |
238 """ |