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
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 |
lognaturel
left a comment
There was a problem hiding this comment.
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. |
|
Splendid indeed! A belated thank you for this. These changes will make it easier to maintain our fork that allows customizing some of the backend service URLs. |
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 getodk#676 without discussion. There is a wider debate whether git can be trusted to manage file permissions, touched on at getodk#830 (comment)
Approach suggested in getodk#818 (comment) ----- For nginx config, a new approach is implemented with mawk. This is similar to envsubst, 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) 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
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:
nextbranch OR only changed documentation/infrastructure (masteris stable and used in production)