mirror of
https://github.com/coredns/coredns.git
synced 2025-11-16 00:42:16 -05:00
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>
57 lines
1.3 KiB
Markdown
57 lines
1.3 KiB
Markdown
# ready
|
|
|
|
## Name
|
|
|
|
*ready* - enables a readiness check HTTP endpoint.
|
|
|
|
## Description
|
|
|
|
By enabling *ready* an HTTP endpoint on port 8181 will return 200 OK, when all plugins that are able
|
|
to signal readiness have done so. If some are not ready yet the endpoint will return a 503 with the
|
|
body containing the list of plugins that are not ready. Once a plugin has signaled it is ready it
|
|
will not be queried again.
|
|
|
|
Each Server Block that enables the *ready* plugin will have the plugins *in that server block*
|
|
report readiness into the /ready endpoint that runs on the same port.
|
|
|
|
## Syntax
|
|
|
|
~~~
|
|
ready [ADDRESS]
|
|
~~~
|
|
|
|
*ready* optionally takes an address; the default is `:8181`. The path is fixed to `/ready`. The
|
|
readiness endpoint returns a 200 response code and the word "OK" when this server is ready. It
|
|
returns a 503 otherwise.
|
|
|
|
## Plugins
|
|
|
|
Any plugin wanting to signal readiness will need to implement the `ready.Readiness` interface by
|
|
implementing a method `Ready() bool` that returns true when the plugin is ready and false otherwise.
|
|
|
|
## Examples
|
|
|
|
Let *ready* report readiness for both the `.` and `example.org` servers (assuming the *whois*
|
|
plugin also exports readiness):
|
|
|
|
~~~ txt
|
|
. {
|
|
ready
|
|
erratic
|
|
}
|
|
|
|
example.org {
|
|
ready
|
|
whoami
|
|
}
|
|
|
|
~~~
|
|
|
|
Run *ready* on a different port.
|
|
|
|
~~~ txt
|
|
. {
|
|
ready localhost:8091
|
|
}
|
|
~~~
|