-
Notifications
You must be signed in to change notification settings - Fork 712
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GUACAMOLE-374: Restore support for legacy Docker links.
- Loading branch information
1 parent
02138fb
commit b96b494
Showing
2 changed files
with
137 additions
and
1 deletion.
There are no files selected for viewing
136 changes: 136 additions & 0 deletions
136
guacamole-docker/entrypoint.d/000-migrate-docker-links.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
# | ||
# Licensed to the Apache Software Foundation (ASF) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The ASF licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
# | ||
|
||
## | ||
## @fn 000-migrate-docker-links.sh | ||
## | ||
## Checks for usage of any Docker links that were formerly supported | ||
## but are now deprecated, warning when any deprecated Docker links are | ||
## encountered. Until support for Docker links is entirely removed, the values | ||
## of environment variables that are injected by Docker for deprecated Docker | ||
## links are automatically reassigned to currently supported variables. | ||
## | ||
|
||
## | ||
## Unsets all environment variables whose names start with the given prefix. | ||
## | ||
## @param LEGACY_VAR_PREFIX | ||
## The name prefix of the environment variables that should be unset. | ||
## | ||
unset_starts_with() { | ||
|
||
local LEGACY_VAR_PREFIX="$1" | ||
|
||
local LEGACY_VAR_NAME | ||
|
||
# Unset all environment variables starting with the given prefix | ||
while read -r LEGACY_VAR_NAME; do | ||
unset "$LEGACY_VAR_NAME" | ||
done < <(awk 'BEGIN{for(v in ENVIRON) print v}' | grep "^$LEGACY_VAR_PREFIX") | ||
|
||
} | ||
|
||
## | ||
## Checks for usage of the given deprecated Docker link, automatically | ||
## assigning the values of its associated environment variables to the given | ||
## set of currently supported environment variables. If usage of the | ||
## deprecated Docker link is found, a warning is printed to STDERR. | ||
## | ||
## @param LEGACY_LINK_NAME | ||
## The name of the Docker link that's deprecated, as would be provided to | ||
## the "docker" command with the "--link" option. | ||
## | ||
## @param LEGACY_LINK_PORT_NUMBER | ||
## The TCP port number used by the service originally pointed to by the | ||
## deprecated Docker link. This will be the port number exposed by the | ||
## Docker image customarily used for that service. | ||
## | ||
## @param CURRENT_ADDR_VAR_NAME | ||
## The name of the environment variable that is currently supported and | ||
## represents the IP addresss or hostname of the service originally pointed | ||
## to by the deprecated Docker link. | ||
## | ||
## @param CURRENT_PORT_VAR_NAME | ||
## The name of the environment variable that is currently supported and | ||
## represents the TCP port of the service originally pointed to by the | ||
## deprecated Docker link. | ||
## | ||
deprecate_link() { | ||
|
||
local LEGACY_LINK_NAME="$1" | ||
local LEGACY_LINK_PORT_NUMBER="$2" | ||
local CURRENT_ADDR_VAR_NAME="$3" | ||
local CURRENT_PORT_VAR_NAME="$4" | ||
|
||
# Determine names of environment variables injected by Docker for the link | ||
# having the given name | ||
local LEGACY_LINK_VAR_PREFIX="`echo "$LEGACY_LINK_NAME" | tr 'a-z' 'A-Z'`" | ||
local LEGACY_LINK_VAR_TCP_PREFIX="${LEGACY_LINK_VAR_PREFIX}_PORT_${LEGACY_LINK_PORT_NUMBER}_TCP" | ||
local LEGACY_ADDR_VAR_NAME="${LEGACY_LINK_VAR_TCP_PREFIX}_ADDR" | ||
local LEGACY_PORT_VAR_NAME="${LEGACY_LINK_VAR_TCP_PREFIX}_PORT" | ||
|
||
# NOTE: We pull these values early to ensure we can safely unset the | ||
# legacy variables without losing the ability to reassign those values to | ||
# the proper variables later | ||
local LEGACY_LINK_ADDR="${!LEGACY_ADDR_VAR_NAME}" | ||
local LEGACY_LINK_PORT="${!LEGACY_PORT_VAR_NAME}" | ||
|
||
if [ -n "$LEGACY_LINK_ADDR" -o -n "$LEGACY_LINK_PORT" ]; then | ||
echo "WARNING: The \"$LEGACY_LINK_NAME\" Docker link has been deprecated in favor of the \"$CURRENT_ADDR_VAR_NAME\" and \"$CURRENT_PORT_VAR_NAME\" environment variables. Please migrate your configuration when possible, as Docker considers the linking feature to be legacy and support for Docker links may be removed in future releases. See: https://docs.docker.com/engine/network/links/" >&2 | ||
|
||
# | ||
# Clear out any environment variables related to the legacy link (NOTE: | ||
# this is necessary not only to clean the environment of variables that | ||
# aren't actually used, but also to avoid tripping warnings about | ||
# legacy "POSTGRES_" variable naming). | ||
# | ||
# The variables that Docker will set are documented here: | ||
# | ||
# https://docs.docker.com/engine/network/links/ | ||
# | ||
|
||
unset "${LEGACY_LINK_VAR_PREFIX}_NAME" | ||
unset "${LEGACY_LINK_VAR_PREFIX}_PORT" | ||
unset_starts_with "${LEGACY_LINK_VAR_TCP_PREFIX}_" | ||
unset_starts_with "${LEGACY_LINK_VAR_PREFIX}_ENV_" | ||
|
||
# A variable containing just the prefix documented by Docker is also | ||
# injected, but this is not documented at the above URL | ||
unset "$LEGACY_LINK_VAR_TCP_PREFIX" | ||
|
||
# Migrate legacy Docker link values over to the proper variables | ||
export "$CURRENT_ADDR_VAR_NAME"="$LEGACY_LINK_ADDR" | ||
export "$CURRENT_PORT_VAR_NAME"="$LEGACY_LINK_PORT" | ||
|
||
fi | ||
|
||
} | ||
|
||
# Legacy Docker link support for connecting the webapp image with guacd | ||
deprecate_link "guacd" 4822 "GUACD_HOSTNAME" "GUACD_PORT" | ||
|
||
# Legacy Docker link support for connecting the webapp image with the various | ||
# supported databases | ||
deprecate_link "mysql" 3306 "MYSQL_HOSTNAME" "MYSQL_PORT" | ||
deprecate_link "postgres" 5432 "POSTGRESQL_HOSTNAME" "POSTGRESQL_PORT" | ||
deprecate_link "sqlserver" 1433 "SQLSERVER_HOSTNAME" "SQLSERVER_PORT" | ||
|
||
# No other Docker links have been historically supported by the | ||
# "guacamole/guacamole" image. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters