Add a ready plugin that allows plugin to signal when they are ready.
Once a plugin is ready it is not queried again.
This uses same mechanism as the health plugin: each plugin needs to
implement an interface.
Implement readines for the *erratic* plugin to aid in testing.
Add README.md and tests moduled after the health plugin; which will be
relegated to just providing process health. In similar vein to health
this is a process wide setting.
With this Corefile:
~~~
. {
erratic
whoami
ready
}
bla {
erratic
whoami
}
~~~
ready will lead to:
~~~ sh
% curl localhost:8181/ready
% dig @localhost -p 1053 mx example.org
% curl localhost:8181/ready
OK%
~~~
Meanwhile CoreDNS logs:
~~~
.:1053
bla.:1053
2019-02-26T20:59:07.137Z [INFO] CoreDNS-1.3.1
2019-02-26T20:59:07.137Z [INFO] linux/amd64, go1.11.4,
CoreDNS-1.3.1
linux/amd64, go1.11.4,
2019-02-26T20:59:11.415Z [INFO] plugin/ready: Still waiting on: "erratic"
2019-02-26T20:59:13.510Z [INFO] plugin/ready: Still waiting on: "erratic"
~~~
*ready* can be used in multiple server blocks and will do the right
thing; query all those plugins from all server blocks for readiness.
This does a similar thing to the prometheus plugin.
Signed-off-by: Miek Gieben <miek@miek.nl>
1.9 KiB
erratic
Name
erratic - a plugin useful for testing client behavior.
Description
erratic returns a static response to all queries, but the responses can be delayed, dropped or truncated. The erratic plugin will respond to every A or AAAA query. For any other type it will return a SERVFAIL response. The reply for A will return 192.0.2.53 (see RFC 5737, for AAAA it returns 2001:DB8::53 (see RFC 3849) and for an AXFR request it will respond with a small zone transfer.
erratic can also be used in conjunction with the autopath plugin. This is mostly to aid in testing.
Syntax
erratic {
drop [AMOUNT]
truncate [AMOUNT]
delay [AMOUNT [DURATION]]
}
drop: drop 1 per AMOUNT of queries, the default is 2.truncate: truncate 1 per AMOUNT of queries, the default is 2.delay: delay 1 per AMOUNT of queries for DURATION, the default for AMOUNT is 2 and the default for DURATION is 100ms.
In case of a zone transfer and truncate the final SOA record isn't added to the response.
Health
This plugin implements dynamic health checking. For every dropped query it turns unhealthy.
Ready
This plugin reports readiness to the ready plugin.
Examples
. {
erratic {
drop 3
}
}
Or even shorter if the defaults suits you. Note this only drops queries, it does not delay them.
. {
erratic
}
Delay 1 in 3 queries for 50ms
. {
erratic {
delay 3 50ms
}
}
Delay 1 in 3 and truncate 1 in 5.
. {
erratic {
delay 3 5ms
truncate 5
}
}
Drop every second query.
. {
erratic {
drop 2
truncate 2
}
}