Runtime-modifiable IP address sets¶
From within maintenance() or other places, we may find that certain IP
addresses must be treated differently for a certain time.
This may be used to temporarily shunt traffic to another pool for example.
TimedIPSetRule creates an object to which native IP addresses can be
added in ComboAddress form.
- class TimedIPSetRule¶
- class ctor TimedIPSetRule()
Can be used to handle IP addresses differently for a certain time.
- add(address, seconds)¶
Add an IP address to the set for the next
secondseconds.- Parameters:¶
address (
ComboAddress) – The address to addseconds (
int) – Time to keep the address in the Rule
- cleanup()¶
Purge the set from expired IP addresses
- clear()¶
Clear the entire set
- slice()¶
Convert the TimedIPSetRule into a DNSRule that can be passed to
addAction()
A working example:
tisrElGoog=TimedIPSetRule()
tisrRest=TimedIPSetRule()
addAction(tisrElGoog:slice(), PoolAction("elgoog"))
addAction(tisrRest:slice(), PoolAction(""))
elgoogPeople=newNMG()
elgoogPeople:addMask("192.168.5.0/28")
function pickPool(dq)
if(elgoogPeople:match(dq.remoteaddr)) -- in real life, this would be external
then
print("Lua caught query for a googlePerson")
tisrElGoog:add(dq.remoteaddr, 10)
return DNSAction.Pool, "elgoog"
else
print("Lua caught query for restPerson")
tisrRest:add(dq.remoteaddr, 60)
return DNSAction.None, ""
end
end
addAction(AllRule(), LuaAction(pickPool))