-
Notifications
You must be signed in to change notification settings - Fork 167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
envsubst: remove explicit subst of exported vars #830
Conversation
For nginx config, a new approach is implemented with mawk. This is similar to envusbst, but more ergonomic: * no need to explicitly list all variables * throw error on missing variables * do not replace nginx vars like $host, $request_uri with empty strings (in contrast to envsubst when executed without an explicit variable list) Risks: There are a couple of changes which may break existing deployments: * changing client-config.json.template * requiring all substituted variable to be defined Closes getodk#473
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Splendid!
This comment was marked as outdated.
This comment was marked as outdated.
Can we remove the |
This change brings consistency: all other executables in `files/**` are marked executable in git rather than `chmod`'d in `.dockerfile` files. The `chmod` call was originally introduced in #676 without discussion. There is a wider debate whether git can be trusted to manage file permissions, touched on at #830 (comment)
Good catch - that seems very likely. I've removed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One small change inline and one quick confirmation -- this works fine if a user's configuration file omits certain config keys, right (e.g. the OIDC ones)? I imagine a bunch of tests would fail if that weren't the case but want to double check.
I think this is handled in the production Lines 49 to 76 in 279c4cb
If a value is undefined by a user, and omitted from these lists, then substitution would fail. I've added an extra test case to ensure that substituting empty values is supported. |
Approach suggested in #818 (comment)
For nginx config, a new approach is implemented with mawk.
This is similar to envsubst, but more ergonomic:
Risks:
There are a couple of changes which may break existing deployments:
Closes #473
What has been done to verify that this works as intended?
Added tests, added tests to CI, run tests.
Why is this the best possible solution? Were any other approaches considered?
Considered perl, bash & sed, as they are other scripting languages present in the images in which we currently use
enbsubst
. awk or perl seem the most suitable. I am not aware of a reason to use one over the other.How does this change affect users? Describe intentional changes to behavior and behavior that could have accidentally been affected by code changes. In other words, what are the regression risks?
As mentioned above, there's a risk that throwing when a variable is not defined will break existing deployments. That wouldn't be great.
Does this change require updates to documentation? If so, please file an issue here and include the link below.
Maybe? If there is some genuine risk in the previous answer.
Before submitting this PR, please make sure you have:
next
branch OR only changed documentation/infrastructure (master
is stable and used in production)