author | Tero Marttila <terom@paivola.fi> |
Tue, 10 Mar 2015 00:11:43 +0200 | |
changeset 739 | 5149c39f3dfc |
parent 214 | e314447c5621 |
permissions | -rw-r--r-- |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
Match DHCP clients by network. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
import optparse |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
import configobj |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
from pvl.verkko.utils import IPv4Address, IPv4Network |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
import logging; log = logging.getLogger('pvl.dhcp.rule') |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
def parser (parser) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
Optparse options for DHCPRule |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
parser.set_defaults( |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
dhcp_network = [], |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
dhcp_gateway = [], |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
parser = optparse.OptionGroup(parser, "DHCP host/lease matching") |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
parser.add_option('--dhcp-rules', metavar='CONF', |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
help="dhcp plugin instances by network/gateway") |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
27 |
parser.add_option('--dhcp-network', action='store_true', |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
help="dhcp plugin instance by network") |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
30 |
parser.add_option('--dhcp-gateway', action='store_true', |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
help="dhcp plugin instance by gateway") |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
return parser |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
def apply (options) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
Return DHCPRule from options. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
40 |
if options.dhcp_rules : |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
41 |
return DHCPRule.load(options, open(options.dhcp_rules)) |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
42 |
else : |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
43 |
return DHCPRule() |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
class DHCPRule (object) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
A rule matching DHCP hosts/leases by gateway/network. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
Note that leases don't have a gateway, but they're assumed to be valid, so we just ignore any gateway criteria for for unknown gateways. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
@classmethod |
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
54 |
def load (cls, options, file, name=None) : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
Load from config file. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
config = configobj.ConfigObj(file) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
61 |
return cls.load_section(options, name, config) |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
@classmethod |
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
64 |
def load_section (cls, options, name, section) : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
Rule from sub-sections and section. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
# recurse |
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
70 |
rules = tuple(cls.load_section(options, subsection, section[subsection]) for subsection in section.sections) |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
# rule |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
attrs = dict((name, section[name]) for name in section.scalars) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
try : |
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
76 |
return cls.config(options, name, rules, **attrs) |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
except ValueError as ex : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
raise ValueError("[%s] %s" % (name, ex)) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
@classmethod |
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
82 |
def config (cls, options, name, rules, gateway=None, network=None, interval=None) : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
83 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
Rule from section. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
if interval : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
log.warn("%s: interval: not implemented", name) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
90 |
if network and options.dhcp_network : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
network = IPv4Network(network) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
else : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
network = None |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
95 |
if gateway and options.dhcp_gateway : |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
96 |
gateway = gateway |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
97 |
else : |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
98 |
gateway = None |
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
99 |
|
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
return cls(name, rules, |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
gateway = gateway, |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
network = network, |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
|
214
e314447c5621
pvl.dhcp.DHCPRule: change --dhcp-network/gateway to select matching by network/gateway
Tero Marttila <terom@paivola.fi>
parents:
212
diff
changeset
|
105 |
def __init__ (self, name=None, rules=(), gateway=None, network=None) : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
Match as name by gateway/network. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
self.name = name |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
111 |
self.rules = rules |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
112 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
self.gateway = gateway |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
self.network = network |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
log.info("%s: gateway=%s, network=%s: %s", name, gateway, network, ' '.join(str(rule) for rule in rules)) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
def match (self, host) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
Match against given host. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
if self.gateway : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
124 |
gateway = host.get('gw') |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
125 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
if gateway and gateway != self.gateway : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
127 |
gateway = False |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
128 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
else : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
gateway = None |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
if self.network : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
network = host.get('ip') |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
|
212
c2bbde4007aa
pvl.dhcp.DHCPRule: fix network match
Tero Marttila <terom@paivola.fi>
parents:
211
diff
changeset
|
135 |
if network and network not in self.network : |
211
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
network = False |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
else : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
network = None |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
# decide |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
if network is False or gateway is False : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
# negative |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
return False |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
elif network or gateway : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
146 |
# (partial) positive |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
return True |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
148 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
else : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
# unknown |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
return None |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
def apply (self, host) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
Match { gw: str, ip: IPv4Address } against our rule and any sub rules, returning matching DHCPHostRule, or None. |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
156 |
""" |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
158 |
match = self.match(host) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
log.debug("%s: match: %s: %s", self, host, match) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
162 |
if match is False : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
# negative |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
return |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
for rule in self.rules : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
apply = rule.apply(host) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
169 |
if apply : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
170 |
return apply |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
log.debug("%s: apply: %s", self, host) |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
if match : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
# positive |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
return self |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
else : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
# unknown |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
return None |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
181 |
def __str__ (self) : |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
182 |
return self.name or '' |
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
183 |
|
cf74bbb95d2b
pvl.dhcp: split pvl.dhcp.rule.DHCPRule for use with leases
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
184 |