exec.toml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. Name = "External program"
  2. Description = "Solving the DNS-01 challenge using an external program."
  3. URL = "/dns/exec"
  4. Code = "exec"
  5. Since = "v0.5.0"
  6. Example = '''
  7. EXEC_PATH=/the/path/to/myscript.sh \
  8. lego --email you@example.com --dns exec --domains my.example.org run
  9. '''
  10. Additional = '''
  11. ## Base Configuration
  12. | Environment Variable Name | Description |
  13. |---------------------------|---------------------------------------|
  14. | `EXEC_MODE` | `RAW`, none |
  15. | `EXEC_PATH` | The path of the the external program. |
  16. ## Additional Configuration
  17. | Environment Variable Name | Description |
  18. |----------------------------|-------------------------------------------|
  19. | `EXEC_POLLING_INTERVAL` | Time between DNS propagation check. |
  20. | `EXEC_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation. |
  21. | `EXEC_SEQUENCE_INTERVAL` | Time between sequential requests. |
  22. ## Description
  23. The file name of the external program is specified in the environment variable `EXEC_PATH`.
  24. When it is run by lego, three command-line parameters are passed to it:
  25. The action ("present" or "cleanup"), the fully-qualified domain name and the value for the record.
  26. For example, requesting a certificate for the domain 'my.example.org' can be achieved by calling lego as follows:
  27. ```bash
  28. EXEC_PATH=./update-dns.sh \
  29. lego --email you@example.com \
  30. --dns exec \
  31. --domains my.example.org run
  32. ```
  33. It will then call the program './update-dns.sh' with like this:
  34. ```bash
  35. ./update-dns.sh "present" "_acme-challenge.my.example.org." "MsijOYZxqyjGnFGwhjrhfg-Xgbl5r68WPda0J9EgqqI"
  36. ```
  37. The program then needs to make sure the record is inserted.
  38. When it returns an error via a non-zero exit code, lego aborts.
  39. When the record is to be removed again,
  40. the program is called with the first command-line parameter set to `cleanup` instead of `present`.
  41. If you want to use the raw domain, token, and keyAuth values with your program, you can set `EXEC_MODE=RAW`:
  42. ```bash
  43. EXEC_MODE=RAW \
  44. EXEC_PATH=./update-dns.sh \
  45. lego --email you@example.com \
  46. --dns exec \
  47. --domains my.example.org run
  48. ```
  49. It will then call the program `./update-dns.sh` like this:
  50. ```bash
  51. ./update-dns.sh "present" "my.example.org." "--" "some-token" "KxAy-J3NwUmg9ZQuM-gP_Mq1nStaYSaP9tYQs5_-YsE.ksT-qywTd8058G-SHHWA3RAN72Pr0yWtPYmmY5UBpQ8"
  52. ```
  53. ## Commands
  54. {{% notice note %}}
  55. The `--` is because the token MAY start with a `-`, and the called program may try and interpret a `-` as indicating a flag.
  56. In the case of urfave, which is commonly used,
  57. you can use the `--` delimiter to specify the start of positional arguments, and handle such a string safely.
  58. {{% /notice %}}
  59. ### Present
  60. | Mode | Command |
  61. |---------|----------------------------------------------------|
  62. | default | `myprogram present -- <FQDN> <record>` |
  63. | `RAW` | `myprogram present -- <domain> <token> <key_auth>` |
  64. ### Cleanup
  65. | Mode | Command |
  66. |---------|----------------------------------------------------|
  67. | default | `myprogram cleanup -- <FQDN> <record>` |
  68. | `RAW` | `myprogram cleanup -- <domain> <token> <key_auth>` |
  69. ### Timeout
  70. The command have to display propagation timeout and polling interval into Stdout.
  71. The values must be formatted as JSON, and times are in seconds.
  72. Example: `{"timeout": 30, "interval": 5}`
  73. If an error occurs or if the command is not provided:
  74. the default display propagation timeout and polling interval are used.
  75. | Mode | Command |
  76. |---------|----------------------------------------------------|
  77. | default | `myprogram timeout` |
  78. | `RAW` | `myprogram timeout` |
  79. '''