Compare commits

..

28 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
91d3d884ba Release 1.26.2 2023-02-07 02:46:45 -05:00
Jose Diaz-Gonzalez
e024260fe6 fix: pull the new docker image when upgrading a service if DOCKER_IMAGE_PULL is not disabled
Refs dokku/dokku-clickhouse#51
2023-02-07 02:45:35 -05:00
Jose Diaz-Gonzalez
6f4728b1a7 Release 1.26.1 2023-01-28 16:34:41 -05:00
Jose Diaz-Gonzalez
88c60fd878 docs: update the ci workflow badge
Refs https://github.com/badges/shields/issues/8671
2023-01-28 16:32:52 -05:00
josegonzalez
850ae71a0d Merge pull request #151 from dokku/5468-dokku-lib-host-root
feat: respect DOKKU_LIB_HOST_ROOT for mounted data volumes
2022-12-27 00:16:29 -05:00
Jose Diaz-Gonzalez
ae702634dd feat: respect DOKKU_LIB_HOST_ROOT for mounted data volumes
This change allows folks to change where dokku mounts data from for all official plugins, removing the need to specify the configuration on a one-off basis.

Refs dokku/dokku#5468
2022-12-26 23:49:28 -05:00
Jose Diaz-Gonzalez
503a462b38 Release 1.26.0 2022-12-26 19:02:19 -05:00
josegonzalez
67dc23229a Merge pull request #150 from dokku/pause-stop-rm
Add :pause subcommand and make :stop subcommand actually remove the container
2022-12-26 18:20:19 -05:00
Jose Diaz-Gonzalez
83a8871862 feat: add :pause subcommand and make :stop subcommand actually remove the container 2022-12-26 17:39:49 -05:00
Jose Diaz-Gonzalez
aba953cade docs: update readme 2022-12-26 17:27:30 -05:00
Jose Diaz-Gonzalez
2f8abf96b3 Release 1.25.0 2022-10-12 14:19:55 -04:00
Jose Diaz-Gonzalez
256e905831 Merge pull request #143 from igormatkovic/patch-1
Add --no-tablespaces to the mysqldump command
2022-10-12 14:18:37 -04:00
Jose Diaz-Gonzalez
971446129a Release 1.24.0 2022-10-12 01:28:13 -04:00
Jose Diaz-Gonzalez
734c6190b0 Merge pull request #145 from dokku/dependabot/docker/mysql-8.0.31
chore(deps): bump mysql from 8.0.29 to 8.0.31
2022-10-11 21:47:09 -07:00
Jose Diaz-Gonzalez
9778d2f7de Merge pull request #146 from dokku/arm-support
Update all related images to add arm/arm64 support
2022-10-11 21:45:39 -07:00
Jose Diaz-Gonzalez
c1b7936f29 feat: update all related images to add arm/arm64 support 2022-10-11 23:59:25 -04:00
dependabot[bot]
622519eb9d chore(deps): bump mysql from 8.0.29 to 8.0.31
Bumps mysql from 8.0.29 to 8.0.31.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-12 03:09:42 +00:00
Igor Matkovic
c594534013 Add --no-tablespaces to the mysqldump command
Fixes dokku/dokku-mysql#140
2022-08-23 13:04:36 -07:00
Jose Diaz-Gonzalez
9725b9547d Release 1.23.0 2022-07-25 01:31:10 -04:00
Jose Diaz-Gonzalez
07d157e236 feat: add method for listing all plugin services
This will allow other plugins to iterate over the services exposed by a plugin and instantiate whatever is necessary for those services.
2022-07-25 01:30:32 -04:00
Jose Diaz-Gonzalez
41388718a1 Release 1.22.0 2022-07-25 01:17:21 -04:00
Jose Diaz-Gonzalez
e3d30f51b3 chore: run shfmt 2022-07-25 01:15:32 -04:00
Jose Diaz-Gonzalez
3150f35d07 Merge pull request #141 from dokku/filter-services
fix: refactor how services are filtered
2022-07-25 01:12:06 -04:00
Jose Diaz-Gonzalez
50792d0b2c fix: update clone test 2022-07-25 00:36:53 -04:00
Jose Diaz-Gonzalez
2e612a4f0d fix: refactor how services are filtered
The previous method did not include the service type in the user-auth-service hook, which meant it was kinda guess/check as to whether a datastore was filtered correctly for the service in question.

