-
Notifications
You must be signed in to change notification settings - Fork 7
Description
Summary
Load order of EXTRA_CONF_DIRS is not respected by COMPOSE_CONF_LIST to apply items defined in a critical order.
The EXTRA_CONF_DIRS should be considered as user-critical definitions to be respected at all costs, and therefore, loaded as much as possible toward the end to preserve its overrides.
Details
In my env.local, I define the following:
(note the last daccs-env which contains custom docker-compose overrides, defined outside birdhouse-deploy)
export EXTRA_CONF_DIRS="
./components/monitoring
./optional-components/canarie-api-full-monitoring
./optional-components/wps-healthchecks
./optional-components/secure-thredds
./optional-components/testthredds
./optional-components/test-weaver
./optional-components/secure-data-proxy
./components/weaver
./components/cowbird
../../daccs-env
"
Following are the exact load order reported by COMPOSE_CONF_LIST (only reformatted line-by-line for readability)
when running pavics-compose up -d
note: using a diff only to highlight relevant items, not an actual diff
(
docker-compose.yml
./config/proxy/docker-compose-extra.yml
./config/phoenix/docker-compose-extra.yml
./config/geoserver/docker-compose-extra.yml
./config/flyingpigeon/docker-compose-extra.yml
./config/finch/docker-compose-extra.yml
./config/raven/docker-compose-extra.yml
./config/hummingbird/docker-compose-extra.yml
./config/thredds/docker-compose-extra.yml
./config/portainer/docker-compose-extra.yml
./config/magpie/docker-compose-extra.yml
./config/twitcher/docker-compose-extra.yml
./config/jupyterhub/docker-compose-extra.yml
./config/frontend/docker-compose-extra.yml
./config/project-api/docker-compose-extra.yml
./config/catalog/docker-compose-extra.yml
./config/malleefowl/docker-compose-extra.yml
./config/solr/docker-compose-extra.yml
+ ./components/monitoring/docker-compose-extra.yml
+ ./optional-components/testthredds/docker-compose-extra.yml
+ ./optional-components/test-weaver/docker-compose-extra.yml
+ ./components/weaver/docker-compose-extra.yml
+ ./components/cowbird/docker-compose-extra.yml
+ ../../daccs-env/docker-compose-extra.yml
./config/mongodb/docker-compose-extra.yml
./config/postgres/docker-compose-extra.yml
./config/wps_outputs-volume/docker-compose-extra.yml
- ./config/data-volume/docker-compose-extra.yml # loaded after custom env!
./config/ncwms2/docker-compose-extra.yml
./config/phoenix/config/proxy/docker-compose-extra.yml
./config/geoserver/config/magpie/docker-compose-extra.yml
./config/geoserver/config/proxy/docker-compose-extra.yml
./config/flyingpigeon/config/magpie/docker-compose-extra.yml
./config/flyingpigeon/config/wps_outputs-volume/docker-compose-extra.yml
./config/finch/config/magpie/docker-compose-extra.yml
./config/finch/config/proxy/docker-compose-extra.yml
./config/finch/config/wps_outputs-volume/docker-compose-extra.yml
./config/raven/config/magpie/docker-compose-extra.yml
./config/raven/config/proxy/docker-compose-extra.yml
./config/raven/config/wps_outputs-volume/docker-compose-extra.yml
./config/hummingbird/config/data-volume/docker-compose-extra.yml
./config/hummingbird/config/magpie/docker-compose-extra.yml
./config/hummingbird/config/wps_outputs-volume/docker-compose-extra.yml
./config/thredds/config/proxy/docker-compose-extra.yml
./config/portainer/config/proxy/docker-compose-extra.yml
./config/magpie/config/proxy/docker-compose-extra.yml
./config/twitcher/config/proxy/docker-compose-extra.yml
./config/jupyterhub/config/magpie/docker-compose-extra.yml
./config/jupyterhub/config/proxy/docker-compose-extra.yml
./config/frontend/config/proxy/docker-compose-extra.yml
./config/project-api/config/proxy/docker-compose-extra.yml
./config/catalog/config/magpie/docker-compose-extra.yml
./config/catalog/config/proxy/docker-compose-extra.yml
./config/malleefowl/config/data-volume/docker-compose-extra.yml
./config/malleefowl/config/magpie/docker-compose-extra.yml
./config/malleefowl/config/proxy/docker-compose-extra.yml
./config/malleefowl/config/wps_outputs-volume/docker-compose-extra.yml
./config/solr/config/proxy/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/catalog/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/finch/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/flyingpigeon/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/hummingbird/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/malleefowl/docker-compose-extra.yml
+ ./optional-components/wps-healthchecks/config/raven/docker-compose-extra.yml
+ ./optional-components/secure-thredds/config/magpie/docker-compose-extra.yml
+ ./optional-components/testthredds/config/proxy/docker-compose-extra.yml
+ ./optional-components/secure-data-proxy/config/magpie/docker-compose-extra.yml
+ ./optional-components/secure-data-proxy/config/proxy/docker-compose-extra.yml
+ ./components/weaver/config/magpie/docker-compose-extra.yml
+ ./components/weaver/config/proxy/docker-compose-extra.yml
+ ./components/weaver/config/twitcher/docker-compose-extra.yml
+ ./components/cowbird/config/geoserver/docker-compose-extra.yml
+ ./components/cowbird/config/jupyterhub/docker-compose-extra.yml
+ ./components/cowbird/config/magpie/docker-compose-extra.yml
+ ./components/cowbird/config/proxy/docker-compose-extra.yml
./config/canarie-api/config/proxy/docker-compose-extra.yml
./config/wps_outputs-volume/config/proxy/docker-compose-extra.yml
./config/ncwms2/config/magpie/docker-compose-extra.yml
./config/ncwms2/config/proxy/docker-compose-extra.yml
./config/ncwms2/config/wps_outputs-volume/docker-compose-extra.ymlAs displayed above, load order seems somewhat random. The docker-compose from weaver, cowbird, etc. are loaded high up, and remaining configs from the same components are then loaded almost at the end. Meanwhile, multiple other components are loaded in between.
In this specific case, the last ../../daccs-env from EXTRA_CONF_DIRS is explicitly required at the end.
Amongst other things, it overrides the volumes.data: {} definition with an actual location on the machine.
Because ./config/data-volume/docker-compose-extra.yml is loaded after ../../daccs-env/docker-compose-extra.yml, it "overrides-back" my original override.
I end up getting the following error due to mismatching definitions with the existing volume:
ERROR: Configuration for volume data specifies "o" driver_opt None, but a volume with the same name uses a different "o" driver_opt (bind). If you wish to use the new configuration, please remove the existing volume "birdhouse_data" first:
$ docker volume rm birdhouse_data
Furthermore, the ./optional-components/canarie-api-full-monitoring item from EXTRA_CONF_DIRS is missing entirely.
Not quite sure why, but this is breaking #284 and the E2E that depends on it.
To Reproduce
Steps to reproduce the behaviour:
See description.
Load order hard to predict.
Environment
| Information | Value |
|---|---|
| Server/Platform URL | n/a |
| Version Tag/Commit | https://github.com/bird-house/birdhouse-deploy/tree/1.24.0 |
| Related issues/PR | #284 |
| Related components | pavics-compose |
| Custom configuration | see description |
Concerned Organizations
All