-
Notifications
You must be signed in to change notification settings - Fork 7
Add OGC API DGGS service + associated utility components #583
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
base: master
Are you sure you want to change the base?
Changes from 28 commits
58cc30e
d6bebbd
f1fa541
8569ae6
6d6340a
0c480bd
e780052
2a362f7
5518c65
5db42db
9ceb96f
7d93fec
7547ea9
d959559
3b81a3c
30d311e
4a64620
a39f974
6e46cba
7cafbbe
f7a28d0
a8ce6e7
6423dd4
f2162ea
416be15
2d591c3
5c06f21
4b943cc
d5434c9
cba110c
1c6ef7b
85e13f4
a96ce18
d92d5ad
bf2900e
65d4c72
9aa8238
ec342f1
b805820
967c233
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,7 +15,23 @@ | |
| [Unreleased](https://github.com/bird-house/birdhouse-deploy/tree/master) (latest) | ||
| ------------------------------------------------------------------------------------------------------------------ | ||
|
|
||
| [//]: # (list changes here, using '-' for each new entry, remove this when items are added) | ||
| ## Changes | ||
|
|
||
| - DGGS: Add the new `components/dggs` providing an OGC API for Discrete Global Grid Systems. | ||
| - DGGS API available through `/dggs-api` path (default, configurable via `DGGS_API_PATH`). | ||
| - Redirects available for `/ogcapi/dggs/...` and `/ogcapi/collections/.../dggs/...`. | ||
| - Sample configuration (minimum 1 resolvable data provider required) uses the new | ||
| feature of `optional-components/secure-data-proxy` on CRIM's Hirondelle server. | ||
|
|
||
| - Data: Allow `optional-components/secure-data-proxy` to define generic and flexible locations. | ||
| - `SECURE_DATA_PROXY_ROOT` can be defined as mount directory inside the `proxy` service. | ||
| - `SECURE_DATA_PROXY_LOCATIONS` can be defined with any amount of custom locations. | ||
| - All locations can be configured (as desired) under Magpie `secure-data-proxy` service for access control. | ||
| - Other components (`wps_output-volume`, `stac-data-proxy`) that can optionally use this security middleware | ||
| via `SECURE_DATA_PROXY_AUTH_INCLUDE` can still do so. Their mount points are handled separately. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does using
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's the other way around. By enabling
|
||
|
|
||
| - Weaver: Modified `/ogcapi/...` redirections strategy via `WEAVER_ALT_PREFIX_PROXY_LOCATION`. | ||
| - Allows other OGC APIs to reuse the same prefix to provide a unified location to access them. | ||
|
|
||
| [2.18.11](https://github.com/bird-house/birdhouse-deploy/tree/2.18.11) (2025-11-13) | ||
| ------------------------------------------------------------------------------------------------------------------ | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -720,14 +720,12 @@ How to Enable the Component | |
| - Edit ``env.local`` (a copy of `env.local.example`_) | ||
| - Add ``./components/stac`` to ``BIRDHOUSE_EXTRA_CONF_DIRS``. | ||
|
|
||
|
|
||
| STAC Browser | ||
| ============ | ||
|
|
||
| STAC Browser is a web UI used to interact with the STAC API. | ||
|
|
||
| Usage | ||
| ----- | ||
|
|
||
| The STAC API can be browsed via the ``stac-browser`` component. By default, the browser will point to the STAC API | ||
| exposed by the current ``components/stac`` service. | ||
| Once this component is enabled, the STAC browser will be available at the ``https://<BIRDHOUSE_FQDN_PUBLIC>/stac-browser`` | ||
|
|
@@ -748,12 +746,53 @@ For example: | |
| # you can update it to | ||
| export STAC_CORS_ORIGINS='http://example.com ~http:(www|other)\.api\.example\.com https://geojson.io' | ||
|
|
||
|
|
||
| How to Enable the Component | ||
| --------------------------- | ||
|
|
||
| - Edit ``env.local`` (a copy of `env.local.example`_) | ||
| - Add ``./components/stac-browser`` to ``BIRDHOUSE_EXTRA_CONF_DIRS``. | ||
|
|
||
|
|
||
| .. _components_dggs: | ||
|
|
||
| DGGS: Discrete Global Grid Systems API | ||
| ====================================== | ||
|
|
||
| `DGGS`_ is a spatial reference system combining a discrete global grid hierarchy with a zone identifier, in contrast | ||
| to typical ``(lat, lon)`` spatial reference systems. By using a predefined and deterministic order of zone IDs and | ||
| refinement sub-zones, DGGS enables efficient access, representation and analysis of spatial data that has been | ||
| quantized over a certain grid reference system (DGGRS). | ||
|
|
||
| The *OGC API - DGGS* definition implemented by this service is a RESTful API that provides access to DGGS resources, | ||
| definitions, zonal query conversion, and data retrieval from precomputed datasets. | ||
|
|
||
| .. _DGGS: https://ogcapi.ogc.org/dggs/ | ||
|
|
||
| Usage | ||
| ----- | ||
|
|
||
| Once enabled, the API will be accessible (by default) on the ``/dggs-api`` endpoint. | ||
| It will also be available through the common ``/ogcapi/dggs`` alias. | ||
|
|
||
| Refer to the `DGGS`_ OGC API documentation for specific endpoints and features. | ||
|
|
||
| Refer to `vgrid DGGS <https://github.com/opengeoshub#vgrid-dggs>`_ and | ||
| the `vgrid repository <https://github.com/opengeoshub/vgrid>`_ for a relatively extensive | ||
| collection of DGGS tools and its associated data manipulation ecosystem (using ``xarray``, QGIS plugin, etc.). | ||
|
|
||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please also describe how to put the data you want to serve with this component in the right location so that it works as intended.
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The way to provide the data is actually dependent on the I just so happened to have used the "local parquet file" approach for convenience of my sample data. Should I describe it even though it is only specific to that provider variant?
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just a simple example would be good so people can get started and then a reference to the relevant part of the documentation where they can customize their setup further if they want.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See below for my suggestion about keeping the example data in a separate component.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have not seen any example data added? But personally I think just a documentation here is good enough. That part about "The way to provide the data is actually dependent on the collection_provider definitions in pydggsapi-config.json. It does not necessarily need any local data if the provider uses a remote file or a DB connection. I just so happened to have used the "local parquet file" approach for convenience of my sample data." is useful to add as documentation.
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Indeed. The current setup gets away with using the external file: I like the alternate approach of optional component to keep things closer to the code. |
||
| How to Enable the Component | ||
| --------------------------- | ||
|
|
||
| - Edit ``env.local`` (a copy of `env.local.example`_) | ||
| - Add ``./components/dggs`` to ``BIRDHOUSE_EXTRA_CONF_DIRS``. | ||
| - Define ``DGGS_CONFIG_PATH`` in the ``env.local`` with custom definitions. | ||
| Alternatively, employ sample DGGS dataset and configuration by enabling ``./optional-components/dggs-data-sample``. | ||
| Enabling this optional component will set ``DGGS_CONFIG_PATH`` with a predefined configuration for this sample data. | ||
| See the `PyDGGS-API implementation <https://github.com/LandscapeGeoinformatics/pydggsapi>`_ for more details. | ||
| - Optionally, configure variables in ``./components/dggs/default.env`` via ``env.local`` to customize the service. | ||
|
|
||
|
|
||
| Canarie-API | ||
| =========== | ||
|
|
||
|
|
@@ -986,10 +1025,11 @@ of all processes executed by these services. | |
| Usage | ||
| ----- | ||
|
|
||
| All outputs from these processes will become available at the ``${BIRDHOUSE_PROXY_SCHEME}://${BIRDHOUSE_FQDN_PUBLIC}/wpsoutputs`` endpoint. | ||
| All outputs from these processes will become available at | ||
| the ``${BIRDHOUSE_PROXY_SCHEME}://${BIRDHOUSE_FQDN_PUBLIC}/wpsoutputs`` endpoint. | ||
|
|
||
| By default, this endpoint is not protected. To secure access to this endpoint it is highly recommended to enable the | ||
| `./optional-components/secure-data-proxy` component as well. | ||
| ``./optional-components/secure-data-proxy`` component as well. | ||
|
|
||
| How to Enable the Component | ||
| --------------------------- | ||
|
|
||
mishaschwartz marked this conversation as resolved.
Show resolved
Hide resolved
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| config/magpie/config.yml | ||
| config/proxy/conf.extra-service.d/dggs.conf | ||
| service-config.json |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| providers: | ||
| # definition of STAC service for API access | ||
| ${DGGS_API_NAME}: | ||
| url: http://dggs:8000 | ||
| title: Discrete Global Grid System (DGGS) Service | ||
| public: true | ||
| c4i: false | ||
| type: api | ||
| sync_type: api | ||
|
|
||
| ${DGGS_TILES_NAME}: | ||
mishaschwartz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| url: http://dggs:8000 | ||
| title: Tiles support over Discrete Global Grid System (DGGS) Service | ||
| public: true | ||
| c4i: false | ||
| type: api | ||
| sync_type: api | ||
|
|
||
|
|
||
| permissions: | ||
| - service: ${DGGS_API_NAME} | ||
| resource: /openapi.json | ||
| permission: read | ||
| group: anonymous | ||
| action: create | ||
| - service: ${DGGS_API_NAME} | ||
| resource: ${DGGS_DOCS_PATH_INTERNAL} | ||
| permission: read | ||
| group: anonymous | ||
| action: create | ||
| - service: ${DGGS_API_NAME} | ||
| resource: /docs | ||
| permission: read | ||
| group: anonymous | ||
| action: create | ||
| - service: ${DGGS_API_NAME} | ||
| resource: /api | ||
| permission: read | ||
| group: anonymous | ||
| action: create | ||
|
|
||
| # === DGGS API === | ||
| # /${DGGS_API_NAME}/dggs/... | ||
| # /${DGGS_API_NAME}/collections/{collectionId}/dggs/... | ||
|
|
||
| # Administrator permissions over whole service | ||
| - service: ${DGGS_API_NAME} | ||
| permission: read | ||
| group: administrators | ||
| action: create | ||
| - service: ${DGGS_API_NAME} | ||
| permission: write | ||
| group: administrators | ||
| action: create | ||
| # Open access to the entrypoint | ||
| - service: ${DGGS_API_NAME} | ||
| permission: read-match | ||
fmigneault marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| group: anonymous | ||
| action: create | ||
| # Open access to the generic DGGRS definitions | ||
| # DGGS-nested endpoints and Collections access managed by user/groups. | ||
| - service: ${DGGS_API_NAME} | ||
| resource: /dggs | ||
| permission: read-match | ||
| group: anonymous | ||
| action: create | ||
| # Open access to the documentation endpoints | ||
| - service: ${DGGS_API_NAME} | ||
| resource: /conformance | ||
| permission: read-match | ||
| group: anonymous | ||
| action: create | ||
|
|
||
| # === Tiles API === | ||
| # /${DGGS_TILES_NAME}/{collectionId}.json | ||
| # /${DGGS_TILES_NAME}/{collectionId}/{z}/{x}/{x} | ||
|
|
||
| # Administrator permissions over whole service | ||
| - service: ${DGGS_TILES_NAME} | ||
| permission: read | ||
| group: administrators | ||
| action: create | ||
| - service: ${DGGS_TILES_NAME} | ||
| permission: write | ||
| group: administrators | ||
| action: create | ||
| # Tiles-only endpoint. Collections access managed by user/groups. | ||
| - service: ${DGGS_TILES_NAME} | ||
| permission: read-match | ||
| group: anonymous | ||
| action: create | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
|
|
||
| services: | ||
| magpie: | ||
| volumes: | ||
| - ./components/dggs/config/magpie/config.yml:${MAGPIE_PROVIDERS_CONFIG_PATH}/dggs.yml:ro | ||
| - ./components/dggs/config/magpie/config.yml:${MAGPIE_PERMISSIONS_CONFIG_PATH}/dggs.yml:ro |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,120 @@ | ||
|
|
||
| location = /dggs-auth { | ||
| internal; | ||
| # note: using 'TWITCHER_VERIFY_PATH' path to avoid performing the request via proxy 'TWITCHER_PROTECTED_PATH' | ||
| # This ensures that access is validated for the user, but does not trigger its access/download twice. | ||
| # It is also more efficient, since less contents are transferred/buffered. | ||
| proxy_pass ${BIRDHOUSE_PROXY_SCHEME}://${BIRDHOUSE_FQDN_PUBLIC}${TWITCHER_VERIFY_PATH}/$request_uri; | ||
| proxy_pass_request_body off; | ||
| proxy_set_header Host $host; | ||
| proxy_set_header Content-Length ""; | ||
| proxy_set_header X-Original-URI $request_uri; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Host $host:$server_port; | ||
| } | ||
|
|
||
| # Generic API docs | ||
| location ${DGGS_API_PATH}/docs { | ||
| auth_request /dggs-auth; | ||
| auth_request_set $auth_status $upstream_status; | ||
|
|
||
| proxy_pass http://dggs:8000${DGGS_DOCS_PATH_INTERNAL}/$is_args$args; | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These will skip authentication since location blocks with plain strings are matched before those with regular expressions. Since you're only authenticating with the
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Indeed. Should I add the same
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just because they're made public by default doesn't mean that that setting can't be manually changed later by another optional component or directly through the Magpie UI/API. So yes please, add the same |
||
| proxy_set_header Host $host; | ||
| #proxy_set_header X-Original-URI $request_uri; | ||
| # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-Host $http_host:$server_port; | ||
| #proxy_set_header X-Script-Name ${DGGS_API_PATH}; | ||
| } | ||
| location ${DGGS_TILES_PATH}/docs { | ||
| auth_request /dggs-auth; | ||
| auth_request_set $auth_status $upstream_status; | ||
|
|
||
| proxy_pass http://dggs:8000${DGGS_DOCS_PATH_INTERNAL}/$is_args$args; | ||
| proxy_set_header Host $host; | ||
| #proxy_set_header X-Original-URI $request_uri; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-Host $http_host:$server_port; | ||
| #proxy_set_header X-Script-Name ${DGGS_API_PATH}; | ||
| } | ||
| # '/api' is the standard path by OGC: https://ogcapi.ogc.org/common/overview.html | ||
| location = ${DGGS_API_PATH}/api { | ||
| auth_request /dggs-auth; | ||
| auth_request_set $auth_status $upstream_status; | ||
|
|
||
| rewrite ^${DGGS_API_PATH}/(.*) ${DGGS_API_PATH_INTERNAL}/$1 break; | ||
| proxy_pass http://dggs:8000; | ||
| proxy_set_header Host $host; | ||
| proxy_set_header X-Original-URI $request_uri; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-Host $http_host:$server_port; | ||
| #proxy_set_header X-Script-Name ${DGGS_API_PATH}; | ||
| } | ||
|
|
||
| # DGGS API | ||
| location = ${DGGS_API_PATH} { | ||
| return 308 ${DGGS_API_PATH}/$is_args$args; | ||
| } | ||
| location ~ ^${DGGS_API_PATH}/(.*)$ { | ||
| auth_request /dggs-auth; | ||
| auth_request_set $auth_status $upstream_status; | ||
|
|
||
| proxy_pass http://dggs:8000${DGGS_API_PATH_INTERNAL}/$1$is_args$args; | ||
| proxy_set_header Host $host; | ||
| proxy_set_header X-Original-URI $request_uri; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-Host $http_host:$server_port; | ||
| } | ||
| # Tiles API | ||
| location = ${DGGS_TILES_PATH} { | ||
| return 308 ${DGGS_TILES_PATH}/$is_args$args; | ||
| } | ||
| location ~ ^${DGGS_TILES_PATH}/(.*)$ { | ||
| auth_request /dggs-auth; | ||
| auth_request_set $auth_status $upstream_status; | ||
|
|
||
| proxy_pass http://dggs:8000${DGGS_TILES_PATH_INTERNAL}/$1$is_args$args; | ||
| proxy_set_header Host $host; | ||
| proxy_set_header X-Original-URI $request_uri; | ||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| proxy_set_header X-Forwarded-Proto $real_scheme; | ||
| proxy_set_header X-Forwarded-Host $http_host:$server_port; | ||
| } | ||
|
|
||
| # NOTE: | ||
| # Redirect to internal network of Twitcher with root endpoint and alias allows to set | ||
| # the same 'magpie' permissions on the 'dggs' service. | ||
| # This allows verification of the same service user/group permissions references regardless | ||
| # whether the *shortcut* endpoint, the alias or the explicit 'twitcher' proxy route is used. | ||
| location = ${TWITCHER_PROTECTED_PATH}${DGGS_API_PATH} { | ||
| return 308 ${DGGS_API_PATH}/$is_args$args; | ||
| } | ||
| location ~ ^${TWITCHER_PROTECTED_PATH}${DGGS_API_PATH}/(.*)$ { | ||
| return 308 ${DGGS_API_PATH}/$1$is_args$args; | ||
| } | ||
| location = ${TWITCHER_PROTECTED_PATH}${DGGS_TILES_PATH} { | ||
| return 308 ${DGGS_TILES_PATH}/$is_args$args; | ||
| } | ||
| location ~ ^${TWITCHER_PROTECTED_PATH}${DGGS_TILES_PATH}/(.*)$ { | ||
| return 308 ${DGGS_TILES_PATH}/$1$is_args$args; | ||
| } | ||
|
|
||
| # NOTE: | ||
| # Redirect to typical endpoints employed by clients. | ||
| # Use 307 instead of 308 as above to indicate and hint clients that this is only a | ||
| # shortcut to be revalidatd rather than the definitive location of the actual service. | ||
| # The 'collection' variant is explicitly listed since '/ogcapi/' prefix could be | ||
| # used for other services (e.g.: '/ogcapi/processes' for Weaver). | ||
| location ~ ^/ogcapi/dggs(.*)$ { | ||
| return 307 ${DGGS_API_PATH}$1$is_args$args; | ||
| } | ||
| location ~ ^/ogcapi/collections/(.*)/dggs(.*)$ { | ||
| return 307 ${DGGS_API_PATH}/collections/$1/dggs$2$is_args$args; | ||
| } | ||
| location ~ ^/ogcapi/tiles(.*)$ { | ||
| return 307 ${DGGS_TILES_PATH}$1$is_args$args; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| services: | ||
| proxy: | ||
| volumes: | ||
| - ./components/dggs/config/proxy/conf.extra-service.d:/etc/nginx/conf.extra-service.d/dggs:ro |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
|
|
||
| services: | ||
| # extend twitcher with MagpieAdapter hooks employed for DGGS proxied requests | ||
| twitcher: | ||
| volumes: | ||
| # NOTE: MagpieAdapter hooks are defined within Magpie config, but it is actually Twitcher proxy that runs them | ||
| # target mount location depends on 'MAGPIE_PROVIDERS_CONFIG_PATH' environment variable that is found under `birdhouse/components/twitcher/docker-compose-extra.yml` | ||
| - ./components/dggs/config/magpie/config.yml:/opt/birdhouse/src/magpie/config/dggs-config.yml:ro |
Uh oh!
There was an error while loading. Please reload this page.
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.
I don't love this since it makes it easy to mount any arbitrary location to proxy with an environment variable (that is prone to character escape issues, typos, etc.).
I think the better solution is to stick with what we had before where other components can create their own proxy path definitions and include
SECURE_DATA_PROXY_AUTH_INCLUDEwhere needed. If you need a quick new secure path for something else it's easy to make a minimal optional-component.Another option is to make this less error prone by allowing the user to define a path and a location on disk. Then we can mount the location on disk as a volume and serve it securely at the given path. This makes the whole thing less error-prone because the user is just defining two variables, not a whole location block.
That being said, I won't stop this PR just because I don't like this feature. I just think it may cause issues later on and I probably won't use it directly myself.
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.
I don't feel the escaping issue as that problematic.
I have defined it as followed on my end for the DGGS sample config, and it works without problem.
Since only basic redirects for data access aliases are expected, they shouldn't ever be much more complicated than that.
There are some much more scarier variables used elsewhere that do much more impactful/dangerous operations 😅
birdhouse-deploy/birdhouse/env.local.example
Lines 272 to 284 in a63786e
birdhouse-deploy/birdhouse/env.local.example
Lines 366 to 420 in a63786e
birdhouse-deploy/birdhouse/env.local.example
Lines 451 to 505 in a63786e
This could also possible, hence the introduction of
SECURE_DATA_PROXY_ROOTas well.I have actually considered providing a
SECURE_DATA_PROXY_PATHfor the location.The only problem with this approach is that we end up needing a new location variable for every possible endpoint the user might want to employ to redirect data access in case they don't want all data to be served from the same URI.
This would be limiting the functionality, since it is not actually required to host all data from the same place (
secure-data-proxyis reusable on purpose), such as leveraged by STAC:birdhouse-deploy/birdhouse/optional-components/stac-data-proxy/config/proxy/conf.extra-service.d/stac-proxy-data.conf.template
Lines 1 to 5 in a63786e
In that specific case, since
staccomponent is involved, I could dedicate a specific variable, but I couldn't find a nicer (or less convoluted) way to offer an "<any>_SECURE_DATA_PROXY_PATH", so I opted for the approach to "just provide the location definition directly" instead.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.
Oh I totally agree that we're doing some sketchy stuff with environment variables elsewhere and I'd love to figure out a better way for those cases as well. I just didn't want to contribute to the problem with a new variable as well.
I understand that this is simpler to implement and makes things extra flexible. I just worry that a node admin can easily get themselves in trouble by putting random stuff in this variable that breaks other things.
Uh oh!
There was an error while loading. Please reload this page.
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.
Yes I also find our use of config var to extend configuration file via template expansion of the config var very problematic:
env.localuse the var, thenenv.localwill have to append which result in duplicate config becauseenv.localis read twice duringread_configs.Totally agree we should not perpetuate that same problematic pattern for newly added vars, my original feedback here #583 (comment) and here #583 (comment)