Merge pull request #111 from dokku/allow-dash-in-name
feat: re-allow dashes in names
This commit is contained in:
@@ -19,10 +19,14 @@ get_container_ip() {
|
|||||||
|
|
||||||
get_database_name() {
|
get_database_name() {
|
||||||
declare desc="Retrieves a sanitized database name"
|
declare desc="Retrieves a sanitized database name"
|
||||||
declare DATABASE="$1"
|
declare SERVICE="$1"
|
||||||
# some datastores do not like special characters in database names
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
# so we need to normalize them out
|
|
||||||
echo "$DATABASE" | tr .- _
|
if [[ ! -f "$SERVICE_ROOT/DATABASE_NAME" ]]; then
|
||||||
|
echo "$SERVICE" > "$SERVICE_ROOT/DATABASE_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat "$SERVICE_ROOT/DATABASE_NAME"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_random_ports() {
|
get_random_ports() {
|
||||||
@@ -89,7 +93,7 @@ is_valid_service_name() {
|
|||||||
declare SERVICE="$1"
|
declare SERVICE="$1"
|
||||||
[[ -z "$SERVICE" ]] && return 1
|
[[ -z "$SERVICE" ]] && return 1
|
||||||
|
|
||||||
if [[ "$SERVICE" =~ ^[A-Za-z0-9_]+$ ]]; then
|
if [[ "$SERVICE" =~ ^[A-Za-z0-9_-]+$ ]]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -780,3 +784,13 @@ verify_service_name() {
|
|||||||
[[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] && dokku_log_fail "$PLUGIN_SERVICE service $SERVICE does not exist"
|
[[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] && dokku_log_fail "$PLUGIN_SERVICE service $SERVICE does not exist"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_database_name() {
|
||||||
|
declare desc="Writes a sanitized database name"
|
||||||
|
declare SERVICE="$1"
|
||||||
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
|
|
||||||
|
# some datastores do not like special characters in database names
|
||||||
|
# so we need to normalize them out
|
||||||
|
echo "$SERVICE" | tr .- _ > "$SERVICE_ROOT/DATABASE_NAME"
|
||||||
|
}
|
||||||
|
|||||||
19
functions
19
functions
@@ -13,11 +13,12 @@ service_connect() {
|
|||||||
local SERVICE="$1"
|
local SERVICE="$1"
|
||||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||||
|
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||||
local SERVICE_TTY_OPTS
|
local SERVICE_TTY_OPTS
|
||||||
has_tty && SERVICE_TTY_OPTS="-t"
|
has_tty && SERVICE_TTY_OPTS="-t"
|
||||||
|
|
||||||
docker exec -i $SERVICE_TTY_OPTS "$SERVICE_NAME" mysql --user=mysql --password="$PASSWORD" --database="$SERVICE"
|
docker exec -i $SERVICE_TTY_OPTS "$SERVICE_NAME" mysql --user=mysql --password="$PASSWORD" --database="$DATABASE_NAME"
|
||||||
}
|
}
|
||||||
|
|
||||||
service_create() {
|
service_create() {
|
||||||
@@ -67,6 +68,8 @@ service_create() {
|
|||||||
else
|
else
|
||||||
echo "" >"$SERVICE_ROOT/ENV"
|
echo "" >"$SERVICE_ROOT/ENV"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
write_database_name "$SERVICE"
|
||||||
service_create_container "$SERVICE"
|
service_create_container "$SERVICE"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,8 +80,9 @@ service_create_container() {
|
|||||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||||
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
|
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
|
||||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||||
|
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||||
|
|
||||||
ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_HOST_ROOT/data:/var/lib/mysql" -v "$SERVICE_HOST_ROOT/config:/etc/mysql/conf.d" -e "MYSQL_ROOT_PASSWORD=$ROOTPASSWORD" -e MYSQL_USER=mysql -e "MYSQL_PASSWORD=$PASSWORD" -e "MYSQL_DATABASE=$SERVICE" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=mysql "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION")
|
ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_HOST_ROOT/data:/var/lib/mysql" -v "$SERVICE_HOST_ROOT/config:/etc/mysql/conf.d" -e "MYSQL_ROOT_PASSWORD=$ROOTPASSWORD" -e MYSQL_USER=mysql -e "MYSQL_PASSWORD=$PASSWORD" -e "MYSQL_DATABASE=$DATABASE_NAME" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=mysql "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION")
|
||||||
echo "$ID" >"$SERVICE_ROOT/ID"
|
echo "$ID" >"$SERVICE_ROOT/ID"
|
||||||
|
|
||||||
dokku_log_verbose_quiet "Waiting for container to be ready"
|
dokku_log_verbose_quiet "Waiting for container to be ready"
|
||||||
@@ -92,11 +96,12 @@ service_export() {
|
|||||||
local SERVICE="$1"
|
local SERVICE="$1"
|
||||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||||
|
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||||
|
|
||||||
[[ -n $SSH_TTY ]] && stty -opost
|
[[ -n $SSH_TTY ]] && stty -opost
|
||||||
docker exec "$SERVICE_NAME" bash -c "printf '[client]\npassword=$PASSWORD\n' > /root/credentials.cnf"
|
docker exec "$SERVICE_NAME" bash -c "printf '[client]\npassword=$PASSWORD\n' > /root/credentials.cnf"
|
||||||
docker exec "$SERVICE_NAME" mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql "$SERVICE"
|
docker exec "$SERVICE_NAME" mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql "$DATABASE_NAME"
|
||||||
docker exec "$SERVICE_NAME" rm /root/credentials.cnf
|
docker exec "$SERVICE_NAME" rm /root/credentials.cnf
|
||||||
status=$?
|
status=$?
|
||||||
[[ -n $SSH_TTY ]] && stty opost
|
[[ -n $SSH_TTY ]] && stty opost
|
||||||
@@ -108,12 +113,13 @@ service_import() {
|
|||||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||||
local SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE"
|
local SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE"
|
||||||
|
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||||
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
|
local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")"
|
||||||
|
|
||||||
if [[ -t 0 ]]; then
|
if [[ -t 0 ]]; then
|
||||||
dokku_log_fail "No data provided on stdin."
|
dokku_log_fail "No data provided on stdin."
|
||||||
fi
|
fi
|
||||||
docker exec -i "$SERVICE_NAME" mysql --user=root --password="$ROOTPASSWORD" "$SERVICE"
|
docker exec -i "$SERVICE_NAME" mysql --user=root --password="$ROOTPASSWORD" "$DATABASE_NAME"
|
||||||
}
|
}
|
||||||
|
|
||||||
service_start() {
|
service_start() {
|
||||||
@@ -146,7 +152,8 @@ service_start() {
|
|||||||
service_url() {
|
service_url() {
|
||||||
local SERVICE="$1"
|
local SERVICE="$1"
|
||||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
|
||||||
local SERVICE_DNS_HOSTNAME="$(service_dns_hostname "$SERVICE")"
|
local SERVICE_DNS_HOSTNAME="$(service_dns_hostname "$SERVICE")"
|
||||||
echo "$PLUGIN_SCHEME://mysql:$PASSWORD@$SERVICE_DNS_HOSTNAME:${PLUGIN_DATASTORE_PORTS[0]}/$SERVICE"
|
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||||
|
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||||
|
echo "$PLUGIN_SCHEME://mysql:$PASSWORD@$SERVICE_DNS_HOSTNAME:${PLUGIN_DATASTORE_PORTS[0]}/$DATABASE_NAME"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,15 @@ load test_helper
|
|||||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "($PLUGIN_COMMAND_PREFIX:create) service with dashes" {
|
||||||
|
run dokku "$PLUGIN_COMMAND_PREFIX:create" service-with-dashes
|
||||||
|
assert_contains "${lines[*]}" "container created: service-with-dashes"
|
||||||
|
assert_contains "${lines[*]}" "dokku-$PLUGIN_COMMAND_PREFIX-service-with-dashes"
|
||||||
|
assert_contains "${lines[*]}" "service_with_dashes"
|
||||||
|
|
||||||
|
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" service-with-dashes
|
||||||
|
}
|
||||||
|
|
||||||
@test "($PLUGIN_COMMAND_PREFIX:create) error when there are no arguments" {
|
@test "($PLUGIN_COMMAND_PREFIX:create) error when there are no arguments" {
|
||||||
run dokku "$PLUGIN_COMMAND_PREFIX:create"
|
run dokku "$PLUGIN_COMMAND_PREFIX:create"
|
||||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||||
@@ -15,7 +24,4 @@ load test_helper
|
|||||||
@test "($PLUGIN_COMMAND_PREFIX:create) error when there is an invalid name specified" {
|
@test "($PLUGIN_COMMAND_PREFIX:create) error when there is an invalid name specified" {
|
||||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" d.erp
|
run dokku "$PLUGIN_COMMAND_PREFIX:create" d.erp
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" d-erp
|
|
||||||
assert_failure
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user