author | Tero Marttila <terom@paivola.fi> |
Tue, 10 Mar 2015 00:11:43 +0200 | |
changeset 739 | 5149c39f3dfc |
parent 733 | 45bedeba92e5 |
permissions | -rw-r--r-- |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
1 |
import pvl.dhcp.config |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
2 |
import pvl.hosts.host |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
3 |
|
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
4 |
def parse_dhcp_boot(boot): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
5 |
""" |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
6 |
Parse the dhcp boot=... option |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
7 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
8 |
>>> print parse_dhcp_boot(None) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
9 |
{} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
10 |
>>> print parse_dhcp_boot({'filename': '/foo'}) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
11 |
{'filename': '/foo'} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
12 |
>>> print parse_dhcp_boot({'filename': '/foo', 'next-server': 'bar'}) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
13 |
{'next-server': 'bar', 'filename': '/foo'} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
14 |
>>> print parse_dhcp_boot('/foo') |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
15 |
{'filename': '/foo'} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
16 |
>>> print parse_dhcp_boot('bar:/foo') |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
17 |
{'next-server': 'bar', 'filename': '/foo'} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
18 |
>>> print parse_dhcp_boot('bar:') |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
19 |
{'next-server': 'bar'} |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
20 |
>>> print parse_dhcp_boot('foo') |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
21 |
Traceback (most recent call last): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
22 |
... |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
23 |
ValueError: invalid boot=foo |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
24 |
""" |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
25 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
26 |
# unpack dict, or str |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
27 |
if not boot: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
28 |
filename = next_server = None |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
29 |
boot_str = None |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
30 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
31 |
elif isinstance(boot, dict): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
32 |
filename = boot.pop('filename', None) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
33 |
next_server = boot.pop('next-server', None) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
34 |
boot_str = boot.pop(None, None) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
35 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
36 |
else: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
37 |
filename = next_server = None |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
38 |
boot_str = boot |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
39 |
boot = None |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
40 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
41 |
if boot: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
42 |
raise ValueError("Invalid boot.*: {instances}".format(instances=' '.join(boot))) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
43 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
44 |
# any boot= given overrides boot.* fields |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
45 |
if not boot_str: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
46 |
pass |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
47 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
48 |
elif boot_str.startswith('/'): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
49 |
filename = boot_str |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
50 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
51 |
elif boot_str.endswith(':'): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
52 |
next_server = boot_str[:-1] |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
53 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
54 |
elif ':' in boot_str: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
55 |
next_server, filename = boot_str.split(':', 1) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
56 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
57 |
else : |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
58 |
raise ValueError("invalid boot={boot}".format(boot=boot_str)) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
59 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
60 |
return next_server, filename |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
61 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
62 |
@pvl.hosts.host.register_extension |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
63 |
class HostDHCP(pvl.hosts.host.HostExtension): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
64 |
EXTENSION = 'dhcp' |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
65 |
EXTENSION_FIELDS = ( |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
66 |
'boot', |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
67 |
) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
68 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
69 |
@classmethod |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
70 |
def build (cls, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
71 |
boot = None, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
72 |
subclass = None, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
73 |
): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
74 |
next_server, filename = parse_dhcp_boot(boot) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
75 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
76 |
return cls( |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
77 |
filename = filename, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
78 |
subclass = subclass, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
79 |
next_server = next_server, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
80 |
) |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
81 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
82 |
def __init__(self, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
83 |
filename = None, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
84 |
next_server = None, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
85 |
subclass = None, |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
86 |
): |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
87 |
self.filename = filename |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
88 |
self.next_server = next_server |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
89 |
self.subclass = subclass |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
90 |
|
698
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
91 |
def dhcp_host_subclass (host, subclass, ethernet): |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
92 |
""" |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
93 |
Build a DHCP Item for declaring a subclass for a host. |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
94 |
""" |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
95 |
|
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
96 |
# hardware-type prefixed hardware-address |
700
88b0d3df1ad7
pvl.hosts.dhcp: subclass class name is a String
Tero Marttila <tero.marttila@aalto.fi>
parents:
698
diff
changeset
|
97 |
hardware = '1:' + ethernet |
698
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
98 |
|
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
99 |
return pvl.dhcp.config.Block(None, [ |
700
88b0d3df1ad7
pvl.hosts.dhcp: subclass class name is a String
Tero Marttila <tero.marttila@aalto.fi>
parents:
698
diff
changeset
|
100 |
('subclass', pvl.dhcp.config.String(subclass), pvl.dhcp.config.Field(hardware)), |
698
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
101 |
]) |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
102 |
|
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
103 |
class HostDHCPError(pvl.hosts.host.HostError): |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
104 |
pass |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
105 |
|
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
106 |
def dhcp_host_options (host, ethernet, dhcp=None): |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
107 |
""" |
669
83e9bff09a0b
pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents:
491
diff
changeset
|
108 |
Yield specific dhcp.conf host { ... } items. |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
109 |
""" |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
110 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
111 |
yield 'option', 'host-name', host.name |
697
3c3ac207ce3f
pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents:
689
diff
changeset
|
112 |
yield 'hardware', 'ethernet', pvl.dhcp.config.Field(ethernet) |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
113 |
|
733
45bedeba92e5
pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents:
731
diff
changeset
|
114 |
if host.ip4: |
45bedeba92e5
pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents:
731
diff
changeset
|
115 |
yield 'fixed-address', pvl.dhcp.config.Field(str(host.ip4)) |
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
116 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
117 |
if dhcp: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
118 |
if dhcp.next_server: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
119 |
yield 'next-server', dhcp.next_server |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
120 |
|
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
121 |
if dhcp.filename: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
122 |
yield 'filename', dhcp.filename |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
123 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
124 |
def dhcp_host (host): |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
125 |
""" |
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
126 |
Yield pvl.dhcp.config.Block's for given Host, with possible HostDHCP extensions. |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
127 |
""" |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
128 |
|
731
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
129 |
if not host.ethernet: |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
130 |
# nothing to be seen here |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
131 |
return |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
132 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
133 |
if host.owner : |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
134 |
comment = u"Owner: {host.owner}".format(host=host) |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
135 |
else: |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
136 |
comment = None |
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
137 |
|
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
138 |
dhcp = host.extensions.get('dhcp') |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
139 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
140 |
for index, ethernet in host.ethernet.iteritems() : |
731
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
141 |
if index: |
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
142 |
name = '{host.name}-{index}'.format(host=host, index=index) |
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
143 |
else: |
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
144 |
name = '{host.name}'.format(host=host) |
5e2c1b78047d
pvl.hosts.dhcp: fix mixed ethernet instance/None naming to be per-dhcp-host
Tero Marttila <terom@paivola.fi>
parents:
708
diff
changeset
|
145 |
|
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
146 |
items = list(dhcp_host_options(host, ethernet, dhcp=dhcp)) |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
147 |
|
698
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
148 |
yield pvl.dhcp.config.Block(('host', name), items, comment=comment) |
656178fb8607
pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents:
697
diff
changeset
|
149 |
|
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
150 |
if dhcp and dhcp.subclass: |
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
151 |
yield dhcp_host_subclass(host, dhcp.subclass, ethernet) |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
152 |
|
483
19d084bb4afd
pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents:
479
diff
changeset
|
153 |
def dhcp_hosts (hosts): |
479
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
154 |
""" |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
155 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
156 |
Verifies that there are no dupliate hosts. |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
157 |
""" |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
158 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
159 |
blocks = { } |
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
160 |
|
1e68e3a30b51
pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff
changeset
|
161 |
for host in hosts: |
739
5149c39f3dfc
pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
Tero Marttila <terom@paivola.fi>
parents:
733
diff
changeset
|
162 |
for block in dhcp_host(host): |
708
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
163 |
if not block.key: |
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
164 |
# TODO: check for unique Item-Blocks |
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
165 |
pass |
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
166 |
elif block.key in blocks: |
669
83e9bff09a0b
pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents:
491
diff
changeset
|
167 |
raise HostDHCPError(host, "dhcp {block} conflict with {other}; hosts on multiple networks must use unique ethernet.XXX=... naming".format(block=block, other=blocks[block.key])) |
708
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
168 |
else: |
fd6f0f044f42
pvl.hosts.dhcp: only check host blocks for uniqueness; ignore subclasses
Tero Marttila <tero.marttila@aalto.fi>
parents:
700
diff
changeset
|
169 |
blocks[block.key] = host |
483
19d084bb4afd
pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents:
479
diff
changeset
|
170 |
|
669
83e9bff09a0b
pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents:
491
diff
changeset
|
171 |
yield block |