mirror of
https://github.com/kemko/nomad.git
synced 2026-01-02 00:15:43 +03:00
4.5 KiB
4.5 KiB
Mock Driver
This repo includes a mock task driver in the drivers/mock package that
implements a minimal task driver interface for development work. This driver is
loaded as the other built-in drivers are, but only when Nomad is not
compiled with the release tag.
Task Configuration
task "mocktask" {
driver = "mock_driver"
config {
run_for = "10s"
exit_code = 7
exit_err_msg = "the application crashed"
}
}
The mock_driver driver supports the following configuration in the job spec:
run_for(duration: "0s")- The duration for which the fake task runs for. After this period the driver responds indicating the task has terminated.signal_error(string: "")- The error message the task returns if signalled.stderr_repeat_duration(duration: "0s")- The duration between repeated stderr outputs.stderr_repeat(number: 0)- The number of times thestderr_stringwill be written.stderr_string(string: "")- The string that the task writes to stderr.stdout_repeat_duration(string: "")- The duration between repeated stdout outputs.stdout_repeat(number: 0)- The number of times thestdout_stringwill be written.stdout_string(string: "")- The string that the task writes to stdout.
The driver has configurable startup and shutdown for the tasks:
exit_code(number: 0)- The exit code the driver should return for the exiting task.exit_err_msg(string: "")- The error message the task returns while exiting.exit_signal(number: 0)- The signal with which the driver indicates the task has been killed.kill_after(duration: "0s")- Duration after which the driver indicates the task has exited withSIGINT.plugin_exit_after(string: "")- Duration after which the driver indicates the plugin exited via theWaitTaskcall.start_block_for(duration: "0s")- Duration to block before returning when started.start_error_recoverable(bool: false)- Marks whether the error returned when starting the driver is recoverable.start_error(string: "")- The error that is returned when starting the driver.
The driver can present information to the client about the task as though it had networking:
driver_advertise(bool: false)- Returned asDriverNetwork.AutoAdvertisefromStart()driver_ip(string: "")- The address returned as theDriverNetwork.IPfromStart()driver_port_map(string: "")- Parse a label:number pair and return it asDriverNetwork.PortMapfromStart().
Plugin Options
plugin "mock_driver" {
fs_isolation = "none"
shutdown_periodic_after = false
shutdown_periodic_duration = 0
}
fs_isolation(string: "none")- The type of file system isolation to report to the client. Must be one of"none","chroot", or"image".shutdown_periodic_after(bool: false)- A toggle that can be used during tests to "stop" a previously-functioning driver, allowing for testing of periodic drivers and fingerprinters.shutdown_periodic_duration(number: 0)- The duration after which to stop a previously-functioning driver, in seconds.
Example
An example job that could be used for testing task kill_timeout:
job "mock" {
group "group" {
task "task" {
driver = "mock_driver"
kill_timeout = "5s"
config {
exit_code = 0
exit_err_msg = "error on exit"
exit_signal = 9
kill_after = "3s"
run_for = "30s"
signal_error = "got signal"
start_block_for = "1s"
stdout_repeat = 1
stdout_repeat_duration = "10s"
stdout_string = "hello, world!\n"
}
resources {
cpu = 128
memory = 128
}
}
}
}
This results in the following allocation events:
Recent Events:
Time Type Description
2023-03-20T16:22:39-04:00 Restarting Task restarting in 17.426443129s
2023-03-20T16:22:39-04:00 Terminated Exit Code: 0, Signal: 9, Exit Message: "error on exit"
2023-03-20T16:22:09-04:00 Started Task started by client
2023-03-20T16:22:07-04:00 Task Setup Building Task Directory
2023-03-20T16:22:07-04:00 Received Task received by client