Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45131b4e14 | ||
|
|
bff0b6aded | ||
|
|
944e1ac433 | ||
|
|
35a5add342 | ||
|
|
f6a9a0cea6 | ||
|
|
3f795fab02 | ||
|
|
eaaa3cb28f | ||
|
|
c0cc6f20d2 | ||
|
|
801a55ec87 | ||
|
|
1ac9d45b37 | ||
|
|
dc5a8f2c38 | ||
|
|
e90db384c8 | ||
|
|
76af54aa26 | ||
|
|
2f6a998d89 | ||
|
|
7cc2f77ec7 | ||
|
|
5946a56acb | ||
|
|
15abadb174 | ||
|
|
04b856ccd6 | ||
|
|
17e9783db3 | ||
|
|
5fe00e2321 | ||
|
|
7193fc06e6 | ||
|
|
5cce4f703c | ||
|
|
87b8dd178d | ||
|
|
330bf36b76 | ||
|
|
c5f634c5e8 | ||
|
|
2a97cf3fa7 | ||
|
|
b5fbd799b6 | ||
|
|
e3f7c1a71e | ||
|
|
3466997632 | ||
|
|
17439f7a0a | ||
|
|
4939abaa41 | ||
|
|
e85adaf39e | ||
|
|
5eac5448e6 |
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@@ -17,12 +17,12 @@ concurrency:
|
||||
jobs:
|
||||
unit-tests-master:
|
||||
name: unit-tests
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOKKU_VERSION: master
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -59,12 +59,12 @@ jobs:
|
||||
|
||||
unit-tests-0_19_0:
|
||||
name: unit-tests-0.19.0
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOKKU_TAG: v0.19.0
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
2
.github/workflows/tagged-release.yml
vendored
2
.github/workflows/tagged-release.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
jobs:
|
||||
tagged-release:
|
||||
name: tagged-release
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: "marvinpinto/action-automatic-releases@v1.2.1"
|
||||
|
||||
@@ -1 +1 @@
|
||||
FROM mongo:5.0.14
|
||||
FROM mongo:7.0.1
|
||||
|
||||
2
Makefile
2
Makefile
@@ -21,7 +21,7 @@ ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(SYSTEM_NAME),darwin)
|
||||
brew install shellcheck
|
||||
else
|
||||
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse'
|
||||
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse'
|
||||
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get clean
|
||||
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
|
||||
endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# dokku mongo [](https://github.com/dokku/dokku-mongo/actions/workflows/ci.yml?query=branch%3Amaster) [](https://webchat.libera.chat/?channels=dokku)
|
||||
|
||||
Official mongo plugin for dokku. Currently defaults to installing [mongo 5.0.14](https://hub.docker.com/_/mongo/).
|
||||
Official mongo plugin for dokku. Currently defaults to installing [mongo 7.0.0](https://hub.docker.com/_/mongo/).
|
||||
|
||||
## Requirements
|
||||
|
||||
|
||||
2
Vagrantfile
vendored
2
Vagrantfile
vendored
@@ -1,7 +1,7 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-20.04"
|
||||
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-22.04"
|
||||
BOX_MEMORY = ENV["BOX_MEMORY"] || "2048"
|
||||
DOKKU_VERSION = "master"
|
||||
|
||||
|
||||
107
common-functions
107
common-functions
@@ -62,7 +62,7 @@ fn-services-list() {
|
||||
[[ -d $f ]] || continue
|
||||
services+=("$f")
|
||||
done
|
||||
popd &>/dev/null || pushd "/tmp" >/dev/null
|
||||
popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null
|
||||
|
||||
if [[ "${#services[@]}" -eq 0 ]]; then
|
||||
return
|
||||
@@ -282,7 +282,7 @@ service_backup() {
|
||||
BACKUP_TMPDIR=$(mktemp -d --tmpdir)
|
||||
trap 'rm -rf "$BACKUP_TMPDIR" > /dev/null' RETURN INT TERM EXIT
|
||||
|
||||
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
|
||||
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
|
||||
|
||||
(service_export "$SERVICE" >"${BACKUP_TMPDIR}/export")
|
||||
@@ -457,7 +457,7 @@ service_container_rm() {
|
||||
local ID
|
||||
|
||||
service_pause "$SERVICE"
|
||||
ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$") || true
|
||||
# this may be 'true' in tests...
|
||||
if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then
|
||||
return 0
|
||||
@@ -483,7 +483,7 @@ service_enter() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ID="$(cat "$SERVICE_ROOT/ID")"
|
||||
|
||||
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
|
||||
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
|
||||
|
||||
local EXEC_CMD=""
|
||||
@@ -691,7 +691,7 @@ service_logs() {
|
||||
DOKKU_LOGS_ARGS+=" --follow"
|
||||
fi
|
||||
|
||||
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
|
||||
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
|
||||
is_container_status "$ID" "Running" || dokku_log_warn "Service logs may not be output as service is not running"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
@@ -810,39 +810,36 @@ service_root_password() {
|
||||
|
||||
service_port_expose() {
|
||||
declare desc="wrapper for exposing service ports"
|
||||
declare SERVICE="$1"
|
||||
service_start "$SERVICE" "true"
|
||||
service_port_unpause "$SERVICE" "true" "${@:2}"
|
||||
}
|
||||
|
||||
service_port_pause() {
|
||||
declare desc="pause service exposure"
|
||||
declare SERVICE="$1" LOG_FAIL="$2"
|
||||
declare SERVICE="$1" PORTS=(${@:2})
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local EXPOSED_NAME="$(get_service_name "$SERVICE").ambassador"
|
||||
local PORT_FILE="$SERVICE_ROOT/PORT"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local EXPOSED_NAME="$SERVICE_NAME.ambassador"
|
||||
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
[[ ! -f "$PORT_FILE" ]] && dokku_log_fail "Service not exposed"
|
||||
else
|
||||
[[ ! -f "$PORT_FILE" ]] && return 0
|
||||
if [[ ${#PORTS[@]} -eq 0 ]]; then
|
||||
# shellcheck disable=SC2206
|
||||
PORTS=(${PORTS[@]:-$(get_random_ports ${#PLUGIN_DATASTORE_PORTS[@]})})
|
||||
fi
|
||||
|
||||
local GREP_NAME="^/${EXPOSED_NAME}$"
|
||||
local CONTAINER_NAME="$("$DOCKER_BIN" container ps -f name="$GREP_NAME" --format "{{.Names}}")"
|
||||
if [[ -z "$CONTAINER_NAME" ]]; then
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE unexposed"
|
||||
fi
|
||||
[[ "${#PORTS[@]}" != "${#PLUGIN_DATASTORE_PORTS[@]}" ]] && dokku_log_fail "${#PLUGIN_DATASTORE_PORTS[@]} ports to be exposed need to be provided in the following order: ${PLUGIN_DATASTORE_PORTS[*]}"
|
||||
|
||||
return
|
||||
if [[ -s "$PORT_FILE" ]]; then
|
||||
# shellcheck disable=SC2207
|
||||
PORTS=($(cat "$PORT_FILE"))
|
||||
dokku_log_fail "Service $SERVICE already exposed on port(s) ${PORTS[*]}"
|
||||
fi
|
||||
|
||||
"$DOCKER_BIN" container stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
"$DOCKER_BIN" container rm "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE unexposed"
|
||||
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
|
||||
dokku_log_warn "Service $SERVICE has an untracked expose container, removing"
|
||||
"$DOCKER_BIN" container stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
suppress_output "$DOCKER_BIN" container rm "$EXPOSED_NAME"
|
||||
fi
|
||||
|
||||
echo "${PORTS[@]}" >"$PORT_FILE"
|
||||
|
||||
service_start "$SERVICE" "true"
|
||||
service_port_reconcile_status "$SERVICE"
|
||||
dokku_log_info1 "Service $SERVICE exposed on port(s) [container->host]: $(service_exposed_ports "$SERVICE")"
|
||||
}
|
||||
|
||||
service_port_unexpose() {
|
||||
@@ -850,39 +847,41 @@ service_port_unexpose() {
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local PORT_FILE="$SERVICE_ROOT/PORT"
|
||||
service_port_pause "$SERVICE" "true"
|
||||
|
||||
rm -rf "$PORT_FILE"
|
||||
service_port_reconcile_status "$SERVICE"
|
||||
dokku_log_info1 "Service $SERVICE unexposed"
|
||||
}
|
||||
|
||||
service_port_unpause() {
|
||||
declare desc="start service exposure"
|
||||
declare SERVICE="$1" LOG_FAIL="$2"
|
||||
service_port_reconcile_status() {
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local EXPOSED_NAME="${SERVICE_NAME}.ambassador"
|
||||
local PORT_FILE="$SERVICE_ROOT/PORT"
|
||||
# shellcheck disable=SC2068
|
||||
local PORTS=(${@:3})
|
||||
# shellcheck disable=SC2068
|
||||
PORTS=(${PORTS[@]:-$(get_random_ports ${#PLUGIN_DATASTORE_PORTS[@]})})
|
||||
local ID=$(cat "$SERVICE_ROOT/ID")
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local EXPOSED_NAME="$SERVICE_NAME.ambassador"
|
||||
|
||||
[[ "${#PORTS[@]}" != "${#PLUGIN_DATASTORE_PORTS[@]}" ]] && dokku_log_fail "${#PLUGIN_DATASTORE_PORTS[@]} ports to be exposed need to be provided in the following order: ${PLUGIN_DATASTORE_PORTS[*]}"
|
||||
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
[[ -f "$PORT_FILE" ]] && PORTS=($(cat "$PORT_FILE")) && dokku_log_fail "Service $SERVICE already exposed on port(s) ${PORTS[*]}"
|
||||
else
|
||||
[[ ! -f "$PORT_FILE" ]] && return 0
|
||||
PORTS=($(cat "$PORT_FILE"))
|
||||
if [[ ! -s "$PORT_FILE" ]]; then
|
||||
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
|
||||
"$DOCKER_BIN" container stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
suppress_output "$DOCKER_BIN" container rm "$EXPOSED_NAME"
|
||||
return $?
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
echo "${PORTS[@]}" >"$PORT_FILE"
|
||||
if is_container_status "$EXPOSED_NAME" "Running"; then
|
||||
return
|
||||
fi
|
||||
|
||||
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
|
||||
suppress_output "$DOCKER_BIN" container start "$EXPOSED_NAME"
|
||||
return $?
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2207
|
||||
PORTS=($(cat "$PORT_FILE"))
|
||||
# shellcheck disable=SC2046
|
||||
"$DOCKER_BIN" container run -d --link "$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX" --name "$EXPOSED_NAME" $(docker_ports_options "${PORTS[@]}") --restart always --label dokku=ambassador --label "dokku.ambassador=$PLUGIN_COMMAND_PREFIX" "$PLUGIN_AMBASSADOR_IMAGE" >/dev/null
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE exposed on port(s) [container->host]: $(service_exposed_ports "$SERVICE")"
|
||||
fi
|
||||
}
|
||||
|
||||
service_promote() {
|
||||
@@ -940,13 +939,15 @@ service_pause() {
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$") || true
|
||||
[[ -z $ID ]] && dokku_log_warn "Service is already paused" && return 0
|
||||
|
||||
if [[ -n $ID ]]; then
|
||||
dokku_log_info2_quiet "Pausing container"
|
||||
"$DOCKER_BIN" container stop "$SERVICE_NAME" >/dev/null
|
||||
service_port_pause "$SERVICE"
|
||||
if "$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1; then
|
||||
"$DOCKER_BIN" container stop "$SERVICE_NAME.ambassador" >/dev/null 2>&1 || true
|
||||
fi
|
||||
dokku_log_verbose_quiet "Container paused"
|
||||
else
|
||||
dokku_log_verbose_quiet "No container exists for $SERVICE"
|
||||
|
||||
@@ -136,6 +136,8 @@ service_create_container() {
|
||||
done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network" | tr "," "\n")
|
||||
fi
|
||||
suppress_output "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")"
|
||||
service_port_reconcile_status "$SERVICE"
|
||||
|
||||
if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then
|
||||
dokku_log_verbose_quiet "Connecting to networks after container start"
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
@@ -190,7 +192,7 @@ service_start() {
|
||||
local QUIET="$2"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=running" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=running" --filter "name=^/$SERVICE_NAME$") || true
|
||||
if [[ -n $ID ]]; then
|
||||
[[ -z $QUIET ]] && dokku_log_warn "Service is already started"
|
||||
if [[ ! -f "$SERVICE_ROOT/ID" ]] || [[ "$(cat "$SERVICE_ROOT/ID")" != "$ID" ]]; then
|
||||
@@ -201,13 +203,13 @@ service_start() {
|
||||
fi
|
||||
|
||||
dokku_log_info2_quiet "Starting container"
|
||||
local PREVIOUS_ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
local PREVIOUS_ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$") || true
|
||||
local ROOTPASSWORD="$(service_root_password "$SERVICE")"
|
||||
local PASSWORD="$(service_password "$SERVICE")"
|
||||
|
||||
if [[ -n $PREVIOUS_ID ]]; then
|
||||
"$DOCKER_BIN" container start "$PREVIOUS_ID" >/dev/null
|
||||
service_port_unpause "$SERVICE"
|
||||
service_port_reconcile_status "$SERVICE"
|
||||
dokku_log_info2 "Container started"
|
||||
elif service_image_exists "$SERVICE" && [[ -n "$ROOTPASSWORD" ]] && [[ -n "$PASSWORD" ]]; then
|
||||
service_create_container "$SERVICE"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku mongo service plugin"
|
||||
version = "1.31.0"
|
||||
version = "1.36.0"
|
||||
[plugin.config]
|
||||
|
||||
@@ -2,29 +2,65 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" ls
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" ls
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_failure
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" not_existing_service
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_failure
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when already exposed" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_failure
|
||||
assert_contains "${lines[*]}" "Service ls already exposed on port(s)"
|
||||
|
||||
run sudo rm "$PLUGIN_DATA_ROOT/ls/PORT"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_contains "${lines[*]}" "Service ls has an untracked expose container, removing"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
[[ "${lines[*]}" =~ exposed\ on\ port\(s\)\ \[container\-\>host\]\:\ [[:digit:]]+ ]]
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l 4242 4243 4244 4245
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls 4242 4243 4244 4245
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_contains "${lines[*]}" "exposed on port(s) [container->host]: 27017->4242 27018->4243 27019->4244 28017->4245"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user