mirror of
https://github.com/coredns/coredns.git
synced 2025-11-02 02:03:13 -05:00
Add *ready* plugin (#2616)
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>
This commit is contained in:
56
plugin/ready/README.md
Normal file
56
plugin/ready/README.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 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
|
||||
}
|
||||
~~~
|
||||
Reference in New Issue
Block a user