caddyfile: Add support for args on imports #3423
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Stems from the discussion in https://caddy.community/t/logging-snippet-using-host-placeholder-for-log-filename/8218
The idea here is that it's common for users to want to have one element of an imported snippet or file be replaced with a context-specific value.
This PR adds support for
{args.*}
placeholders at Caddyfile-parse time when importing tokens from either a snippet or file, where*
is the positional argument number.The
import
syntax becomes:For example, consider this Caddyfile, where a user wants to enable logging using a common config for each of their sites. You'll see that the log filename is expanded to
/var/log/caddy/a.example.com.access.log
:Adapted JSON output:
This also supports an arbitrary number of arguments, and supports imported files.
The file
respond.txt
Caddyfile:
Adapted JSON: