Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d654334225 | ||
|
|
409cd36b63 | ||
|
|
5a181a6a4c | ||
|
|
077aa4dc11 | ||
|
|
6ebdb98ac8 | ||
|
|
b7e092db39 | ||
|
|
3f338c7985 | ||
|
|
1cde514fba |
20
README.md
20
README.md
@@ -1,6 +1,6 @@
|
|||||||
# dokku postgres [](https://github.com/dokku/dokku-postgres/actions/workflows/ci.yml?query=branch%3Amaster) [](https://webchat.libera.chat/?channels=dokku)
|
# dokku postgres [](https://github.com/dokku/dokku-postgres/actions/workflows/ci.yml?query=branch%3Amaster) [](https://webchat.libera.chat/?channels=dokku)
|
||||||
|
|
||||||
Official postgres plugin for dokku. Currently defaults to installing [postgres 14.4](https://hub.docker.com/_/postgres/).
|
Official postgres plugin for dokku. Currently defaults to installing [postgres 14.5](https://hub.docker.com/_/postgres/).
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -41,6 +41,7 @@ postgres:linked <service> <app> # check if the postgres servi
|
|||||||
postgres:links <service> # list all apps linked to the postgres service
|
postgres:links <service> # list all apps linked to the postgres service
|
||||||
postgres:list # list all postgres services
|
postgres:list # list all postgres services
|
||||||
postgres:logs <service> [-t|--tail] <tail-num-optional> # print the most recent log(s) for this service
|
postgres:logs <service> [-t|--tail] <tail-num-optional> # print the most recent log(s) for this service
|
||||||
|
postgres:pause <service> # pause a running postgres service
|
||||||
postgres:promote <service> <app> # promote service <service> as DATABASE_URL in <app>
|
postgres:promote <service> <app> # promote service <service> as DATABASE_URL in <app>
|
||||||
postgres:restart <service> # graceful shutdown and restart of the postgres service container
|
postgres:restart <service> # graceful shutdown and restart of the postgres service container
|
||||||
postgres:start <service> # start a previously stopped postgres service
|
postgres:start <service> # start a previously stopped postgres service
|
||||||
@@ -376,12 +377,25 @@ dokku postgres:start lollipop
|
|||||||
dokku postgres:stop <service>
|
dokku postgres:stop <service>
|
||||||
```
|
```
|
||||||
|
|
||||||
Stop the service and the running container:
|
Stop the service and removes the running container:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku postgres:stop lollipop
|
dokku postgres:stop lollipop
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### pause a running postgres service
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# usage
|
||||||
|
dokku postgres:pause <service>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pause the running container for the service:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku postgres:pause lollipop
|
||||||
|
```
|
||||||
|
|
||||||
### graceful shutdown and restart of the postgres service container
|
### graceful shutdown and restart of the postgres service container
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ def header(service):
|
|||||||
return " ".join(
|
return " ".join(
|
||||||
[
|
[
|
||||||
f"# dokku {service}",
|
f"# dokku {service}",
|
||||||
f'[](https://github.com/dokku/dokku-{service}/actions/workflows/ci.yml?query=branch%3Amaster)',
|
f'[](https://github.com/dokku/dokku-{service}/actions/workflows/ci.yml?query=branch%3Amaster)',
|
||||||
f'[](https://webchat.libera.chat/?channels=dokku)',
|
f'[](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",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -443,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
|
||||||
@@ -896,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
|
||||||
|
|||||||
3
config
3
config
@@ -3,7 +3,8 @@ _DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
export POSTGRES_IMAGE=${POSTGRES_IMAGE:="$(awk -F '[ :]' '{print $2}' "${_DIR}/Dockerfile")"}
|
export POSTGRES_IMAGE=${POSTGRES_IMAGE:="$(awk -F '[ :]' '{print $2}' "${_DIR}/Dockerfile")"}
|
||||||
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="$(awk -F '[ :]' '{print $3}' "${_DIR}/Dockerfile")"}
|
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="$(awk -F '[ :]' '{print $3}' "${_DIR}/Dockerfile")"}
|
||||||
export POSTGRES_ROOT=${POSTGRES_ROOT:="$DOKKU_LIB_ROOT/services/postgres"}
|
export POSTGRES_ROOT=${POSTGRES_ROOT:="$DOKKU_LIB_ROOT/services/postgres"}
|
||||||
export POSTGRES_HOST_ROOT=${POSTGRES_HOST_ROOT:=$POSTGRES_ROOT}
|
export DOKKU_LIB_HOST_ROOT=${DOKKU_LIB_HOST_ROOT:=$DOKKU_LIB_ROOT}
|
||||||
|
export POSTGRES_HOST_ROOT=${POSTGRES_HOST_ROOT:="$DOKKU_LIB_HOST_ROOT/services/postgres"}
|
||||||
|
|
||||||
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
|
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
|
||||||
export PLUGIN_COMMAND_PREFIX="postgres"
|
export PLUGIN_COMMAND_PREFIX="postgres"
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ service_create_container() {
|
|||||||
docker exec "$SERVICE_NAME" su - postgres -c "createdb -E utf8 $DATABASE_NAME" 2>/dev/null || dokku_log_verbose_quiet 'Already exists'
|
docker exec "$SERVICE_NAME" su - postgres -c "createdb -E utf8 $DATABASE_NAME" 2>/dev/null || dokku_log_verbose_quiet 'Already exists'
|
||||||
|
|
||||||
dokku_log_verbose_quiet "Securing connection to database"
|
dokku_log_verbose_quiet "Securing connection to database"
|
||||||
service_stop "$SERVICE" >/dev/null
|
service_pause "$SERVICE" >/dev/null
|
||||||
docker run --rm -i -v "$SERVICE_HOST_ROOT/data:/var/lib/postgresql/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -s <"$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/enable_ssl.sh" &>/dev/null
|
docker run --rm -i -v "$SERVICE_HOST_ROOT/data:/var/lib/postgresql/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -s <"$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/enable_ssl.sh" &>/dev/null
|
||||||
|
|
||||||
PREVIOUS_ID=$(docker ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
PREVIOUS_ID=$(docker ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku postgres service plugin"
|
description = "dokku postgres service plugin"
|
||||||
version = "1.25.0"
|
version = "1.26.1"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
22
subcommands/pause
Executable file
22
subcommands/pause
Executable 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 "$@"
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 "$@"
|
||||||
|
|||||||
25
tests/service_pause.bats
Executable file
25
tests/service_pause.bats
Executable 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user