Implement export, import and clone commands
This commit is contained in:
15
README.md
15
README.md
@@ -20,13 +20,13 @@ dokku plugins-install
|
||||
|
||||
```
|
||||
mongo:alias <name> <alias> Set an alias for the docker link
|
||||
mongo:clone <name> <new-name> NOT IMPLEMENTED
|
||||
mongo:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name>
|
||||
mongo:connect <name> Connect via telnet to a mongo service
|
||||
mongo:create <name> Create a mongo service
|
||||
mongo:destroy <name> Delete the service and stop its container if there are no links left
|
||||
mongo:export <name> NOT IMPLEMENTED
|
||||
mongo:export <name> Export a dump of the $PLUGIN_SERVICE service database
|
||||
mongo:expose <name> [port] Expose a mongo service on custom port if provided (random port otherwise)
|
||||
mongo:import <name> <file> NOT IMPLEMENTED
|
||||
mongo:import <name> <file> Import a dump into the $PLUGIN_SERVICE service database
|
||||
mongo:info <name> Print the connection information
|
||||
mongo:link <name> <app> Link the mongo service to the app
|
||||
mongo:list List all mongo services
|
||||
@@ -85,6 +85,15 @@ dokku mongo:unlink lolipop playground
|
||||
dokku mongo:logs lolipop
|
||||
dokku mongo:logs lolipop -t # to tail
|
||||
|
||||
# you can dump the database
|
||||
dokku mongo:export lolipop > lolipop.dump.tar
|
||||
|
||||
# you can import a dump
|
||||
dokku mongo:import lolipop < database.dump.tar
|
||||
|
||||
# you can clone an existing database to a new one
|
||||
dokku mongo:clone lolipop new_database
|
||||
|
||||
# finally, you can destroy the container
|
||||
dokku mongo:destroy lolipop
|
||||
```
|
||||
|
||||
25
commands
25
commands
@@ -102,16 +102,21 @@ case "$1" in
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$2"
|
||||
SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
|
||||
dokku_log_fail "Not yet implemented"
|
||||
docker exec "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && mongodump -d $SERVICE -o=\"\$DIR\" && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\""
|
||||
;;
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:import)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$2"
|
||||
SERVICE="$2"
|
||||
SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
|
||||
dokku_log_fail "Not yet implemented"
|
||||
if [[ -t 0 ]]; then
|
||||
dokku_log_fail "No data provided on stdin."
|
||||
fi
|
||||
docker exec -i "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d $SERVICE \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\""
|
||||
;;
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:logs)
|
||||
@@ -161,10 +166,14 @@ case "$1" in
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:clone)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z $3 ]] && dokku_log_fail "Please specify a name for the new service"
|
||||
verify_service_name "$2"
|
||||
SERVICE="$2"
|
||||
|
||||
dokku_log_fail "Not yet implemented"
|
||||
NEW_SERVICE="$3"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" "$NEW_SERVICE"
|
||||
dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:export" "$SERVICE" | dokku "$PLUGIN_COMMAND_PREFIX:import" "$NEW_SERVICE" > /dev/null 2>&1 || true
|
||||
dokku_log_info1 "Done"
|
||||
;;
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:expose)
|
||||
@@ -186,14 +195,14 @@ case "$1" in
|
||||
$PLUGIN_COMMAND_PREFIX:destroy <name>, Delete the $PLUGIN_SERVICE service and stop its container if there are no links left
|
||||
$PLUGIN_COMMAND_PREFIX:link <name> <app>, Link the $PLUGIN_SERVICE service to the app
|
||||
$PLUGIN_COMMAND_PREFIX:unlink <name> <app>, Unlink the $PLUGIN_SERVICE service from the app
|
||||
$PLUGIN_COMMAND_PREFIX:export <name>, NOT IMPLEMENTED
|
||||
$PLUGIN_COMMAND_PREFIX:import <name> <file>, NOT IMPLEMENTED
|
||||
$PLUGIN_COMMAND_PREFIX:export <name>, Export a dump of the $PLUGIN_SERVICE service database
|
||||
$PLUGIN_COMMAND_PREFIX:import <name> < <file>, Import a dump into the $PLUGIN_SERVICE service database
|
||||
$PLUGIN_COMMAND_PREFIX:connect <name>, Connect via telnet to a $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:logs <name> [-t], Print the most recent log(s) for this service
|
||||
$PLUGIN_COMMAND_PREFIX:restart <name>, Graceful shutdown and restart of the $PLUGIN_SERVICE service container
|
||||
$PLUGIN_COMMAND_PREFIX:info <name>, Print the connection information
|
||||
$PLUGIN_COMMAND_PREFIX:list, List all $PLUGIN_SERVICE services
|
||||
$PLUGIN_COMMAND_PREFIX:clone <name> <new-name>, NOT IMPLEMENTED
|
||||
$PLUGIN_COMMAND_PREFIX:clone <name> <new-name>, Create container <new-name> then copy data from <name> into <new-name>
|
||||
$PLUGIN_COMMAND_PREFIX:expose <name> [port], Expose a $PLUGIN_SERVICE service on custom port if provided (random port otherwise)
|
||||
$PLUGIN_COMMAND_PREFIX:unexpose <name>, Unexpose a previously exposed $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:start <name>, Start a previously stopped $PLUGIN_SERVICE service
|
||||
|
||||
42
tests/service_clone.bats
Executable file
42
tests/service_clone.bats
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" not_existing_service new_service
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when new service isn't provided" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" l
|
||||
assert_contains "${lines[*]}" "Please specify a name for the new service"
|
||||
}
|
||||
|
||||
@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"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" l new_service
|
||||
[[ -f $PLUGIN_DATA_ROOT/new_service/ID ]]
|
||||
assert_contains "${lines[*]}" "Copying data from l to new_service"
|
||||
assert_contains "${lines[*]}" "Done"
|
||||
}
|
||||
|
||||
29
tests/service_export.bats
Executable file
29
tests/service_export.bats
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" not_existing_service
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" l
|
||||
assert_output "docker exec dokku.mongo.l bash -c DIR=\$(mktemp -d) && mongodump -d l -o=\"\$DIR\" && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\""
|
||||
}
|
||||
|
||||
36
tests/service_import.bats
Executable file
36
tests/service_import.bats
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
echo "data" > "$PLUGIN_DATA_ROOT/fake.dump.tar"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -f "$PLUGIN_DATA_ROOT/fake.dump.tar"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" not_existing_service
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when data is not provided" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l
|
||||
assert_contains "${lines[*]}" "No data provided on stdin"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.dump.tar"
|
||||
assert_output "docker exec -i dokku.mongo.l bash -c DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d l \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user