Additionally, we now handle newlines correctly, ensuring that when there _is_ filtering, we treat each datastore as a distinct one.
2022-07-24 23:53:47 -04:00
Jose Diaz-Gonzalez
fea00997b5 fix: move warning below service name verification 2022-07-19 01:34:21 -04:00
Jose Diaz-Gonzalez
5841758fe3 Release 1.21.0 2022-07-10 15:30:48 -04:00
Jose Diaz-Gonzalez
cb063234a9 refactor: set the plugin name as the first argument to the service-action trigger
This is a breaking change, but is necessary as otherwise it is impossible to know which datastore plugin a team is meant for.
2022-07-10 15:29:11 -04:00
26 changed files with 158 additions and 63 deletions

View File

@@ -18,7 +18,7 @@ main() {
# built in the Dockerfile # built in the Dockerfile
PLUGIN_NAME="$(source /tmp/.env && echo "$PLUGIN_NAME")" PLUGIN_NAME="$(source /tmp/.env && echo "$PLUGIN_NAME")"
PLUGIN_VARIABLE="$(source /tmp/.env && echo "$PLUGIN_VARIABLE")" PLUGIN_VARIABLE="$(source /tmp/.env && echo "$PLUGIN_VARIABLE")"
echo "export ${PLUGIN_VARIABLE}_HOST_ROOT=${SERVICE_HOST_ROOT}/$PLUGIN_NAME" > /etc/default/dokku echo "export ${PLUGIN_VARIABLE}_HOST_ROOT=${SERVICE_HOST_ROOT}/$PLUGIN_NAME" >/etc/default/dokku
} }
main "$@" main "$@"

View File

@@ -1 +1 @@
FROM mysql:8.0.29 FROM mysql:8.0.31

View File

@@ -1,6 +1,6 @@
# dokku mysql [![Build Status](https://img.shields.io/github/workflow/status/dokku/dokku-mysql/CI/master?style=flat-square "Build Status")](https://github.com/dokku/dokku-mysql/actions/workflows/ci.yml?query=branch%3Amaster) [![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku) # dokku mysql [![Build Status](https://img.shields.io/github/actions/workflow/status/dokku/dokku-mysql/ci.yml?branch=master&style=flat-square "Build Status")](https://github.com/dokku/dokku-mysql/actions/workflows/ci.yml?query=branch%3Amaster) [![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku)
Official mysql plugin for dokku. Currently defaults to installing [mysql 8.0.29](https://hub.docker.com/_/mysql/). Official mysql plugin for dokku. Currently defaults to installing [mysql 8.0.31](https://hub.docker.com/_/mysql/).
## Requirements ## Requirements
@@ -41,6 +41,7 @@ mysql:linked <service> <app> # check if the mysql service
mysql:links <service> # list all apps linked to the mysql service mysql:links <service> # list all apps linked to the mysql service
mysql:list # list all mysql services mysql:list # list all mysql services
mysql:logs <service> [-t|--tail] <tail-num-optional> # print the most recent log(s) for this service mysql:logs <service> [-t|--tail] <tail-num-optional> # print the most recent log(s) for this service
mysql:pause <service> # pause a running mysql service
mysql:promote <service> <app> # promote service <service> as DATABASE_URL in <app> mysql:promote <service> <app> # promote service <service> as DATABASE_URL in <app>
mysql:restart <service> # graceful shutdown and restart of the mysql service container mysql:restart <service> # graceful shutdown and restart of the mysql service container
mysql:start <service> # start a previously stopped mysql service mysql:start <service> # start a previously stopped mysql service
@@ -370,12 +371,25 @@ dokku mysql:start lollipop
dokku mysql:stop <service> dokku mysql:stop <service>
``` ```
Stop the service and the running container: Stop the service and removes the running container:
```shell ```shell
dokku mysql:stop lollipop dokku mysql:stop lollipop
``` ```
### pause a running mysql service
```shell
# usage
dokku mysql:pause <service>
```
Pause the running container for the service:
```shell
dokku mysql:pause lollipop
```
### graceful shutdown and restart of the mysql service container ### graceful shutdown and restart of the mysql service container
```shell ```shell

View File

@@ -35,7 +35,7 @@ def header(service):
return " ".join( return " ".join(
[ [
f"# dokku {service}", f"# dokku {service}",
f'[![Build Status](https://img.shields.io/github/workflow/status/dokku/dokku-{service}/CI/master?style=flat-square "Build Status")](https://github.com/dokku/dokku-{service}/actions/workflows/ci.yml?query=branch%3Amaster)', f'[![Build Status](https://img.shields.io/github/actions/workflow/status/dokku/dokku-{service}/ci.yml?branch=master&style=flat-square "Build Status")](https://github.com/dokku/dokku-{service}/actions/workflows/ci.yml?query=branch%3Amaster)',
f'[![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku)', f'[![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku)',
] ]
) )
@@ -148,6 +148,7 @@ def usage_lifecycle(service, variable, alias, image, scheme, ports, options, uni
"promote", "promote",
"start", "start",
"stop", "stop",
"pause",
"restart", "restart",
"upgrade", "upgrade",
] ]

