Compare commits

...

8 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
674d10ea4d Release 1.24.0 2022-07-25 01:31:15 -04:00
Jose Diaz-Gonzalez
4e3a77ab0e 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
4ea17b07dc Release 1.23.0 2022-07-25 01:17:26 -04:00
Jose Diaz-Gonzalez
d5a4cddc3f chore: run shfmt 2022-07-25 01:15:32 -04:00
Jose Diaz-Gonzalez
2909ba7a9b Merge pull request #256 from dokku/filter-services
fix: refactor how services are filtered
2022-07-25 01:12:09 -04:00
Jose Diaz-Gonzalez
307f5d7378 fix: update clone test 2022-07-25 00:37:04 -04:00
Jose Diaz-Gonzalez
9cf8a5880f 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
63eb33d99c fix: move warning below service name verification 2022-07-19 01:34:21 -04:00
15 changed files with 54 additions and 32 deletions

View File

@@ -18,7 +18,7 @@ main() {
# built in the Dockerfile
PLUGIN_NAME="$(source /tmp/.env && echo "$PLUGIN_NAME")"
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 "$@"

View File

@@ -48,17 +48,27 @@ auth_service_filter() {
export SSH_USER=${SSH_USER:=$USER}
export SSH_NAME=${NAME:="default"}
# 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() {
declare desc="prints a filtered list of all local apps"
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
for service in "${detected_services[@]}"; do
for service in "${services[@]}"; do
if [[ -n "$service" ]]; then
echo "$service"
fi
@@ -66,8 +76,7 @@ fn-services-list() {
return
fi
filtered_services="$(auth_service_filter "${detected_services[@]}" 2>/dev/null)"
for service in "$filtered_services"; do
for service in $(auth_service_filter "${services[@]}" 2>/dev/null); do
if [[ -n "$service" ]]; then
echo "$service"
fi
@@ -94,7 +103,7 @@ get_database_name() {
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
if [[ ! -f "$SERVICE_ROOT/DATABASE_NAME" ]]; then
echo "$SERVICE" > "$SERVICE_ROOT/DATABASE_NAME"
echo "$SERVICE" >"$SERVICE_ROOT/DATABASE_NAME"
fi
cat "$SERVICE_ROOT/DATABASE_NAME"
@@ -237,8 +246,7 @@ service_app_links() {
declare APP="$1"
local LINKED_APP SERVICE SERVICE_ROOT
pushd "$PLUGIN_DATA_ROOT" >/dev/null
for SERVICE in $(fn-services-list); do
for SERVICE in $(fn-services-list true); do
[[ -n "$SERVICE" ]] || continue
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
@@ -309,7 +317,6 @@ service_commit_config() {
local CONFIG_VARIABLE="${PLUGIN_VARIABLE}_CONFIG_OPTIONS"
local ENV_VARIABLE="${PLUGIN_VARIABLE}_CUSTOM_ENV"
custom_env="${!ENV_VARIABLE}"
[[ -n "$SERVICE_CUSTOM_ENV" ]] && custom_env="$SERVICE_CUSTOM_ENV"
if [[ -n $custom_env ]]; then
@@ -637,7 +644,7 @@ service_links() {
service_list() {
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
dokku_log_warn "There are no $PLUGIN_SERVICE services"
return
@@ -645,7 +652,7 @@ service_list() {
dokku_log_info2_quiet "$PLUGIN_SERVICE services"
for service in "${services[@]}"; do
echo "$service"
echo "${service}"
done
}
@@ -981,5 +988,5 @@ write_database_name() {
# some datastores do not like special characters in database names
# so we need to normalize them out
echo "$SERVICE" | tr .- _ > "$SERVICE_ROOT/DATABASE_NAME"
echo "$SERVICE" | tr .- _ >"$SERVICE_ROOT/DATABASE_NAME"
}

View File

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

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku postgres service plugin"
version = "1.22.0"
version = "1.24.0"
[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

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

View File

@@ -13,7 +13,7 @@ teardown() {
}
@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
[[ -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" {
dokku "$PLUGIN_COMMAND_PREFIX:create" 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
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service

View File

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

View File

@@ -34,7 +34,7 @@ teardown() {
@test "($PLUGIN_COMMAND_PREFIX:import) success" {
skip "The fake dump is hard to work with in tests"
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "/tmp/fake.dump"
run dokku "$PLUGIN_COMMAND_PREFIX:import" l <"/tmp/fake.dump"
echo "output: $output"
echo "status: $status"
assert_success

View File

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

View File

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

View File

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

View File

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

View File

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