View File

@@ -48,17 +48,27 @@ auth_service_filter() {
export SSH_USER=${SSH_USER:=$USER} export SSH_USER=${SSH_USER:=$USER}
export SSH_NAME=${NAME:="default"} export SSH_NAME=${NAME:="default"}
# the output of this trigger should be all the services a user has access to # the output of this trigger should be all the services a user has access to
plugn trigger user-auth-service "$SSH_USER" "$SSH_NAME" "${SERVICES[@]}" plugn trigger user-auth-service "$SSH_USER" "$SSH_NAME" "$PLUGIN_COMMAND_PREFIX" "${SERVICES[@]}"
} }
fn-services-list() { fn-services-list() {
declare desc="prints a filtered list of all local apps" declare desc="prints a filtered list of all local apps"
declare FILTER="$1" declare FILTER="$1"
local detected_services filtered_services services local services=()
pushd "$PLUGIN_DATA_ROOT" >/dev/null
for f in *; do
[[ -d $f ]] || continue
services+=("$f")
done
popd &>/dev/null || pushd "/tmp" >/dev/null
if [[ "${#services[@]}" -eq 0 ]]; then
return
fi
local detected_services=("$(ls "$PLUGIN_DATA_ROOT" 2>/dev/null)")
if [[ "$FILTER" == "false" ]]; then if [[ "$FILTER" == "false" ]]; then
for service in "${detected_services[@]}"; do for service in "${services[@]}"; do
if [[ -n "$service" ]]; then if [[ -n "$service" ]]; then
echo "$service" echo "$service"
fi fi
@@ -66,8 +76,7 @@ fn-services-list() {
return return
fi fi
filtered_services="$(auth_service_filter "${detected_services[@]}" 2>/dev/null)" for service in $(auth_service_filter "${services[@]}" 2>/dev/null); do
for service in "$filtered_services"; do
if [[ -n "$service" ]]; then if [[ -n "$service" ]]; then
echo "$service" echo "$service"
fi fi
@@ -94,7 +103,7 @@ get_database_name() {
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
if [[ ! -f "$SERVICE_ROOT/DATABASE_NAME" ]]; then if [[ ! -f "$SERVICE_ROOT/DATABASE_NAME" ]]; then
echo "$SERVICE" > "$SERVICE_ROOT/DATABASE_NAME" echo "$SERVICE" >"$SERVICE_ROOT/DATABASE_NAME"
fi fi
cat "$SERVICE_ROOT/DATABASE_NAME" cat "$SERVICE_ROOT/DATABASE_NAME"
@@ -237,8 +246,7 @@ service_app_links() {
declare APP="$1" declare APP="$1"
local LINKED_APP SERVICE SERVICE_ROOT local LINKED_APP SERVICE SERVICE_ROOT
pushd "$PLUGIN_DATA_ROOT" >/dev/null for SERVICE in $(fn-services-list true); do
for SERVICE in $(fn-services-list); do
[[ -n "$SERVICE" ]] || continue [[ -n "$SERVICE" ]] || continue
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
@@ -309,7 +317,6 @@ service_commit_config() {
local CONFIG_VARIABLE="${PLUGIN_VARIABLE}_CONFIG_OPTIONS" local CONFIG_VARIABLE="${PLUGIN_VARIABLE}_CONFIG_OPTIONS"
local ENV_VARIABLE="${PLUGIN_VARIABLE}_CUSTOM_ENV" local ENV_VARIABLE="${PLUGIN_VARIABLE}_CUSTOM_ENV"
custom_env="${!ENV_VARIABLE}" custom_env="${!ENV_VARIABLE}"
[[ -n "$SERVICE_CUSTOM_ENV" ]] && custom_env="$SERVICE_CUSTOM_ENV" [[ -n "$SERVICE_CUSTOM_ENV" ]] && custom_env="$SERVICE_CUSTOM_ENV"
if [[ -n $custom_env ]]; then if [[ -n $custom_env ]]; then
@@ -436,7 +443,7 @@ service_container_rm() {
local SERVICE_NAME="$(get_service_name "$SERVICE")" local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ID local ID
service_stop "$SERVICE" service_pause "$SERVICE"
ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
# this may be 'true' in tests... # this may be 'true' in tests...
if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then
@@ -590,7 +597,7 @@ service_link() {
fi fi
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK" [[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
plugn trigger service-action pre-link "$SERVICE" "$APP" plugn trigger service-action pre-link "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
add_to_links_file "$SERVICE" "$APP" add_to_links_file "$SERVICE" "$APP"
if declare -f -F add_passed_docker_option >/dev/null; then if declare -f -F add_passed_docker_option >/dev/null; then
@@ -601,13 +608,13 @@ service_link() {
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME" dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
fi fi
[[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}" [[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}"
plugn trigger service-action post-link "$SERVICE" "$APP" plugn trigger service-action post-link "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then
config_set --no-restart "$APP" "${ALIAS}_URL=$SERVICE_URL" config_set --no-restart "$APP" "${ALIAS}_URL=$SERVICE_URL"
else else
config_set "$APP" "${ALIAS}_URL=$SERVICE_URL" config_set "$APP" "${ALIAS}_URL=$SERVICE_URL"
fi fi
plugn trigger service-action post-link-complete "$SERVICE" "$APP" plugn trigger service-action post-link-complete "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
} }
service_linked_apps() { service_linked_apps() {
@@ -637,7 +644,7 @@ service_links() {
service_list() { service_list() {
declare desc="list all services and their status" declare desc="list all services and their status"
services=("$(fn-services-list true)") mapfile -t services < <(fn-services-list true)
if [[ "${#services[@]}" -eq 0 ]] || [[ -z "$services" ]]; then if [[ "${#services[@]}" -eq 0 ]] || [[ -z "$services" ]]; then
dokku_log_warn "There are no $PLUGIN_SERVICE services" dokku_log_warn "There are no $PLUGIN_SERVICE services"
return return
@@ -645,7 +652,7 @@ service_list() {
dokku_log_info2_quiet "$PLUGIN_SERVICE services" dokku_log_info2_quiet "$PLUGIN_SERVICE services"
for service in "${services[@]}"; do for service in "${services[@]}"; do
echo "$service" echo "${service}"
done done
} }
@@ -889,19 +896,19 @@ service_status() {
echo "missing" && return 0 echo "missing" && return 0
} }
service_stop() { service_pause() {
declare desc="stop a running service" declare desc="pause a running service"
declare SERVICE="$1" declare 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 ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true local ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
[[ -z $ID ]] && dokku_log_warn "Service is already stopped" && return 0 [[ -z $ID ]] && dokku_log_warn "Service is already paused" && return 0
if [[ -n $ID ]]; then if [[ -n $ID ]]; then
dokku_log_info2_quiet "Stopping container" dokku_log_info2_quiet "Pausing container"
docker stop "$SERVICE_NAME" >/dev/null docker stop "$SERVICE_NAME" >/dev/null
service_port_pause "$SERVICE" service_port_pause "$SERVICE"
dokku_log_verbose_quiet "Container stopped" dokku_log_verbose_quiet "Container paused"
else else
dokku_log_verbose_quiet "No container exists for $SERVICE" dokku_log_verbose_quiet "No container exists for $SERVICE"
fi fi
@@ -917,7 +924,7 @@ service_unlink() {
local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE") local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
plugn trigger service-action pre-unlink "$SERVICE" "$APP" plugn trigger service-action pre-unlink "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
remove_from_links_file "$SERVICE" "$APP" remove_from_links_file "$SERVICE" "$APP"
if declare -f -F add_passed_docker_option >/dev/null; then if declare -f -F add_passed_docker_option >/dev/null; then
@@ -929,13 +936,13 @@ service_unlink() {
fi fi
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP" [[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
plugn trigger service-action post-unlink "$SERVICE" "$APP" plugn trigger service-action post-unlink "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then
config_unset --no-restart "$APP" "${LINK[@]}" config_unset --no-restart "$APP" "${LINK[@]}"
else else
config_unset "$APP" "${LINK[@]}" config_unset "$APP" "${LINK[@]}"
fi fi
plugn trigger service-action post-unlink-complete "$SERVICE" "$APP" plugn trigger service-action post-unlink-complete "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
} }
service_version() { service_version() {
@@ -981,5 +988,5 @@ write_database_name() {
# some datastores do not like special characters in database names # some datastores do not like special characters in database names
# so we need to normalize them out # so we need to normalize them out
echo "$SERVICE" | tr .- _ > "$SERVICE_ROOT/DATABASE_NAME" echo "$SERVICE" | tr .- _ >"$SERVICE_ROOT/DATABASE_NAME"
} }

11
config
View File

@@ -3,7 +3,8 @@ _DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export MYSQL_IMAGE=${MYSQL_IMAGE:="$(awk -F '[ :]' '{print $2}' "${_DIR}/Dockerfile")"} export MYSQL_IMAGE=${MYSQL_IMAGE:="$(awk -F '[ :]' '{print $2}' "${_DIR}/Dockerfile")"}
export MYSQL_IMAGE_VERSION=${MYSQL_IMAGE_VERSION:="$(awk -F '[ :]' '{print $3}' "${_DIR}/Dockerfile")"} export MYSQL_IMAGE_VERSION=${MYSQL_IMAGE_VERSION:="$(awk -F '[ :]' '{print $3}' "${_DIR}/Dockerfile")"}
export MYSQL_ROOT=${MYSQL_ROOT:="$DOKKU_LIB_ROOT/services/mysql"} export MYSQL_ROOT=${MYSQL_ROOT:="$DOKKU_LIB_ROOT/services/mysql"}
export MYSQL_HOST_ROOT=${MYSQL_HOST_ROOT:=$MYSQL_ROOT} export DOKKU_LIB_HOST_ROOT=${DOKKU_LIB_HOST_ROOT:=$DOKKU_LIB_ROOT}
export MYSQL_HOST_ROOT=${MYSQL_HOST_ROOT:="$DOKKU_LIB_HOST_ROOT/services/mysql"}
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=() export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
export PLUGIN_COMMAND_PREFIX="mysql" export PLUGIN_COMMAND_PREFIX="mysql"
@@ -27,9 +28,9 @@ if [[ -n $DOKKU_API_VERSION ]]; then
export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH" export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
fi fi
export PLUGIN_BUSYBOX_IMAGE="busybox:1.31.1-uclibc" export PLUGIN_BUSYBOX_IMAGE="busybox:1.34.1-uclibc"
export PLUGIN_AMBASSADOR_IMAGE="dokku/ambassador:0.3.3" export PLUGIN_AMBASSADOR_IMAGE="dokku/ambassador:0.5.0"
export PLUGIN_S3BACKUP_IMAGE="dokku/s3backup:0.10.3" export PLUGIN_S3BACKUP_IMAGE="dokku/s3backup:0.14.0"
export PLUGIN_WAIT_IMAGE="dokku/wait:0.4.3" export PLUGIN_WAIT_IMAGE="dokku/wait:0.6.0"
export MYSQL_CONFIG_OPTIONS=${MYSQL_CONFIG_OPTIONS:=""} export MYSQL_CONFIG_OPTIONS=${MYSQL_CONFIG_OPTIONS:=""}

View File

@@ -41,7 +41,7 @@ service_create() {
docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed"
fi fi
plugn trigger service-action pre-create "$SERVICE" plugn trigger service-action pre-create "$PLUGIN_COMMAND_PREFIX" "$SERVICE"
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory" mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
mkdir -p "$SERVICE_ROOT/data" || dokku_log_fail "Unable to create service data directory" mkdir -p "$SERVICE_ROOT/data" || dokku_log_fail "Unable to create service data directory"
mkdir -p "$SERVICE_ROOT/$PLUGIN_CONFIG_SUFFIX" || dokku_log_fail "Unable to create service config directory" mkdir -p "$SERVICE_ROOT/$PLUGIN_CONFIG_SUFFIX" || dokku_log_fail "Unable to create service config directory"
@@ -65,9 +65,9 @@ service_create() {
service_commit_config "$SERVICE" service_commit_config "$SERVICE"
write_database_name "$SERVICE" write_database_name "$SERVICE"
plugn trigger service-action post-create "$SERVICE" plugn trigger service-action post-create "$PLUGIN_COMMAND_PREFIX" "$SERVICE"
service_create_container "$SERVICE" service_create_container "$SERVICE"
plugn trigger service-action post-create-complete "$SERVICE" plugn trigger service-action post-create-complete "$PLUGIN_COMMAND_PREFIX" "$SERVICE"
} }
service_create_container() { service_create_container() {
@@ -117,7 +117,7 @@ service_export() {
[[ -n $SSH_TTY ]] && stty -opost [[ -n $SSH_TTY ]] && stty -opost
docker exec "$SERVICE_NAME" bash -c "printf '[client]\ndefault-character-set=utf8mb4\npassword=$PASSWORD\n' > /root/credentials.cnf" docker exec "$SERVICE_NAME" bash -c "printf '[client]\ndefault-character-set=utf8mb4\npassword=$PASSWORD\n' > /root/credentials.cnf"
docker exec "$SERVICE_NAME" mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql --single-transaction --quick "$DATABASE_NAME" docker exec "$SERVICE_NAME" mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql --single-transaction --no-tablespaces --quick "$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

View File

@@ -50,8 +50,8 @@ EOL
if [[ ! -f "$SERVICE_ROOT/IMAGE" ]] || [[ ! -f "$SERVICE_ROOT/IMAGE_VERSION" ]]; then if [[ ! -f "$SERVICE_ROOT/IMAGE" ]] || [[ ! -f "$SERVICE_ROOT/IMAGE_VERSION" ]]; then
local image="$(service_version "$SERVICE")" local image="$(service_version "$SERVICE")"
if [[ "$image" == *":"* ]]; then if [[ "$image" == *":"* ]]; then
echo "${image%:*}" > "$SERVICE_ROOT/IMAGE" echo "${image%:*}" >"$SERVICE_ROOT/IMAGE"
echo "${image##*:}" > "$SERVICE_ROOT/IMAGE_VERSION" echo "${image##*:}" >"$SERVICE_ROOT/IMAGE_VERSION"
fi fi
fi fi

View File

@@ -1,4 +1,4 @@
[plugin] [plugin]
description = "dokku mysql service plugin" description = "dokku mysql service plugin"
version = "1.20.1" version = "1.26.2"
[plugin.config] [plugin.config]

20
service-list Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common-functions"
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
plugin-service-list() {
declare desc="allows listing all services for use by other dokku plugins"
declare SERVICE_TYPE="$1"
if [[ -n "$SERVICE_TYPE" ]] && [[ "$SERVICE_TYPE" != "$PLUGIN_COMMAND_PREFIX" ]]; then
return
fi
for service in $(fn-services-list false); do
echo "$PLUGIN_COMMAND_PREFIX:$service"
done
}
plugin-service-list "$@"

View File

@@ -41,7 +41,7 @@ service-destroy-cmd() {
fi fi
dokku_log_info2_quiet "Deleting $SERVICE" dokku_log_info2_quiet "Deleting $SERVICE"
plugn trigger service-action pre-delete "$SERVICE" plugn trigger service-action pre-delete "$PLUGIN_COMMAND_PREFIX" "$SERVICE"
service_backup_unschedule "$SERVICE" service_backup_unschedule "$SERVICE"
service_container_rm "$SERVICE" service_container_rm "$SERVICE"
@@ -49,7 +49,7 @@ service-destroy-cmd() {
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/config" "$PLUGIN_BUSYBOX_IMAGE" chmod 777 -R /config /data docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/config" "$PLUGIN_BUSYBOX_IMAGE" chmod 777 -R /config /data
rm -rf "$SERVICE_ROOT" rm -rf "$SERVICE_ROOT"
plugn trigger service-action post-delete "$SERVICE" plugn trigger service-action post-delete "$PLUGIN_COMMAND_PREFIX" "$SERVICE"
dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE" dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE"
} }

View File

@@ -19,8 +19,8 @@ service-enter-cmd() {
[[ ${argv[0]} == "$cmd" ]] && shift 1 [[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1" declare SERVICE="$1"
dokku_log_info1_quiet "Filesystem changes may not persist after container restarts"
verify_service_name "$SERVICE" verify_service_name "$SERVICE"
dokku_log_info1_quiet "Filesystem changes may not persist after container restarts"
service_enter "$SERVICE" "${@:2}" service_enter "$SERVICE" "${@:2}"
} }

22
subcommands/pause Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_BASE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-pause-cmd() {
#E pause the running container for the service
#E dokku $PLUGIN_COMMAND_PREFIX:pause lollipop
#A service, service to run command against
declare desc="pause a running $PLUGIN_SERVICE service"
local cmd="$PLUGIN_COMMAND_PREFIX:pause" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
verify_service_name "$SERVICE"
service_pause "$SERVICE"
}
service-pause-cmd "$@"

View File

@@ -16,7 +16,7 @@ service-restart-cmd() {
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service" [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
verify_service_name "$SERVICE" verify_service_name "$SERVICE"
service_stop "$SERVICE" service_pause "$SERVICE"
service_start "$SERVICE" service_start "$SERVICE"
dokku_log_info1 "Please call dokku ps:restart on all linked apps" dokku_log_info1 "Please call dokku ps:restart on all linked apps"
} }

View File

@@ -6,7 +6,7 @@ source "$PLUGIN_BASE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-stop-cmd() { service-stop-cmd() {
#E stop the service and the running container #E stop the service and removes the running container
#E dokku $PLUGIN_COMMAND_PREFIX:stop lollipop #E dokku $PLUGIN_COMMAND_PREFIX:stop lollipop
#A service, service to run command against #A service, service to run command against
declare desc="stop a running $PLUGIN_SERVICE service" declare desc="stop a running $PLUGIN_SERVICE service"
@@ -16,7 +16,7 @@ service-stop-cmd() {
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service" [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
verify_service_name "$SERVICE" verify_service_name "$SERVICE"
service_stop "$SERVICE" service_container_rm "$SERVICE"
} }
service-stop-cmd "$@" service-stop-cmd "$@"

View File

@@ -38,6 +38,16 @@ service-upgrade-cmd() {
return return
fi fi
if ! service_image_exists "$SERVICE"; then
if [[ "$PLUGIN_DISABLE_PULL" == "true" ]]; then
dokku_log_warn "${PLUGIN_DISABLE_PULL_VARIABLE} environment variable detected. Not running pull command." 1>&2
dokku_log_warn " docker pull ${IMAGE}" 1>&2
dokku_log_warn "$PLUGIN_SERVICE service $SERVICE upgrade failed"
exit 1
fi
docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed"
fi
service_commit_config "$SERVICE" service_commit_config "$SERVICE"
dokku_log_info2 "Upgrading $SERVICE to $NEW_PLUGIN_IMAGE_TAG" dokku_log_info2 "Upgrading $SERVICE to $NEW_PLUGIN_IMAGE_TAG"

View File

@@ -13,7 +13,7 @@ teardown() {
} }
@test "($PLUGIN_COMMAND_PREFIX:hook:pre-delete) removes app from links file when destroying app" { @test "($PLUGIN_COMMAND_PREFIX:hook:pre-delete) removes app from links file when destroying app" {
[[ -n $(< "$PLUGIN_DATA_ROOT/l/LINKS") ]] [[ -n $(<"$PLUGIN_DATA_ROOT/l/LINKS") ]]
dokku --force apps:destroy my-app dokku --force apps:destroy my-app
[[ -z $(< "$PLUGIN_DATA_ROOT/l/LINKS") ]] [[ -z $(<"$PLUGIN_DATA_ROOT/l/LINKS") ]]
} }

View File

@@ -30,7 +30,7 @@ teardown() {
@test "($PLUGIN_COMMAND_PREFIX:clone) error when new service already exists" { @test "($PLUGIN_COMMAND_PREFIX:clone) error when new service already exists" {
dokku "$PLUGIN_COMMAND_PREFIX:create" new_service dokku "$PLUGIN_COMMAND_PREFIX:create" new_service
run dokku "$PLUGIN_COMMAND_PREFIX:clone" l new_service run dokku "$PLUGIN_COMMAND_PREFIX:clone" l new_service
assert_contains "${lines[*]}" "service new_service already exists" assert_contains "${lines[*]}" "Invalid service name new_service"
assert_failure assert_failure
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service

View File

@@ -23,7 +23,7 @@ teardown() {
if [[ -n "$GITHUB_WORKFLOW" ]]; then if [[ -n "$GITHUB_WORKFLOW" ]]; then
skip "No tty is available on Github Actions" skip "No tty is available on Github Actions"
fi fi
export SSH_TTY=`tty` export SSH_TTY=$(tty)
run dokku "$PLUGIN_COMMAND_PREFIX:export" l run dokku "$PLUGIN_COMMAND_PREFIX:export" l
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"

View File

@@ -33,7 +33,7 @@ teardown() {
} }
@test "($PLUGIN_COMMAND_PREFIX:import) success" { @test "($PLUGIN_COMMAND_PREFIX:import) success" {
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "/tmp/fake.sql" run dokku "$PLUGIN_COMMAND_PREFIX:import" l <"/tmp/fake.sql"
echo "output: $output" echo "output: $output"
echo "status: $status" echo "status: $status"
assert_success assert_success

View File

@@ -13,7 +13,6 @@ teardown() {
dokku --force apps:destroy my-app dokku --force apps:destroy my-app
} }
@test "($PLUGIN_COMMAND_PREFIX:link) error when there are no arguments" { @test "($PLUGIN_COMMAND_PREFIX:link) error when there are no arguments" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" run dokku "$PLUGIN_COMMAND_PREFIX:link"
echo "output: $output" echo "output: $output"

25
tests/service_pause.bats Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bats
load test_helper
setup() {
dokku "$PLUGIN_COMMAND_PREFIX:create" l
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
}
@test "($PLUGIN_COMMAND_PREFIX:pause) error when there are no arguments" {
run dokku "$PLUGIN_COMMAND_PREFIX:pause"
assert_contains "${lines[*]}" "Please specify a valid name for the service"
}
@test "($PLUGIN_COMMAND_PREFIX:pause) error when service does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:pause" not_existing_service
assert_contains "${lines[*]}" "service not_existing_service does not exist"
}
@test "($PLUGIN_COMMAND_PREFIX:pause) success" {
run dokku "$PLUGIN_COMMAND_PREFIX:pause" l
assert_success
}

View File

@@ -23,4 +23,3 @@ teardown() {
run dokku "$PLUGIN_COMMAND_PREFIX:restart" l run dokku "$PLUGIN_COMMAND_PREFIX:restart" l
assert_success assert_success
} }

View File

@@ -23,4 +23,3 @@ teardown() {
run dokku "$PLUGIN_COMMAND_PREFIX:start" l run dokku "$PLUGIN_COMMAND_PREFIX:start" l
assert_success assert_success
} }

View File

@@ -23,4 +23,3 @@ teardown() {
run dokku "$PLUGIN_COMMAND_PREFIX:stop" l run dokku "$PLUGIN_COMMAND_PREFIX:stop" l
assert_success assert_success
} }

View File

@@ -25,4 +25,3 @@ teardown() {
[[ ! -f $PLUGIN_DATA_ROOT/PORT ]] [[ ! -f $PLUGIN_DATA_ROOT/PORT ]]
assert_contains "${lines[*]}" "Service l unexposed" assert_contains "${lines[*]}" "Service l unexposed"
} }