Compare commits
105 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d49483472 | ||
|
|
7faec70ef2 | ||
|
|
aa3d21b4ae | ||
|
|
67dd094d58 | ||
|
|
b414ca165a | ||
|
|
028d82517f | ||
|
|
8852c3fc03 | ||
|
|
095be6dbaf | ||
|
|
a9fcde1404 | ||
|
|
b3efd6ef80 | ||
|
|
2e0a9b6c6e | ||
|
|
4b6ca068e7 | ||
|
|
7a3e380c24 | ||
|
|
b56616cdc7 | ||
|
|
6c2e96b37e | ||
|
|
d668c50abb | ||
|
|
c4c9f88c94 | ||
|
|
a5c60c2b07 | ||
|
|
589d28730f | ||
|
|
be5d09776a | ||
|
|
c105f97ed5 | ||
|
|
dc72b8ac33 | ||
|
|
33fbe15fc6 | ||
|
|
181a1a18fa | ||
|
|
b74cb9cc9f | ||
|
|
5a541fc340 | ||
|
|
9eb26d8601 | ||
|
|
0e64cfbe75 | ||
|
|
1e878536f5 | ||
|
|
0d0ff5f5ee | ||
|
|
118e43a792 | ||
|
|
db9ff186a2 | ||
|
|
6dedbfba45 | ||
|
|
623d125e83 | ||
|
|
9fa9b4a975 | ||
|
|
1edb82305b | ||
|
|
077f7e47f1 | ||
|
|
371c35667b | ||
|
|
e394039652 | ||
|
|
ec4e5b4a43 | ||
|
|
233a261a3f | ||
|
|
fe3d4d6329 | ||
|
|
195a96de65 | ||
|
|
52f95594c0 | ||
|
|
0f9e567ead | ||
|
|
c94658ea09 | ||
|
|
6ed6db2b3f | ||
|
|
354309feec | ||
|
|
26a1948e50 | ||
|
|
28a8a0f84e | ||
|
|
11435f7452 | ||
|
|
f2a802819f | ||
|
|
1465f6f3ca | ||
|
|
c276507d3b | ||
|
|
98edfb9bb2 | ||
|
|
c32f4e92a1 | ||
|
|
1542a9556f | ||
|
|
4948e2b91d | ||
|
|
621e018999 | ||
|
|
3641c2dc76 | ||
|
|
86a032a32f | ||
|
|
b68ae2d0bd | ||
|
|
30b033ee9d | ||
|
|
9fac5a4ad4 | ||
|
|
73a8ccc085 | ||
|
|
c05aa74a3e | ||
|
|
d112144293 | ||
|
|
30de0727ab | ||
|
|
8823baf480 | ||
|
|
d470ade7a7 | ||
|
|
66e8279dca | ||
|
|
969a9cdcb0 | ||
|
|
5620147f89 | ||
|
|
dda9ed6d55 | ||
|
|
76e0d5fd87 | ||
|
|
7382058ecb | ||
|
|
0a8d599965 | ||
|
|
21cc07bd48 | ||
|
|
902545bdb4 | ||
|
|
ea3cd5ef30 | ||
|
|
9010e1551f | ||
|
|
c05c47187a | ||
|
|
9ee6c3c5cf | ||
|
|
a391fa88dc | ||
|
|
59d285f2f1 | ||
|
|
e6810fa7e0 | ||
|
|
3eaa1dc5cd | ||
|
|
6de1077806 | ||
|
|
3020346caa | ||
|
|
57554f6288 | ||
|
|
eb8ea7d8a6 | ||
|
|
b94af2bf3a | ||
|
|
d143bb48b0 | ||
|
|
e78cc9bd36 | ||
|
|
f30db928fb | ||
|
|
b15dcbf1c4 | ||
|
|
0cb8bd5f9a | ||
|
|
603a0c6e80 | ||
|
|
ad62febd59 | ||
|
|
7b5ed48a5f | ||
|
|
527b3bc54b | ||
|
|
a66c040cbc | ||
|
|
a2b1fbb737 | ||
|
|
d28412ee32 | ||
|
|
8bb81a3084 |
57
.github/labels.yml
vendored
Normal file
57
.github/labels.yml
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
labels:
|
||||
- name: bc-break
|
||||
color: eb6420
|
||||
- name: blocks release
|
||||
color: "000000"
|
||||
- name: 'difficulty: easy'
|
||||
color: c5def5
|
||||
- name: 'difficulty: hard'
|
||||
color: e99695
|
||||
- name: 'difficulty: medium'
|
||||
color: fef2c0
|
||||
- name: hacktoberfest
|
||||
color: b0581d
|
||||
- name: 'needs: documentation'
|
||||
color: c2e0c6
|
||||
- name: 'needs: more info'
|
||||
color: c2e0c6
|
||||
- name: 'needs: rebase'
|
||||
color: c2e0c6
|
||||
- name: 'needs: tests'
|
||||
color: c2e0c6
|
||||
- name: 'status: duplicate'
|
||||
color: cccccc
|
||||
- name: 'status: fix-provided'
|
||||
color: c5def5
|
||||
- name: 'status: future'
|
||||
color: c5def5
|
||||
- name: 'status: has plan'
|
||||
color: c5def5
|
||||
- name: 'status: invalid'
|
||||
color: cccccc
|
||||
- name: 'status: merge for next minor'
|
||||
color: c5def5
|
||||
- name: 'status: merge for next patch'
|
||||
color: c5def5
|
||||
- name: 'status: wontfix'
|
||||
color: cccccc
|
||||
- name: 'type: bug'
|
||||
color: e01b1b
|
||||
- name: 'type: documentation'
|
||||
color: 0052cc
|
||||
- name: 'type: enhancement'
|
||||
color: 09ab3c
|
||||
- name: 'type: question'
|
||||
color: cc317c
|
||||
- name: 'type: refactor'
|
||||
color: 0052cc
|
||||
- name: 'type: rfc'
|
||||
color: 0052cc
|
||||
- name: 'type: roadmap'
|
||||
color: 0052cc
|
||||
- name: 'type: service'
|
||||
color: "5319e7"
|
||||
- name: 'type: support'
|
||||
color: cc317c
|
||||
- name: 'type: tests'
|
||||
color: 0052cc
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,5 +1,2 @@
|
||||
tests/dokku
|
||||
tests/fixtures
|
||||
tests/bin/plugn
|
||||
tests/bin/readlink
|
||||
/tmp
|
||||
.vagrant
|
||||
|
||||
11
.travis.yml
11
.travis.yml
@@ -1,10 +1,9 @@
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: bash
|
||||
env:
|
||||
- DOKKU_VERSION=master DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.7.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.6.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.5.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.4.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=master
|
||||
- DOKKU_VERSION=v0.14.0
|
||||
- DOKKU_VERSION=v0.12.0
|
||||
install: make setup
|
||||
script: make test
|
||||
after_failure: make report
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (C) 2015 Jose Diaz-Gonzalez
|
||||
Copyright (C) 2018 Jose Diaz-Gonzalez
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
||||
68
Makefile
68
Makefile
@@ -1,22 +1,36 @@
|
||||
HARDWARE = $(shell uname -m)
|
||||
SYSTEM_NAME = $(shell uname -s | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
bats:
|
||||
ifeq ($(SYSTEM_NAME),darwin)
|
||||
ifneq ($(shell bats --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
brew install bats-core
|
||||
endif
|
||||
else
|
||||
git clone https://github.com/josegonzalez/bats-core.git /tmp/bats
|
||||
cd /tmp/bats && sudo ./install.sh /usr/local
|
||||
rm -rf /tmp/bats
|
||||
endif
|
||||
|
||||
shellcheck:
|
||||
ifeq ($(shell shellcheck > /dev/null 2>&1 ; echo $$?),127)
|
||||
ifeq ($(shell uname),Darwin)
|
||||
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 rm -rf /var/lib/apt/lists/* && sudo apt-get clean
|
||||
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
|
||||
endif
|
||||
endif
|
||||
|
||||
bats:
|
||||
ifeq ($(shell bats > /dev/null 2>&1 ; echo $$?),127)
|
||||
ifeq ($(shell uname),Darwin)
|
||||
git clone https://github.com/sstephenson/bats.git /tmp/bats
|
||||
cd /tmp/bats && sudo ./install.sh /usr/local
|
||||
rm -rf /tmp/bats
|
||||
shfmt:
|
||||
ifneq ($(shell shfmt --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(shfmt),Darwin)
|
||||
brew install shfmt
|
||||
else
|
||||
sudo add-apt-repository ppa:duggan/bats --yes
|
||||
sudo apt-get update -qq && sudo apt-get install -qq -y bats
|
||||
wget -qO /tmp/shfmt https://github.com/mvdan/sh/releases/download/v2.6.2/shfmt_v2.6.2_linux_amd64
|
||||
chmod +x /tmp/shfmt
|
||||
sudo mv /tmp/shfmt /usr/local/bin/shfmt
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -30,20 +44,40 @@ endif
|
||||
|
||||
ci-dependencies: shellcheck bats readlink
|
||||
|
||||
lint:
|
||||
lint-setup:
|
||||
@mkdir -p tmp/test-results/shellcheck tmp/shellcheck
|
||||
@find . -not -path '*/\.*' -type f | xargs file | grep text | awk -F ':' '{ print $$1 }' | xargs head -n1 | egrep -B1 "bash" | grep "==>" | awk '{ print $$2 }' > tmp/shellcheck/test-files
|
||||
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p' | cut -d' ' -f2 | paste -d, -s - > tmp/shellcheck/exclude
|
||||
|
||||
lint: lint-setup
|
||||
# these are disabled due to their expansive existence in the codebase. we should clean it up though
|
||||
# SC1090: Can't follow non-constant source. Use a directive to specify location.
|
||||
# SC2034: Variable appears unused. Verify it or export it.
|
||||
# SC2155: Declare and assign separately to avoid masking return values.
|
||||
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p'
|
||||
@echo linting...
|
||||
@$(QUIET) find ./ -maxdepth 1 -not -path '*/\.*' | xargs file | egrep "shell|bash" | awk '{ print $$1 }' | sed 's/://g' | xargs shellcheck -e SC1090,SC2034,SC2155
|
||||
@cat tmp/shellcheck/test-files | xargs shellcheck -e $(shell cat tmp/shellcheck/exclude) | tests/shellcheck-to-junit --output tmp/test-results/shellcheck/results.xml --files tmp/shellcheck/test-files --exclude $(shell cat tmp/shellcheck/exclude)
|
||||
|
||||
unit-tests:
|
||||
@echo running unit tests...
|
||||
@$(QUIET) bats tests
|
||||
@mkdir -p tmp/test-results/bats
|
||||
@cd tests && echo "executing tests: $(shell cd tests ; ls *.bats | xargs)"
|
||||
cd tests && bats --formatter bats-format-junit -e -T -o ../tmp/test-results/bats *.bats
|
||||
|
||||
tmp/xunit-to-github:
|
||||
mkdir -p tmp
|
||||
curl -o tmp/xunit-to-github.tgz -sL https://github.com/josegonzalez/go-xunit-to-github/releases/download/v0.3.0/xunit-to-github_0.3.0_$(SYSTEM_NAME)_$(HARDWARE).tgz
|
||||
tar xf tmp/xunit-to-github.tgz -C tmp
|
||||
chmod +x tmp/xunit-to-github
|
||||
|
||||
setup:
|
||||
bash tests/setup.sh
|
||||
$(MAKE) ci-dependencies
|
||||
|
||||
test: setup lint unit-tests
|
||||
test: lint unit-tests
|
||||
|
||||
report: tmp/xunit-to-github
|
||||
ifdef TRAVIS_REPO_SLUG
|
||||
ifdef GITHUB_ACCESS_TOKEN
|
||||
ifneq ($(TRAVIS_PULL_REQUEST),false)
|
||||
tmp/xunit-to-github --skip-ok --job-url "$(TRAVIS_JOB_WEB_URL)" --pull-request-id "$(TRAVIS_PULL_REQUEST)" --repository-slug "$(TRAVIS_REPO_SLUG)" --title "DOKKU_VERSION=$(DOKKU_VERSION)" tmp/test-results/bats tmp/test-results/shellcheck
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
24
README.md
24
README.md
@@ -1,28 +1,29 @@
|
||||
# dokku postgres [](https://travis-ci.org/dokku/dokku-postgres) [](https://webchat.freenode.net/?channels=dokku)
|
||||
|
||||
Official postgres plugin for dokku. Currently defaults to installing [postgres 10.2](https://hub.docker.com/_/postgres/).
|
||||
Official postgres plugin for dokku. Currently defaults to installing [postgres 11.2](https://hub.docker.com/_/postgres/).
|
||||
|
||||
## requirements
|
||||
|
||||
- dokku 0.4.x+
|
||||
- dokku 0.12.x+
|
||||
- docker 1.8.x
|
||||
|
||||
## installation
|
||||
|
||||
```shell
|
||||
# on 0.4.x+
|
||||
# on 0.12.x+
|
||||
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
|
||||
```
|
||||
|
||||
## commands
|
||||
|
||||
```
|
||||
postgres:app-links <app> List all postgres service links for a given app
|
||||
postgres:backup <name> <bucket> (--use-iam) Create a backup of the postgres service to an existing s3 bucket
|
||||
postgres:backup-auth <name> <aws_access_key_id> <aws_secret_access_key> (<aws_default_region>) (<aws_signature_version>) (<endpoint_url>) Sets up authentication for backups on the postgres service
|
||||
postgres:backup-deauth <name> Removes backup authentication for the postgres service
|
||||
postgres:backup-schedule <name> <schedule> <bucket> Schedules a backup of the postgres service
|
||||
postgres:backup-schedule-cat <name> Show the backup schedule for the service
|
||||
postgres:backup-set-encryption <name> <encryption_key> Sets up GPG encryption for future backups of the postgres service
|
||||
postgres:backup-set-encryption <name> <passphrase> Set a GPG passphrase for backups
|
||||
postgres:backup-unschedule <name> Unschedules the backup of the postgres service
|
||||
postgres:backup-unset-encryption <name> Removes backup encryption for future backups of the postgres service
|
||||
postgres:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name>
|
||||
@@ -45,6 +46,7 @@ postgres:start <name> Start a previously stopped postgres service
|
||||
postgres:stop <name> Stop a running postgres service
|
||||
postgres:unexpose <name> Unexpose a previously exposed postgres service
|
||||
postgres:unlink <name> <app> Unlink the postgres service from the app
|
||||
postgres:upgrade <name> Upgrade service <service> to the specified version
|
||||
```
|
||||
|
||||
## usage
|
||||
@@ -58,7 +60,7 @@ dokku postgres:create lolipop
|
||||
# it *must* be compatible with the
|
||||
# official postgres image
|
||||
export POSTGRES_IMAGE="postgres"
|
||||
export POSTGRES_IMAGE_VERSION="10.2"
|
||||
export POSTGRES_IMAGE_VERSION="11.2"
|
||||
dokku postgres:create lolipop
|
||||
|
||||
# you can also specify custom environment
|
||||
@@ -183,7 +185,7 @@ OR
|
||||
|
||||
## upgrade/downgrade
|
||||
|
||||
At the moment a database can’t be upgraded (or downgraded) inplace. Instead a clone has to be made, like this:
|
||||
At the moment a database can’t be upgraded (or downgraded) inplace. Instead a clone has to be made, like this:
|
||||
|
||||
```shell
|
||||
# Our original DB using PG 9.5
|
||||
@@ -206,7 +208,7 @@ $ dokku postgres:destroy db9.5
|
||||
If you wish to tune the postgres instances various .conf files, you can find them by using the postgres:info command.
|
||||
|
||||
```shell
|
||||
dokku postgres:info lolipop
|
||||
dokku postgres:info lolipop
|
||||
# or
|
||||
dokku postgres:info lolipop --data-dir
|
||||
```
|
||||
@@ -243,14 +245,14 @@ dokku postgres:backup-unschedule lolipop
|
||||
```
|
||||
|
||||
Backup auth can also be set up for different regions, signature versions and endpoints (e.g. for minio):
|
||||
|
||||
|
||||
```
|
||||
# setup s3 backup authentication with different region
|
||||
dokku postgres:backup-auth lolipop AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION
|
||||
|
||||
|
||||
# setup s3 backup authentication with different signature version and endpoint
|
||||
dokku postgres:backup-auth lolipop AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION AWS_SIGNATURE_VERSION ENDPOINT_URL
|
||||
|
||||
|
||||
# more specific example for minio auth
|
||||
dokku postgres:backup-auth lolipop MINIO_ACCESS_KEY_ID MINIO_SECRET_ACCESS_KEY us-east-1 s3v4 https://YOURMINIOSERVICE
|
||||
```
|
||||
@@ -266,7 +268,7 @@ dokku postgres:connect db < ./dump.sql
|
||||
## Security
|
||||
|
||||
The connection to the database is done over SSL. A self-signed certificate is
|
||||
automatically generated when creating the service. It can be replaced by a
|
||||
automatically generated when creating the service. It can be replaced by a
|
||||
custom certificate by overwriting the `server.crt` and `server.key` files in
|
||||
`/var/lib/dokku/services/postgres/<DB_NAME>/data`.
|
||||
The `server.key` must be chmoded to 600 and must be owned by the postgres user
|
||||
|
||||
9
Vagrantfile
vendored
9
Vagrantfile
vendored
@@ -1,8 +1,8 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-14.04"
|
||||
BOX_MEMORY = ENV["BOX_MEMORY"] || "512"
|
||||
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-18.04"
|
||||
BOX_MEMORY = ENV["BOX_MEMORY"] || "2048"
|
||||
DOKKU_VERSION = "master"
|
||||
|
||||
Vagrant.configure(2) do |config|
|
||||
@@ -10,9 +10,6 @@ Vagrant.configure(2) do |config|
|
||||
config.ssh.forward_agent = true
|
||||
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
# Ubuntu's Raring 64-bit cloud image is set to a 32-bit Ubuntu OS type by
|
||||
# default in Virtualbox and thus will not boot. Manually override that.
|
||||
vb.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
|
||||
vb.customize ["modifyvm", :id, "--memory", BOX_MEMORY]
|
||||
end
|
||||
|
||||
@@ -23,7 +20,7 @@ Vagrant.configure(2) do |config|
|
||||
config.vm.define "default", primary: true do |vm|
|
||||
vm.vm.synced_folder File.dirname(__FILE__), "/vagrant"
|
||||
|
||||
vm.vm.provision :shell, :inline => "apt-get update > /dev/null && apt-get install -y -qq git software-properties-common"
|
||||
vm.vm.provision :shell, :inline => "apt -q update && apt -y -qq install git software-properties-common"
|
||||
vm.vm.provision :shell, :inline => "cd /vagrant && DOKKU_VERSION=#{DOKKU_VERSION} make setup"
|
||||
vm.vm.provision :shell, :inline => "cd /vagrant && DOKKU_TRACE=1 DOKKU_VERSION=#{DOKKU_VERSION} make test"
|
||||
end
|
||||
|
||||
3
commands
3
commands
@@ -2,7 +2,8 @@
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
[[ " help $PLUGIN_COMMAND_PREFIX:help $PLUGIN_COMMAND_PREFIX $PLUGIN_COMMAND_PREFIX:default " == *" $1 "* ]] || [[ "$1" == "$PLUGIN_COMMAND_PREFIX:"* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/help-functions"
|
||||
|
||||
|
||||
376
common-functions
376
common-functions
@@ -1,11 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
|
||||
docker_ports_options() {
|
||||
declare desc="Exports a list of exposed ports"
|
||||
declare PORTS=("$@")
|
||||
for (( i=0; i < ${#PLUGIN_DATASTORE_PORTS[@]}; i++ )); do
|
||||
for ((i = 0; i < ${#PLUGIN_DATASTORE_PORTS[@]}; i++)); do
|
||||
echo -n "-p ${PORTS[i]}:${PLUGIN_DATASTORE_PORTS[i]} "
|
||||
done
|
||||
}
|
||||
@@ -13,25 +14,29 @@ docker_ports_options() {
|
||||
get_container_ip() {
|
||||
declare desc="Retrieves the ip address of a container"
|
||||
declare CONTAINER_ID="$1"
|
||||
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$CONTAINER_ID"
|
||||
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$CONTAINER_ID" 2>/dev/null
|
||||
}
|
||||
|
||||
get_database_name() {
|
||||
declare desc="Retrieves a sanitized database name"
|
||||
declare DATABASE="$1"
|
||||
# some datastores do not like special characters in database names
|
||||
# so we need to normalize them out
|
||||
echo "$DATABASE" | tr .- _
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
|
||||
if [[ ! -f "$SERVICE_ROOT/DATABASE_NAME" ]]; then
|
||||
echo "$SERVICE" > "$SERVICE_ROOT/DATABASE_NAME"
|
||||
fi
|
||||
|
||||
cat "$SERVICE_ROOT/DATABASE_NAME"
|
||||
}
|
||||
|
||||
get_random_ports() {
|
||||
declare desc="Retrieves N random ports"
|
||||
declare iterations="${1:-1}"
|
||||
for (( i=0; i < iterations; i++ )); do
|
||||
for ((i = 0; i < iterations; i++)); do
|
||||
local port=$RANDOM
|
||||
local quit=0
|
||||
while [ "$quit" -ne 1 ]; do
|
||||
netstat -an | grep $port > /dev/null
|
||||
netstat -an | grep $port >/dev/null
|
||||
# shellcheck disable=SC2181
|
||||
if [ $? -gt 0 ]; then
|
||||
quit=1
|
||||
@@ -59,7 +64,7 @@ is_container_status() {
|
||||
declare desc="Returns 0 or 1 depending upon whether a given container has a certain status"
|
||||
declare CID="$1" STATUS="$2"
|
||||
local TEMPLATE="{{.State.$STATUS}}"
|
||||
local CONTAINER_STATUS=$(docker inspect -f "$TEMPLATE" "$CID" 2> /dev/null || true)
|
||||
local CONTAINER_STATUS=$(docker inspect -f "$TEMPLATE" "$CID" 2>/dev/null || true)
|
||||
|
||||
if [[ "$CONTAINER_STATUS" == "true" ]]; then
|
||||
return 0
|
||||
@@ -67,43 +72,102 @@ is_container_status() {
|
||||
return 1
|
||||
}
|
||||
|
||||
is_implemented_command() {
|
||||
declare desc="return true if value ($1) is in list (all other arguments)"
|
||||
declare CMD="$1"
|
||||
CMD="$(echo "$CMD" | cut -d ':' -f2)"
|
||||
|
||||
if [[ ${#PLUGIN_UNIMPLEMENTED_SUBCOMMANDS[@]} -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local e
|
||||
for e in "${PLUGIN_UNIMPLEMENTED_SUBCOMMANDS[@]}"; do
|
||||
[[ "$e" == "$CMD" ]] && return 1
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
is_valid_service_name() {
|
||||
declare desc="Validates a service name"
|
||||
declare SERVICE="$1"
|
||||
[[ -z "$SERVICE" ]] && return 1
|
||||
|
||||
if [[ "$SERVICE" =~ ^[A-Za-z0-9_-]+$ ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
remove_from_links_file() {
|
||||
declare desc="Removes an app from the service link file"
|
||||
declare SERVICE="$1" APP="$2"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
if [[ ! -f "$LINKS_FILE" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
sed -i.bak "/^$APP\$/d" "$LINKS_FILE" && rm "$LINKS_FILE.bak"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
}
|
||||
|
||||
service_alias() {
|
||||
declare desc="Retrieves the alias of a service"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
echo "$SERVICE_NAME" | tr ._ -
|
||||
retry-docker-command() {
|
||||
local ID="$1" COMMAND="$2"
|
||||
local i=0 success=false
|
||||
until [ $i -ge 100 ]; do
|
||||
set +e
|
||||
docker exec -it "$ID" sh -c "$COMMAND" 2>/dev/null
|
||||
exit_code=$?
|
||||
set -e
|
||||
if [[ "$exit_code" == 0 ]]; then
|
||||
success=true
|
||||
break
|
||||
fi
|
||||
i=$((i + 1))
|
||||
sleep 1
|
||||
done
|
||||
if [[ $i -gt 0 ]]; then
|
||||
dokku_log_verbose "Container command retried ${i} time(s): ${COMMAND}"
|
||||
fi
|
||||
[[ "$success" == "true" ]] || dokku_log_fail "Failed to run command: ${COMMAND}"
|
||||
}
|
||||
|
||||
service_alternative_alias() {
|
||||
declare desc="Retrieves an alternative alias for a service"
|
||||
declare EXISTING_CONFIG="$1"
|
||||
local COLORS=(AQUA BLACK BLUE FUCHSIA GRAY GREEN LIME MAROON NAVY OLIVE PURPLE RED SILVER TEAL WHITE YELLOW)
|
||||
local ALIAS;
|
||||
local ALIAS
|
||||
|
||||
while [[ -z $ALIAS ]]; do
|
||||
local IDX=$((RANDOM % ${#COLORS[*]}))
|
||||
local COLOR=${COLORS[IDX]}
|
||||
for COLOR in "${COLORS[@]}"; do
|
||||
ALIAS="${PLUGIN_ALT_ALIAS}_${COLOR}"
|
||||
local IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL")
|
||||
if [[ -n $IN_USE ]]; then
|
||||
unset ALIAS
|
||||
if [[ -z "$IN_USE" ]]; then
|
||||
break
|
||||
fi
|
||||
unset ALIAS
|
||||
done
|
||||
echo "$ALIAS"
|
||||
}
|
||||
|
||||
service_app_links() {
|
||||
declare desc="Outputs all service links for a given app"
|
||||
declare APP="$1"
|
||||
local SERVICE LINKED_APP
|
||||
|
||||
pushd "$PLUGIN_DATA_ROOT" >/dev/null
|
||||
for SERVICE in *; do
|
||||
[[ -f "$SERVICE/LINKS" ]] || continue
|
||||
for LINKED_APP in $(<"$SERVICE/LINKS"); do
|
||||
if [[ "$LINKED_APP" == "$APP" ]]; then
|
||||
echo "$SERVICE"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
service_backup() {
|
||||
declare desc="Creates a backup of a service to an existing s3 bucket"
|
||||
declare SERVICE="$1" BUCKET_NAME="$2" USE_IAM_OPTIONAL_FLAG="$3"
|
||||
@@ -126,10 +190,10 @@ service_backup() {
|
||||
TMPDIR=$(mktemp -d)
|
||||
trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT
|
||||
|
||||
docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist"
|
||||
docker inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
|
||||
|
||||
(service_export "$SERVICE" > "${TMPDIR}/export")
|
||||
(service_export "$SERVICE" >"${TMPDIR}/export")
|
||||
|
||||
# Build parameter list for s3backup tool
|
||||
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e BUCKET_NAME=$BUCKET_NAME"
|
||||
@@ -153,7 +217,7 @@ service_backup() {
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
docker run $BACKUP_PARAMETERS dokkupaas/s3backup:0.8.0
|
||||
docker run --rm $BACKUP_PARAMETERS dokku/s3backup:0.9.4
|
||||
}
|
||||
|
||||
service_backup_auth() {
|
||||
@@ -161,20 +225,20 @@ service_backup_auth() {
|
||||
declare SERVICE="$1" AWS_ACCESS_KEY_ID="$2" AWS_SECRET_ACCESS_KEY="$3" AWS_DEFAULT_REGION="$4" AWS_SIGNATURE_VERSION="$5" ENDPOINT_URL="$6"
|
||||
local SERVICE_BACKUP_ROOT="$PLUGIN_DATA_ROOT/$SERVICE/backup"
|
||||
|
||||
mkdir -p "$SERVICE_BACKUP_ROOT"
|
||||
echo "$AWS_ACCESS_KEY_ID" > "$SERVICE_BACKUP_ROOT/AWS_ACCESS_KEY_ID"
|
||||
echo "$AWS_SECRET_ACCESS_KEY" > "$SERVICE_BACKUP_ROOT/AWS_SECRET_ACCESS_KEY"
|
||||
mkdir "$SERVICE_BACKUP_ROOT"
|
||||
echo "$AWS_ACCESS_KEY_ID" >"$SERVICE_BACKUP_ROOT/AWS_ACCESS_KEY_ID"
|
||||
echo "$AWS_SECRET_ACCESS_KEY" >"$SERVICE_BACKUP_ROOT/AWS_SECRET_ACCESS_KEY"
|
||||
|
||||
if [[ -n "$AWS_DEFAULT_REGION" ]]; then
|
||||
echo "$AWS_DEFAULT_REGION" > "$SERVICE_BACKUP_ROOT/AWS_DEFAULT_REGION"
|
||||
echo "$AWS_DEFAULT_REGION" >"$SERVICE_BACKUP_ROOT/AWS_DEFAULT_REGION"
|
||||
fi
|
||||
|
||||
if [[ -n "$AWS_SIGNATURE_VERSION" ]]; then
|
||||
echo "$AWS_SIGNATURE_VERSION" > "$SERVICE_BACKUP_ROOT/AWS_SIGNATURE_VERSION"
|
||||
echo "$AWS_SIGNATURE_VERSION" >"$SERVICE_BACKUP_ROOT/AWS_SIGNATURE_VERSION"
|
||||
fi
|
||||
|
||||
if [[ -n "$ENDPOINT_URL" ]]; then
|
||||
echo "$ENDPOINT_URL" > "$SERVICE_BACKUP_ROOT/ENDPOINT_URL"
|
||||
echo "$ENDPOINT_URL" >"$SERVICE_BACKUP_ROOT/ENDPOINT_URL"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -198,7 +262,7 @@ service_backup_schedule() {
|
||||
dokku_log_fail "Invalid flag provided, only '--use-iam' allowed"
|
||||
fi
|
||||
|
||||
echo "${SCHEDULE} dokku ${DOKKU_BIN} ${PLUGIN_COMMAND_PREFIX}:backup ${SERVICE} ${BUCKET_NAME} ${USE_IAM_OPTIONAL_FLAG}" > "$TMP_CRON_FILE"
|
||||
echo "${SCHEDULE} dokku ${DOKKU_BIN} ${PLUGIN_COMMAND_PREFIX}:backup ${SERVICE} ${BUCKET_NAME} ${USE_IAM_OPTIONAL_FLAG}" >"$TMP_CRON_FILE"
|
||||
sudo /bin/mv "$TMP_CRON_FILE" "$CRON_FILE"
|
||||
sudo /bin/chown root:root "$CRON_FILE"
|
||||
sudo /bin/chmod 644 "$CRON_FILE"
|
||||
@@ -216,22 +280,22 @@ service_backup_schedule_cat() {
|
||||
cat "$CRON_FILE"
|
||||
}
|
||||
|
||||
service_backup_unschedule() {
|
||||
declare desc="unschedules the backup of the service"
|
||||
declare SERVICE="$1"
|
||||
local CRON_FILE="/etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-${SERVICE}"
|
||||
|
||||
sudo /bin/rm -f "$CRON_FILE"
|
||||
}
|
||||
|
||||
service_backup_set_encryption() {
|
||||
declare desc="Sets up backup encryption"
|
||||
declare SERVICE="$1" ENCRYPTION_KEY="$2"
|
||||
local SERVICE_ROOT="${PLUGIN_DATA_ROOT}/${SERVICE}"
|
||||
local SERVICE_BACKUP_ENCRYPTION_ROOT="${SERVICE_ROOT}/backup-encryption/"
|
||||
|
||||
mkdir -p "$SERVICE_BACKUP_ENCRYPTION_ROOT"
|
||||
echo "$ENCRYPTION_KEY" > "${SERVICE_BACKUP_ENCRYPTION_ROOT}/ENCRYPTION_KEY"
|
||||
mkdir "$SERVICE_BACKUP_ENCRYPTION_ROOT"
|
||||
echo "$ENCRYPTION_KEY" >"${SERVICE_BACKUP_ENCRYPTION_ROOT}/ENCRYPTION_KEY"
|
||||
}
|
||||
|
||||
service_backup_unschedule() {
|
||||
declare desc="unschedules the backup of the service"
|
||||
declare SERVICE="$1"
|
||||
local CRON_FILE="/etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-${SERVICE}"
|
||||
|
||||
sudo /bin/rm -f "$CRON_FILE"
|
||||
}
|
||||
|
||||
service_backup_unset_encryption() {
|
||||
@@ -243,13 +307,40 @@ service_backup_unset_encryption() {
|
||||
rm -rf "$SERVICE_BACKUP_ENCRYPTION_ROOT"
|
||||
}
|
||||
|
||||
service_container_rm() {
|
||||
declare desc="Stops a service and removes the running container"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local ID
|
||||
|
||||
service_stop "$SERVICE"
|
||||
ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
# this may be 'true' in tests...
|
||||
if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
dokku_log_verbose_quiet "Removing container"
|
||||
docker update --restart=no "$SERVICE_NAME" >/dev/null 2>&1
|
||||
if ! docker rm "$SERVICE_NAME" >/dev/null 2>&1; then
|
||||
dokku_log_fail "Unable to remove container for service $SERVICE"
|
||||
fi
|
||||
}
|
||||
|
||||
service_dns_hostname() {
|
||||
declare desc="Retrieves the alias of a service"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
echo "$SERVICE_NAME" | tr ._ -
|
||||
}
|
||||
|
||||
service_enter() {
|
||||
declare desc="enters running app container of specified proc type"
|
||||
declare SERVICE="$1" && shift 1
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ID="$(cat "$SERVICE_ROOT/ID")"
|
||||
|
||||
docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist"
|
||||
docker inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
|
||||
|
||||
local EXEC_CMD=""
|
||||
@@ -265,11 +356,22 @@ service_exposed_ports() {
|
||||
local PORT_FILE="$SERVICE_ROOT/PORT"
|
||||
[[ ! -f $PORT_FILE ]] && echo '-' && return 0
|
||||
local PORTS=($(cat "$PORT_FILE"))
|
||||
for (( i=0; i < ${#PLUGIN_DATASTORE_PORTS[@]}; i++ )); do
|
||||
for ((i = 0; i < ${#PLUGIN_DATASTORE_PORTS[@]}; i++)); do
|
||||
echo -n "${PLUGIN_DATASTORE_PORTS[i]}->${PORTS[i]} "
|
||||
done
|
||||
}
|
||||
|
||||
service_image_exists() {
|
||||
declare desc="Checks if the current image exists"
|
||||
local IMAGE="$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
|
||||
if [[ "$(docker images -q "$IMAGE" 2>/dev/null)" == "" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
service_info() {
|
||||
declare desc="Retrieves information about a given service"
|
||||
declare SERVICE="$1" INFO_FLAG="$2"
|
||||
@@ -332,28 +434,36 @@ service_link() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local EXISTING_CONFIG=$(config_all "$APP")
|
||||
local LINK=$(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1) || true
|
||||
local DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true
|
||||
local SERVICE_ALIAS=$(service_alias "$SERVICE")
|
||||
local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
local ALIAS="$PLUGIN_DEFAULT_ALIAS"
|
||||
local DEFAULT_ALIAS
|
||||
|
||||
if [[ -n "$SERVICE_ALIAS" ]]; then
|
||||
ALIAS="$SERVICE_ALIAS"
|
||||
ALIAS_IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL") || true
|
||||
[[ -n "$ALIAS_IN_USE" ]] && dokku_log_fail "Specified alias $ALIAS already in use"
|
||||
else
|
||||
DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true
|
||||
if [[ -n "$DEFAULT_ALIAS" ]]; then
|
||||
ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
fi
|
||||
[[ -z "$ALIAS" ]] && dokku_log_fail "Unable to use default or generated URL alias"
|
||||
fi
|
||||
|
||||
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
echo "$APP" >> "$LINKS_FILE"
|
||||
echo "$APP" >>"$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
|
||||
local ALIAS="$PLUGIN_DEFAULT_ALIAS"
|
||||
if [[ -n $DEFAULT_ALIAS ]]; then
|
||||
ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
fi
|
||||
|
||||
if declare -f -F add_passed_docker_option > /dev/null; then
|
||||
if declare -f -F add_passed_docker_option >/dev/null; then
|
||||
# shellcheck disable=SC2034
|
||||
local passed_phases=(build deploy run)
|
||||
add_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
add_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
else
|
||||
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
fi
|
||||
[[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}"
|
||||
config_set "$APP" "${ALIAS}_URL=$SERVICE_URL"
|
||||
}
|
||||
|
||||
@@ -364,18 +474,22 @@ service_linked_apps() {
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
touch "$LINKS_FILE"
|
||||
[[ -z $(< "$LINKS_FILE") ]] && echo '-' && return 0
|
||||
[[ -z $(<"$LINKS_FILE") ]] && echo '-' && return 0
|
||||
|
||||
tr '\n' ' ' < "$LINKS_FILE"
|
||||
tr '\n' ' ' <"$LINKS_FILE"
|
||||
}
|
||||
|
||||
service_list() {
|
||||
declare desc="Lists all services and their status"
|
||||
local SERVICES=$(ls "$PLUGIN_DATA_ROOT" 2> /dev/null)
|
||||
local SERVICES=$(ls "$PLUGIN_DATA_ROOT" 2>/dev/null)
|
||||
if [[ -z $SERVICES ]]; then
|
||||
dokku_log_warn "There are no $PLUGIN_SERVICE services"
|
||||
else
|
||||
LIST="NAME,VERSION,STATUS,EXPOSED PORTS,LINKS\n"
|
||||
LIST=""
|
||||
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
|
||||
LIST="NAME,VERSION,STATUS,EXPOSED PORTS,LINKS\n"
|
||||
fi
|
||||
|
||||
for SERVICE in $SERVICES; do
|
||||
LIST+="$SERVICE,$(service_version "$SERVICE"),$(service_status "$SERVICE"),$(service_exposed_ports "$SERVICE"),$(service_linked_apps "$SERVICE")\n"
|
||||
done
|
||||
@@ -395,64 +509,81 @@ service_logs() {
|
||||
DOKKU_LOGS_ARGS="--follow"
|
||||
fi
|
||||
|
||||
docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist"
|
||||
docker inspect "$ID" &>/dev/null || 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
|
||||
docker logs $DOKKU_LOGS_ARGS "$ID" 2> /dev/null
|
||||
docker logs $DOKKU_LOGS_ARGS "$ID" 2>&1
|
||||
}
|
||||
|
||||
service_parse_args() {
|
||||
declare desc="cli arg parser"
|
||||
local next_index=1; local skip=false; local args=("$@")
|
||||
local next_index=1
|
||||
local skip=false
|
||||
local args=("$@")
|
||||
|
||||
for arg in "$@"; do
|
||||
shift
|
||||
case "$arg" in
|
||||
"--alias") set -- "$@" "-a" ;;
|
||||
"--config-options") set -- "$@" "-c" ;;
|
||||
"--custom-env") set -- "$@" "-C" ;;
|
||||
"--image") set -- "$@" "-i" ;;
|
||||
"--image-version") set -- "$@" "-I" ;;
|
||||
"--password") set -- "$@" "-p" ;;
|
||||
"--root-password") set -- "$@" "-r" ;;
|
||||
|
||||
"--alias") set -- "$@" "-a" ;;
|
||||
"--database") set -- "$@" "-d" ;;
|
||||
"--memory") set -- "$@" "-m" ;;
|
||||
"--querystring") set -- "$@" "-q" ;;
|
||||
"--user") set -- "$@" "-u" ;;
|
||||
*) set -- "$@" "$arg"
|
||||
"--custom-env") set -- "$@" "-C" ;;
|
||||
"--database") set -- "$@" "-d" ;;
|
||||
"--image-version") set -- "$@" "-I" ;;
|
||||
"--image") set -- "$@" "-i" ;;
|
||||
"--memory") set -- "$@" "-m" ;;
|
||||
"--password") set -- "$@" "-p" ;;
|
||||
"--querystring") set -- "$@" "-q" ;;
|
||||
"--restart-apps") set -- "$@" "-R" ;;
|
||||
"--root-password") set -- "$@" "-r" ;;
|
||||
"--user") set -- "$@" "-u" ;;
|
||||
*) set -- "$@" "$arg" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
OPTIND=1
|
||||
while getopts "a:c:C:d:i:I:m:p:q:r:u:" opt; do
|
||||
while getopts "a:c:C:d:i:I:m:p:q:R:r:u:" opt; do
|
||||
case "$opt" in
|
||||
a) export SERVICE_ALIAS=$OPTARG
|
||||
;;
|
||||
c) export PLUGIN_CONFIG_OPTIONS=$OPTARG
|
||||
;;
|
||||
C) export SERVICE_CUSTOM_ENV=$OPTARG
|
||||
;;
|
||||
d) export SERVICE_DATABASE=$OPTARG
|
||||
;;
|
||||
i) export PLUGIN_IMAGE=$OPTARG
|
||||
;;
|
||||
I) export PLUGIN_IMAGE_VERSION=$OPTARG
|
||||
;;
|
||||
m) export SERVICE_MEMORY=$OPTARG
|
||||
;;
|
||||
p) export SERVICE_PASSWORD=$OPTARG
|
||||
;;
|
||||
q) export SERVICE_QUERYSTRING=$OPTARG
|
||||
;;
|
||||
r) export SERVICE_ROOT_PASSWORD=$OPTARG
|
||||
;;
|
||||
u) export SERVICE_USER=$OPTARG
|
||||
;;
|
||||
a)
|
||||
SERVICE_ALIAS="${OPTARG^^}"
|
||||
export SERVICE_ALIAS="${SERVICE_ALIAS%_URL}"
|
||||
;;
|
||||
c)
|
||||
export PLUGIN_CONFIG_OPTIONS=$OPTARG
|
||||
;;
|
||||
C)
|
||||
export SERVICE_CUSTOM_ENV=$OPTARG
|
||||
;;
|
||||
d)
|
||||
export SERVICE_DATABASE=$OPTARG
|
||||
;;
|
||||
i)
|
||||
export PLUGIN_IMAGE=$OPTARG
|
||||
;;
|
||||
I)
|
||||
export PLUGIN_IMAGE_VERSION=$OPTARG
|
||||
;;
|
||||
m)
|
||||
export SERVICE_MEMORY=$OPTARG
|
||||
;;
|
||||
p)
|
||||
export SERVICE_PASSWORD=$OPTARG
|
||||
;;
|
||||
q)
|
||||
export SERVICE_QUERYSTRING=${OPTARG#"?"}
|
||||
;;
|
||||
R)
|
||||
export SERVICE_RESTART_APPS=$OPTARG
|
||||
;;
|
||||
r)
|
||||
export SERVICE_ROOT_PASSWORD=$OPTARG
|
||||
;;
|
||||
u)
|
||||
export SERVICE_USER=$OPTARG
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$(( OPTIND - 1 ))" # remove options from positional parameters
|
||||
shift "$((OPTIND - 1))" # remove options from positional parameters
|
||||
}
|
||||
|
||||
service_port_expose() {
|
||||
@@ -485,8 +616,8 @@ service_port_pause() {
|
||||
return
|
||||
fi
|
||||
|
||||
docker stop "$EXPOSED_NAME" > /dev/null 2>&1 || true
|
||||
docker rm "$EXPOSED_NAME" > /dev/null 2>&1 || true
|
||||
docker stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
docker rm "$EXPOSED_NAME" >/dev/null 2>&1 || true
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE unexposed"
|
||||
fi
|
||||
@@ -523,10 +654,10 @@ service_port_unpause() {
|
||||
PORTS=($(cat "$PORT_FILE"))
|
||||
fi
|
||||
|
||||
echo "${PORTS[@]}" > "$PORT_FILE"
|
||||
echo "${PORTS[@]}" >"$PORT_FILE"
|
||||
|
||||
# shellcheck disable=SC2046
|
||||
docker 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" svendowideit/ambassador > /dev/null
|
||||
docker 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" dokku/ambassador:0.2.0 >/dev/null
|
||||
if [[ "$LOG_FAIL" == "true" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE exposed on port(s) [container->host]: $(service_exposed_ports "$SERVICE")"
|
||||
fi
|
||||
@@ -566,9 +697,8 @@ service_set_alias() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ALIAS_FILE="$SERVICE_ROOT/ALIAS"
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$ALIAS_FILE"
|
||||
echo "$ALIAS" > "$ALIAS_FILE"
|
||||
echo "$ALIAS" >"$ALIAS_FILE"
|
||||
}
|
||||
|
||||
service_status() {
|
||||
@@ -584,7 +714,7 @@ service_status() {
|
||||
is_container_status "$ID" "Restarting" && echo "restarting" && return 0
|
||||
is_container_status "$ID" "Running" && echo "running" && return 0
|
||||
|
||||
CONTAINER_STATUS=$(docker inspect -f "{{.State.Status}}" "$CID" 2> /dev/null || true)
|
||||
CONTAINER_STATUS=$(docker inspect -f "{{.State.Status}}" "$CID" 2>/dev/null || true)
|
||||
[[ -n "$CONTAINER_STATUS" ]] && echo "$CONTAINER_STATUS" && return 0
|
||||
echo "missing" && return 0
|
||||
}
|
||||
@@ -592,16 +722,16 @@ service_status() {
|
||||
service_stop() {
|
||||
declare desc="Stops a running service"
|
||||
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 ID=$(docker ps -f status=running | grep -e "$SERVICE_NAME$" | awk '{print $1}') || 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
|
||||
|
||||
if [[ -n $ID ]]; then
|
||||
dokku_log_info1_quiet "Stopping container"
|
||||
docker stop "$SERVICE_NAME" > /dev/null
|
||||
dokku_log_info2_quiet "Stopping container"
|
||||
docker stop "$SERVICE_NAME" >/dev/null
|
||||
service_port_pause "$SERVICE"
|
||||
dokku_log_info2 "Container stopped"
|
||||
dokku_log_verbose_quiet "Container stopped"
|
||||
else
|
||||
dokku_log_verbose_quiet "No container exists for $SERVICE"
|
||||
fi
|
||||
@@ -614,17 +744,17 @@ service_unlink() {
|
||||
local SERVICE_URL=$(service_url "$SERVICE")
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local EXISTING_CONFIG=$(config_all "$APP")
|
||||
local SERVICE_ALIAS=$(service_alias "$SERVICE")
|
||||
local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
|
||||
local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
|
||||
|
||||
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
|
||||
# shellcheck disable=SC2034
|
||||
local passed_phases=(build deploy run)
|
||||
remove_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
remove_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
else
|
||||
dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
fi
|
||||
|
||||
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
|
||||
@@ -635,7 +765,7 @@ service_version() {
|
||||
declare desc="Displays the running version for an image"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
docker inspect -f '{{.Config.Image}}' "$SERVICE_NAME" 2> /dev/null || true
|
||||
docker inspect -f '{{.Config.Image}}' "$SERVICE_NAME" 2>/dev/null || true
|
||||
}
|
||||
|
||||
update_plugin_scheme_for_app() {
|
||||
@@ -650,7 +780,17 @@ update_plugin_scheme_for_app() {
|
||||
verify_service_name() {
|
||||
declare desc="Verifies that a service exists"
|
||||
declare SERVICE="$1"
|
||||
[[ ! -n "$SERVICE" ]] && dokku_log_fail "(verify_service_name) SERVICE must not be null"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "(verify_service_name) SERVICE must not be null"
|
||||
[[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] && dokku_log_fail "$PLUGIN_SERVICE service $SERVICE does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
write_database_name() {
|
||||
declare desc="Writes a sanitized database name"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
|
||||
# some datastores do not like special characters in database names
|
||||
# so we need to normalize them out
|
||||
echo "$SERVICE" | tr .- _ > "$SERVICE_ROOT/DATABASE_NAME"
|
||||
}
|
||||
|
||||
9
config
9
config
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
export POSTGRES_IMAGE=${POSTGRES_IMAGE:="postgres"}
|
||||
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="10.2"}
|
||||
export POSTGRES_ROOT=${POSTGRES_ROOT:="/var/lib/dokku/services/postgres"}
|
||||
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="11.2"}
|
||||
export POSTGRES_ROOT=${POSTGRES_ROOT:="$DOKKU_LIB_ROOT/services/postgres"}
|
||||
export POSTGRES_HOST_ROOT=${POSTGRES_HOST_ROOT:=$POSTGRES_ROOT}
|
||||
|
||||
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
|
||||
export PLUGIN_COMMAND_PREFIX="postgres"
|
||||
export PLUGIN_CONFIG_ROOT=${PLUGIN_CONFIG_ROOT:="$DOKKU_LIB_ROOT/config/$PLUGIN_COMMAND_PREFIX"}
|
||||
export PLUGIN_DATA_ROOT=$POSTGRES_ROOT
|
||||
@@ -23,7 +24,3 @@ export PLUGIN_BASE_PATH="$PLUGIN_PATH"
|
||||
if [[ -n $DOKKU_API_VERSION ]]; then
|
||||
export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
|
||||
fi
|
||||
|
||||
if [[ -d "$PLUGIN_DATA_ROOT/*" ]]; then
|
||||
rm -rf "${PLUGIN_DATA_ROOT:?}/*"
|
||||
fi
|
||||
|
||||
62
functions
62
functions
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common-functions"
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||
@@ -8,8 +9,6 @@ if [[ -f "$PLUGIN_AVAILABLE_PATH/docker-options/functions" ]]; then
|
||||
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
|
||||
fi
|
||||
|
||||
# non-generic functions
|
||||
|
||||
service_connect() {
|
||||
local SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
@@ -23,13 +22,15 @@ service_connect() {
|
||||
|
||||
service_create() {
|
||||
local SERVICE="$1"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
is_valid_service_name "$SERVICE" || dokku_log_fail "Please specify a valid name for the service. Valid characters are: [A-Za-z0-9_]+"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] || dokku_log_fail "$PLUGIN_SERVICE service $SERVICE already exists"
|
||||
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
service_parse_args "${@:2}"
|
||||
|
||||
if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then
|
||||
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
|
||||
@@ -42,20 +43,23 @@ service_create() {
|
||||
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"
|
||||
touch "$LINKS_FILE"
|
||||
|
||||
PASSWORD=$(openssl rand -hex 16)
|
||||
if [[ -n "$SERVICE_PASSWORD" ]]; then
|
||||
PASSWORD="$SERVICE_PASSWORD"
|
||||
dokku_log_warn "Specified password may not be as secure as the auto-generated password"
|
||||
fi
|
||||
echo "$PASSWORD" > "$SERVICE_ROOT/PASSWORD"
|
||||
echo "$PASSWORD" >"$SERVICE_ROOT/PASSWORD"
|
||||
chmod 640 "$SERVICE_ROOT/PASSWORD"
|
||||
|
||||
[[ -n "$SERVICE_CUSTOM_ENV" ]] && POSTGRES_CUSTOM_ENV="$SERVICE_CUSTOM_ENV"
|
||||
if [[ -n $POSTGRES_CUSTOM_ENV ]]; then
|
||||
echo "$POSTGRES_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV"
|
||||
echo "$POSTGRES_CUSTOM_ENV" | tr ';' "\n" >"$SERVICE_ROOT/ENV"
|
||||
else
|
||||
echo "" > "$SERVICE_ROOT/ENV"
|
||||
echo "" >"$SERVICE_ROOT/ENV"
|
||||
fi
|
||||
|
||||
write_database_name "$SERVICE"
|
||||
service_create_container "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -65,24 +69,24 @@ service_create_container() {
|
||||
local SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||
local PREVIOUS_ID
|
||||
|
||||
ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_HOST_ROOT/data:/var/lib/postgresql/data" -e "POSTGRES_PASSWORD=$PASSWORD" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=postgres "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION")
|
||||
echo "$ID" > "$SERVICE_ROOT/ID"
|
||||
echo "$ID" >"$SERVICE_ROOT/ID"
|
||||
|
||||
dokku_log_verbose_quiet "Waiting for container to be ready"
|
||||
docker run --rm --link "$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX" dokkupaas/wait:0.2 -p "$PLUGIN_DATASTORE_WAIT_PORT" > /dev/null
|
||||
docker run --rm --link "$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX" dokku/wait:0.3.0 -p "$PLUGIN_DATASTORE_WAIT_PORT" >/dev/null
|
||||
|
||||
dokku_log_verbose_quiet "Creating container database"
|
||||
DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||
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"
|
||||
service_stop "$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
|
||||
service_stop "$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
|
||||
|
||||
PREVIOUS_ID=$(docker ps -f status=exited | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
docker start "$PREVIOUS_ID" > /dev/null
|
||||
PREVIOUS_ID=$(docker ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
docker start "$PREVIOUS_ID" >/dev/null
|
||||
service_port_unpause "$SERVICE"
|
||||
|
||||
dokku_log_info2 "$PLUGIN_SERVICE container created: $SERVICE"
|
||||
@@ -114,7 +118,7 @@ service_import() {
|
||||
if [[ -t 0 ]]; then
|
||||
dokku_log_fail "No data provided on stdin."
|
||||
fi
|
||||
docker exec -i "$SERVICE_NAME" env PGPASSWORD="$PASSWORD" pg_restore -h localhost -cO -d "$DATABASE_NAME" -U postgres -w
|
||||
docker exec -i "$SERVICE_NAME" env PGPASSWORD="$PASSWORD" pg_restore -h localhost -cO --if-exists -d "$DATABASE_NAME" -U postgres -w
|
||||
}
|
||||
|
||||
service_start() {
|
||||
@@ -122,22 +126,25 @@ service_start() {
|
||||
local QUIET="$2"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local ID=$(docker ps -f status=running | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
local ID=$(docker ps -aq --no-trunc --filter "status=running" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || 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
|
||||
[[ -z $QUIET ]] && dokku_log_warn "Updating local container ID"
|
||||
echo "$ID" >"$SERVICE_ROOT/ID"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
dokku_log_info1_quiet "Starting container"
|
||||
local PREVIOUS_ID=$(docker ps -f status=exited | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
local IMAGE_EXISTS=$(docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " && true)
|
||||
dokku_log_info2_quiet "Starting container"
|
||||
local PREVIOUS_ID=$(docker ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
|
||||
if [[ -n $PREVIOUS_ID ]]; then
|
||||
docker start "$PREVIOUS_ID" > /dev/null
|
||||
docker start "$PREVIOUS_ID" >/dev/null
|
||||
service_port_unpause "$SERVICE"
|
||||
dokku_log_info2 "Container started"
|
||||
elif $IMAGE_EXISTS && [[ -n "$PASSWORD" ]]; then
|
||||
elif service_image_exists "$SERVICE" && [[ -n "$PASSWORD" ]]; then
|
||||
service_create_container "$SERVICE"
|
||||
else
|
||||
dokku_log_verbose_quiet "Neither container nor valid configuration exists for $SERVICE"
|
||||
@@ -147,9 +154,8 @@ service_start() {
|
||||
service_url() {
|
||||
local SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
local SERVICE_DNS_HOSTNAME="$(service_dns_hostname "$SERVICE")"
|
||||
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||
local SERVICE_ALIAS="$(service_alias "$SERVICE")"
|
||||
echo "$PLUGIN_SCHEME://postgres:$PASSWORD@$SERVICE_ALIAS:${PLUGIN_DATASTORE_PORTS[0]}/$DATABASE_NAME"
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
echo "$PLUGIN_SCHEME://postgres:$PASSWORD@$SERVICE_DNS_HOSTNAME:${PLUGIN_DATASTORE_PORTS[0]}/$DATABASE_NAME"
|
||||
}
|
||||
|
||||
102
help-functions
102
help-functions
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common-functions"
|
||||
export SUBCOMMAND_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands"
|
||||
|
||||
fn-help() {
|
||||
@@ -12,7 +14,7 @@ fn-help() {
|
||||
exit 0
|
||||
fi
|
||||
|
||||
pushd "$SUBCOMMAND_ROOT" > /dev/null 2>&1
|
||||
pushd "$SUBCOMMAND_ROOT" >/dev/null 2>&1
|
||||
for cmd in *; do
|
||||
if [[ "$CMD" == "${PLUGIN_COMMAND_PREFIX}:$cmd" ]]; then
|
||||
"$SUBCOMMAND_ROOT/$cmd" "$@"
|
||||
@@ -20,27 +22,27 @@ fn-help() {
|
||||
exit "$EXIT_CODE"
|
||||
fi
|
||||
done
|
||||
popd > /dev/null 2>&1
|
||||
popd >/dev/null 2>&1
|
||||
|
||||
exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
|
||||
}
|
||||
|
||||
fn-help-all() {
|
||||
declare CMD="$1" SUBCOMMAND="$2"
|
||||
local CMD_OUTPUT BLUE BOLD FULL_OUTPUT NORMAL
|
||||
local CMD_OUTPUT BLUE BOLD FULL_OUTPUT NORMAL
|
||||
FULL_OUTPUT=true
|
||||
|
||||
if [[ "$CMD" = "$PLUGIN_COMMAND_PREFIX:help" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX:default" ]] ; then
|
||||
BOLD="$(tput bold)"
|
||||
NORMAL="\033[m"
|
||||
BLUE="\033[0;34m"
|
||||
CYAN="\033[1;36m"
|
||||
if [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX:help" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX:default" ]]; then
|
||||
BOLD="$(fn-help-fancy-tput bold)"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
BLUE="$(fn-help-fancy-color "\033[0;34m")"
|
||||
CYAN="$(fn-help-fancy-color "\033[1;36m")"
|
||||
if [[ -n "$SUBCOMMAND" ]] && [[ "$SUBCOMMAND" != "--all" ]]; then
|
||||
fn-help-contents-subcommand "$SUBCOMMAND" "$FULL_OUTPUT"
|
||||
return "$?"
|
||||
fi
|
||||
|
||||
echo -e "${BOLD}usage${NORMAL}: dokku $PLUGIN_COMMAND_PREFIX[:COMMAND]"
|
||||
echo -e "${BOLD}usage${NORMAL}: dokku ${PLUGIN_COMMAND_PREFIX}[:COMMAND]"
|
||||
echo ''
|
||||
echo -e "${BOLD}List your $PLUGIN_COMMAND_PREFIX services.${NORMAL}"
|
||||
echo ''
|
||||
@@ -57,7 +59,7 @@ fn-help-all() {
|
||||
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
|
||||
fn-help-contents
|
||||
else
|
||||
cat<<help_desc
|
||||
cat <<help_desc
|
||||
$PLUGIN_COMMAND_PREFIX, Plugin for managing $PLUGIN_SERVICE services
|
||||
help_desc
|
||||
fi
|
||||
@@ -66,7 +68,7 @@ help_desc
|
||||
}
|
||||
|
||||
fn-help-contents() {
|
||||
pushd "$SUBCOMMAND_ROOT" > /dev/null 2>&1
|
||||
pushd "$SUBCOMMAND_ROOT" >/dev/null 2>&1
|
||||
for cmd in *; do
|
||||
fn-help-contents-subcommand "$cmd" || true
|
||||
done
|
||||
@@ -75,15 +77,15 @@ fn-help-contents() {
|
||||
fn-help-contents-subcommand() {
|
||||
declare SUBCOMMAND="$1" FULL_OUTPUT="$2"
|
||||
local TMPDIR=$(mktemp -d)
|
||||
local UNCLEAN_FILE="${TMPDIR}cmd-unclean" CLEAN_FILE="${TMPDIR}cmd-clean"
|
||||
local UNCLEAN_FILE="${TMPDIR}/cmd-unclean" CLEAN_FILE="${TMPDIR}/cmd-clean"
|
||||
local BOLD CMD_OUTPUT CYAN EXAMPLE LIGHT_GRAY NORMAL
|
||||
trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT
|
||||
|
||||
rm -rf "$UNCLEAN_FILE" "$CLEAN_FILE"
|
||||
cat "$SUBCOMMAND_ROOT/$SUBCOMMAND" > "$UNCLEAN_FILE"
|
||||
cat "$SUBCOMMAND_ROOT/$SUBCOMMAND" >"$UNCLEAN_FILE"
|
||||
|
||||
fn-help-subcommand-sanitize "$UNCLEAN_FILE" "$CLEAN_FILE"
|
||||
if [[ "$(fn-help-is-subcommand-unimplemented "$CLEAN_FILE")" == true ]]; then
|
||||
if ! is_implemented_command "$SUBCOMMAND"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -94,12 +96,12 @@ fn-help-contents-subcommand() {
|
||||
desc="$(grep desc "$CLEAN_FILE" | head -1)"
|
||||
eval "$desc"
|
||||
|
||||
BLUE="\033[0;34m"
|
||||
BOLD="$(tput bold)"
|
||||
CYAN="\033[1;36m"
|
||||
NORMAL="\033[m"
|
||||
LIGHT_GRAY="\033[2;37m"
|
||||
LIGHT_RED="\033[1;31m"
|
||||
BLUE="$(fn-help-fancy-color "\033[0;34m")"
|
||||
BOLD="$(fn-help-fancy-tput bold)"
|
||||
CYAN="$(fn-help-fancy-color "\033[1;36m")"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
|
||||
LIGHT_RED="$(fn-help-fancy-color "\033[1;31m")"
|
||||
CMD_OUTPUT="$(echo -e " ${PLUGIN_COMMAND_PREFIX}${cmd_line}, ${LIGHT_GRAY}${desc}${NORMAL}")"
|
||||
if [[ "$FULL_OUTPUT" != "true" ]]; then
|
||||
echo "$CMD_OUTPUT"
|
||||
@@ -138,22 +140,30 @@ fn-help-contents-subcommand() {
|
||||
return 0
|
||||
}
|
||||
|
||||
fn-help-is-subcommand-unimplemented() {
|
||||
declare FUNC_FILE="$1"
|
||||
local UNIMPLEMENTED
|
||||
fn-help-fancy-tput() {
|
||||
declare desc="A wrapper around tput"
|
||||
|
||||
UNIMPLEMENTED="$(grep "Not yet implemented" "$FUNC_FILE" | head -1 || true)"
|
||||
if [[ -n "$UNIMPLEMENTED" ]]; then
|
||||
echo true
|
||||
else
|
||||
echo false
|
||||
if [[ -n "$DOKKU_NO_COLOR" ]] || [[ "$TERM" == "unknown" ]] || [[ "$TERM" == "dumb" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
tput "$@"
|
||||
}
|
||||
|
||||
fn-help-fancy-color() {
|
||||
declare desc="A wrapper around colors"
|
||||
|
||||
if [[ -n "$DOKKU_NO_COLOR" ]] || [[ "$TERM" == "unknown" ]] || [[ "$TERM" == "dumb" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
fn-help-list-example() {
|
||||
# shellcheck disable=SC2034
|
||||
declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content"
|
||||
cat<<help_list
|
||||
cat <<help_list
|
||||
NAME, VERSION, STATUS, EXPOSED PORTS, LINKS
|
||||
service-name, $PLUGIN_COMMAND_PREFIX:$PLUGIN_IMAGE_VERSION, running, -, app-name
|
||||
help_list
|
||||
@@ -164,8 +174,8 @@ fn-help-subcommand-args() {
|
||||
local argline arglist args argpos BLUE NORMAL
|
||||
|
||||
if [[ "$FULL_OUTPUT" == "true" ]]; then
|
||||
BLUE="\033[0;34m"
|
||||
NORMAL="\033[m"
|
||||
BLUE="$(fn-help-fancy-color "\033[0;34m")"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
fi
|
||||
argline=$(grep declare "$FUNC_FILE" | grep -v "declare desc" | head -1 || true)
|
||||
arglist=($(echo -e "${argline// /"\n"}" | awk -F= '/=/{print ""$1""}'))
|
||||
@@ -210,12 +220,12 @@ fn-help-subcommand-example() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
BOLD="$(tput bold)"
|
||||
BOLD="$(fn-help-fancy-tput bold)"
|
||||
LAST_LINE=""
|
||||
LIGHT_GRAY="\033[2;37m"
|
||||
OTHER_GRAY="\033[7;37m"
|
||||
LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
|
||||
OTHER_GRAY="$(fn-help-fancy-color "\033[7;37m")"
|
||||
NEWLINE=""
|
||||
NORMAL="\033[m"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
_fn-help-apply-shell-expansion "$EXAMPLE" | while read -r line; do
|
||||
line="$(echo "$line" | cut -c 4-)"
|
||||
if [[ "$line" == export* ]] || [[ "$line" == dokku* ]]; then
|
||||
@@ -245,10 +255,10 @@ fn-help-subcommand-list-args() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
NORMAL="\033[m"
|
||||
LIGHT_GRAY="\033[2;37m"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
|
||||
|
||||
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
|
||||
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
|
||||
echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}"
|
||||
done
|
||||
}
|
||||
@@ -262,10 +272,10 @@ fn-help-subcommand-list-flags() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
NORMAL="\033[m"
|
||||
LIGHT_GRAY="\033[2;37m"
|
||||
NORMAL="$(fn-help-fancy-color "\033[m")"
|
||||
LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
|
||||
|
||||
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
|
||||
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
|
||||
echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}"
|
||||
done
|
||||
}
|
||||
@@ -286,16 +296,16 @@ fn-help-subcommand-sanitize() {
|
||||
fi
|
||||
|
||||
if [[ "$FUNCTION_FOUND" == true ]]; then
|
||||
echo "$p" >> "$OUTGOING_FUNC_FILE"
|
||||
echo "$p" >>"$OUTGOING_FUNC_FILE"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$p" == *"()"* ]]; then
|
||||
FUNCTION_FOUND=true
|
||||
echo "$p" >> "$OUTGOING_FUNC_FILE"
|
||||
echo "$p" >>"$OUTGOING_FUNC_FILE"
|
||||
continue
|
||||
fi
|
||||
done < "$FUNC_FILE"
|
||||
done <"$FUNC_FILE"
|
||||
}
|
||||
|
||||
_fn-help-apply-shell-expansion() {
|
||||
|
||||
15
install
15
install
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
plugin-install() {
|
||||
pull-docker-image() {
|
||||
@@ -10,16 +11,16 @@ plugin-install() {
|
||||
echo " ! docker pull ${IMAGE}" 1>&2
|
||||
return
|
||||
fi
|
||||
if [[ "$(docker images -q "${IMAGE}" 2> /dev/null)" == "" ]]; then
|
||||
if [[ "$(docker images -q "${IMAGE}" 2>/dev/null)" == "" ]]; then
|
||||
docker pull "${IMAGE}"
|
||||
fi
|
||||
}
|
||||
|
||||
pull-docker-image "${PLUGIN_IMAGE}:${PLUGIN_IMAGE_VERSION}"
|
||||
pull-docker-image "svendowideit/ambassador:latest"
|
||||
pull-docker-image "dokkupaas/wait:0.2"
|
||||
pull-docker-image "dokkupaas/s3backup:0.8.0"
|
||||
pull-docker-image "busybox:latest"
|
||||
pull-docker-image "dokku/ambassador:0.2.0"
|
||||
pull-docker-image "dokku/wait:0.3.0"
|
||||
pull-docker-image "dokku/s3backup:0.9.4"
|
||||
pull-docker-image "busybox:1.30.1-uclibc"
|
||||
|
||||
mkdir -p "$PLUGIN_DATA_ROOT" || echo "Failed to create $PLUGIN_SERVICE data directory"
|
||||
chown dokku:dokku "$PLUGIN_DATA_ROOT"
|
||||
@@ -31,7 +32,7 @@ plugin-install() {
|
||||
_SUDOERS_FILE="/etc/sudoers.d/dokku-${PLUGIN_COMMAND_PREFIX}"
|
||||
|
||||
touch "$_SUDOERS_FILE"
|
||||
cat > "$_SUDOERS_FILE" <<EOL
|
||||
cat >"$_SUDOERS_FILE" <<EOL
|
||||
%dokku ALL=(ALL) NOPASSWD:/bin/rm -f /etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-*
|
||||
%dokku ALL=(ALL) NOPASSWD:/bin/chown root\:root /etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-*
|
||||
%dokku ALL=(ALL) NOPASSWD:/bin/chmod 644 /etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku postgres service plugin"
|
||||
version = "1.2.6"
|
||||
version = "1.8.1"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
PLUGIN_BASE_PATH="$PLUGIN_PATH"
|
||||
if [[ -n $DOKKU_API_VERSION ]]; then
|
||||
@@ -10,7 +12,10 @@ source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/functions"
|
||||
|
||||
APP="$1"
|
||||
for SERVICE in "$PLUGIN_DATA_ROOT"/*; do
|
||||
pushd "$PLUGIN_DATA_ROOT" >/dev/null
|
||||
for SERVICE in *; do
|
||||
dokku_log_verbose_quiet "Unlinking from $SERVICE"
|
||||
remove_from_links_file "$(basename "$SERVICE")" "$APP"
|
||||
done
|
||||
popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null
|
||||
exit 0
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
cd /var/lib/postgresql/data
|
||||
pushd /var/lib/postgresql/data >/dev/null
|
||||
openssl req -new -newkey rsa:4096 -x509 -nodes -out server.crt -keyout server.key -batch
|
||||
chmod 600 server.key
|
||||
sed -i "s/^#ssl = off/ssl = on/" postgresql.conf
|
||||
sed -i "s/^#ssl_ciphers =.*/ssl_ciphers = 'AES256+EECDH:AES256+EDH'/" postgresql.conf
|
||||
popd >/dev/null
|
||||
|
||||
23
subcommands/app-links
Executable file
23
subcommands/app-links
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/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-app-links-cmd() {
|
||||
#E list all $PLUGIN_COMMAND_PREFIX services that are linked to the 'playground' app.
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:app-links playground
|
||||
#A app, app to run command against
|
||||
declare desc="list all $PLUGIN_SERVICE service links for a given app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:app-links" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare APP="$1"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_app_name "$APP"
|
||||
service_app_links "$APP"
|
||||
}
|
||||
|
||||
service-app-links-cmd "$@"
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -11,10 +12,12 @@ service-backup-cmd() {
|
||||
#A service, service to run command against
|
||||
#A bucket-name, name of the s3 bucket to upload backups to
|
||||
declare desc="creates a backup of the $PLUGIN_SERVICE service to an existing s3 bucket"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" BUCKET_NAME="$2" USE_IAM_OPTIONAL_FLAG="$3"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$BUCKET_NAME" ]] && dokku_log_fail "Please specify an aws bucket for the backup"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup "$SERVICE" "$BUCKET_NAME" "$USE_IAM_OPTIONAL_FLAG"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -20,10 +21,12 @@ service-backup-auth-cmd() {
|
||||
#A aws-signature-version, (optional) the AWS signature version to use when signing S3 requests
|
||||
#A endpoint-url, (optional) an aws endpoint to upload to
|
||||
declare desc="sets up authentication for backups on the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-auth" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-auth" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" AWS_ACCESS_KEY_ID="$2" AWS_SECRET_ACCESS_KEY="$3" AWS_DEFAULT_REGION="$4" AWS_SIGNATURE_VERSION="$5" ENDPOINT_URL="$6"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$AWS_ACCESS_KEY_ID" ]] && dokku_log_fail "Please specify an aws access key id"
|
||||
[[ -z "$AWS_SECRET_ACCESS_KEY" ]] && dokku_log_fail "Please specify an aws secret access key"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,12 @@ service-backup-deauth-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:backup-deauth lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="removes backup authentication for the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-deauth" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-deauth" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup_deauth "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -15,10 +16,12 @@ service-backup-schedule-cmd() {
|
||||
#A schedule, a cron schedule to run backups on
|
||||
#A bucket-name, name of the s3 bucket to upload backups to
|
||||
declare desc="schedules a backup of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-schedule" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-schedule" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" SCHEDULE="$2" BUCKET_NAME="$3" USE_IAM_OPTIONAL_FLAG="$4"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$SCHEDULE" ]] && dokku_log_fail "Please specify a schedule for the backup"
|
||||
[[ -z "$BUCKET_NAME" ]] && dokku_log_fail "Please specify an aws bucket for the backup"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-backup-schedule-cat-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:backup-schedule-cat lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="cat the contents of the configured backup cronfile for the service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-schedule-cat" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-schedule-cat" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup_schedule_cat "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
service-backup-set-encryption-cmd() {
|
||||
#E set a GPG encryption key for backups
|
||||
#E set a GPG passphrase for backups
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:backup-set-encryption lolipop
|
||||
#A service, service to run command against
|
||||
#A encryption-key, a GPG encryption key
|
||||
#A passphrase, a GPG-compatible passphrase
|
||||
declare desc="sets encryption for all future backups of $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-set-encryption" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" ENCRYPTION_KEY="$2"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-set-encryption" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" PASSPHRASE="$2"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$ENCRYPTION_KEY" ]] && dokku_log_fail "Please specify a GPG encryption key"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$PASSPHRASE" ]] && dokku_log_fail "Please specify a GPG backup passphrase"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup_set_encryption "$SERVICE" "$ENCRYPTION_KEY"
|
||||
service_backup_set_encryption "$SERVICE" "$PASSPHRASE"
|
||||
}
|
||||
|
||||
service-backup-set-encryption-cmd "$@"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,12 @@ service-backup-unschedule-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:backup-unschedule lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="unschedules the backup of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unschedule" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unschedule" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup_unschedule "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,12 @@ service-backup-unset-encryption-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:backup-unset-encryption lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="unsets encryption for future backups of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unset-encryption" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unset-encryption" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_backup_unset_encryption "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,21 +10,35 @@ service-clone-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:clone lolipop lolipop-2
|
||||
#A service, service to run command against
|
||||
#A new-service, name of new service
|
||||
#F -C|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with
|
||||
#F -i|--image IMAGE, the image name to start the service with
|
||||
#F -I|--image-version IMAGE_VERSION, the image version to start the service with
|
||||
#F -p|--password PASSWORD, override the user-level service password
|
||||
#F -r|--root-password PASSWORD, override the root-level service password
|
||||
declare desc="create container <new-name> then copy data from <name> into <new-name>"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" NEW_SERVICE="$2" CLONE_FLAGS_LIST="${@:3}"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" NEW_SERVICE="$2" CLONE_FLAGS_LIST=("${@:3}")
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$NEW_SERVICE" ]] && dokku_log_fail "Please specify a name for the new service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
PLUGIN_IMAGE=$(service_version "$SERVICE" | grep -o "^.*:" | sed -r "s/://g")
|
||||
PLUGIN_IMAGE_VERSION=$(service_version "$SERVICE" | grep -o ":.*$" | sed -r "s/://g")
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ID="$(cat "$SERVICE_ROOT/ID")"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service ${SERVICE} container is not running"
|
||||
|
||||
PLUGIN_IMAGE=$(service_version "$SERVICE" | grep -o "^.*:" | sed -r "s/://g")
|
||||
PLUGIN_IMAGE_VERSION=$(service_version "$SERVICE" | grep -o ":.*$" | sed -r "s/://g")
|
||||
|
||||
service_parse_args "${@:3}"
|
||||
|
||||
dokku_log_info2 "Cloning $SERVICE to $NEW_SERVICE @ $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
service_create "$NEW_SERVICE" "${@:3}"
|
||||
dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE"
|
||||
service_export "$SERVICE" | service_import "$NEW_SERVICE" > /dev/null 2>&1 || true
|
||||
dokku_log_info1 "Done"
|
||||
service_export "$SERVICE" | service_import "$NEW_SERVICE" >/dev/null 2>&1 || true
|
||||
dokku_log_info2 "Done"
|
||||
}
|
||||
|
||||
service-clone-cmd "$@"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -8,11 +9,13 @@ service-connect-cmd() {
|
||||
#E connect to the service via the $PLUGIN_COMMAND_PREFIX connection tool
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:connect lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="connect via psql to a $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:connect" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare desc="connect to the service via the $PLUGIN_COMMAND_PREFIX connection tool"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:connect" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_connect "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -12,19 +13,20 @@ service-create-cmd() {
|
||||
#E export ${PLUGIN_DEFAULT_ALIAS}_IMAGE="${PLUGIN_IMAGE}"
|
||||
#E export ${PLUGIN_DEFAULT_ALIAS}_IMAGE_VERSION="${PLUGIN_IMAGE_VERSION}"
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:create lolipop
|
||||
#E you can also specify custom environment variables to start
|
||||
#E you can also specify custom environment variables to start
|
||||
#E the ${PLUGIN_COMMAND_PREFIX} service in semi-colon separated form.
|
||||
#E export ${PLUGIN_DEFAULT_ALIAS}_CUSTOM_ENV="USER=alpha;HOST=beta"
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:create lolipop
|
||||
#A service, service to run command against
|
||||
#F -c|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with
|
||||
#F -C|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with
|
||||
#F -i|--image IMAGE, the image name to start the service with
|
||||
#F -i|--image-version IMAGE_VERSION, the image version to start the service with
|
||||
#F -I|--image-version IMAGE_VERSION, the image version to start the service with
|
||||
#F -p|--password PASSWORD, override the user-level service password
|
||||
#F -r|--root-password PASSWORD, override the root-level service password
|
||||
declare desc="create a $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" CREATE_FLAGS_LIST="${@:2}"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" CREATE_FLAGS_LIST=("${@:2}")
|
||||
|
||||
service_create "$SERVICE" "${@:2}"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -10,12 +11,14 @@ service-destroy-cmd() {
|
||||
#A service, service to run command against
|
||||
#F -f|--force, force destroy without asking for confirmation
|
||||
declare desc="delete the $PLUGIN_SERVICE service/data/container if there are no links left"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:destroy" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:destroy" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" FORCE_FLAG="$2"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE"
|
||||
SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
|
||||
@@ -37,21 +40,12 @@ service-destroy-cmd() {
|
||||
fi
|
||||
fi
|
||||
|
||||
dokku_log_info1 "Deleting $SERVICE"
|
||||
if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then
|
||||
dokku_log_verbose_quiet "Deleting container data"
|
||||
service_stop "$SERVICE"
|
||||
sleep 1
|
||||
|
||||
dokku_log_verbose_quiet "Removing container"
|
||||
docker rm -v "$SERVICE_NAME" > /dev/null
|
||||
sleep 1
|
||||
else
|
||||
dokku_log_verbose_quiet "No container exists for $SERVICE"
|
||||
fi
|
||||
dokku_log_info2_quiet "Deleting $SERVICE"
|
||||
service_backup_unschedule "$SERVICE"
|
||||
service_container_rm "$SERVICE"
|
||||
|
||||
dokku_log_verbose_quiet "Removing data"
|
||||
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /config /data
|
||||
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" busybox:1.30.1-uclibc chmod 777 -R /config /data
|
||||
rm -rf "$SERVICE_ROOT"
|
||||
|
||||
dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -13,7 +14,8 @@ service-enter-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:enter lolipop touch /tmp/test
|
||||
#A service, service to run command against
|
||||
declare desc="enter or run a command in a running $PLUGIN_SERVICE service container"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:enter" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:enter" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
dokku_log_info1_quiet "Filesystem changes may not persist after container restarts"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-exists-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:exists lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="check if the $PLUGIN_SERVICE service exists"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:exists" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:exists" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
dokku_log_info1 "Service $SERVICE exists"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -11,10 +12,12 @@ service-export-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:export lolipop > lolipop.dump
|
||||
#A service, service to run command against
|
||||
declare desc="export a dump of the $PLUGIN_SERVICE service database"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:export" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:export" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_export "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -10,10 +11,11 @@ service-expose-cmd() {
|
||||
#A service, service to run command against
|
||||
#A ports, a list of ports to run against
|
||||
declare desc="expose a $PLUGIN_SERVICE service on custom port if provided (random port otherwise)"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:expose" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" PORTS_LIST="${@:2}"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:expose" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" PORTS_LIST=("${@:2}")
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_port_expose "$SERVICE" "${@:2}"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,12 @@ service-import-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:import lolipop < database.dump
|
||||
#A service, service to run command against
|
||||
declare desc="import a dump into the $PLUGIN_SERVICE service database"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:import" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:import" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_import "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -30,10 +31,11 @@ service-info-cmd() {
|
||||
#F --status, show the service running status
|
||||
#F --version, show the service image version
|
||||
declare desc="print the connection information"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:info" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:info" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" INFO_FLAG="$2"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_info "$SERVICE" "$INFO_FLAG"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -39,15 +40,20 @@ service-link-cmd() {
|
||||
#E ${PLUGIN_SCHEME}2://lolipop:SOME_PASSWORD@dokku-${PLUGIN_COMMAND_PREFIX}-lolipop:${PLUGIN_DATASTORE_PORTS[0]}/lolipop
|
||||
#A service, service to run command against
|
||||
#A app, app to run command against
|
||||
#F -a|--alias "BLUE_DATABASE", an alternative alias to use for linking to an app via environment variable
|
||||
#F -q|--querystring "pool=5", ampersand delimited querystring arguments to append to the service link
|
||||
declare desc="link the $PLUGIN_SERVICE service to the app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:link" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:link" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2" LINK_FLAGS_LIST=("${@:3}")
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_app_name "$APP"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
service_parse_args "${@:3}"
|
||||
service_link "$SERVICE" "$APP"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -10,11 +11,12 @@ service-linked-cmd() {
|
||||
#A service, service to run command against
|
||||
#A app, app to run command against
|
||||
declare desc="check if the $PLUGIN_SERVICE service is linked to an app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:linked" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:linked" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_app_name "$APP"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -8,7 +9,8 @@ service-list-cmd() {
|
||||
#E list all services
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:list
|
||||
declare desc="list all $PLUGIN_SERVICE services"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:list" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:list" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
|
||||
service_list
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -12,10 +13,11 @@ service-logs-cmd() {
|
||||
#A service, service to run command against
|
||||
#F -t|--tail, do not stop when end of the logs are reached and wait for additional output
|
||||
declare desc="print the most recent log(s) for this service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:logs" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:logs" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" TAIL_FLAG="$2"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_logs "$SERVICE" "$TAIL_FLAG"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -23,11 +24,12 @@ service-promote-cmd() {
|
||||
#A service, service to run command against
|
||||
#A app, app to run command against
|
||||
declare desc="promote service <service> as ${PLUGIN_DEFAULT_ALIAS}_URL in <app>"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:promote" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:promote" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_service_name "$SERVICE"
|
||||
verify_app_name "$APP"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-restart-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:restart lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="graceful shutdown and restart of the $PLUGIN_SERVICE service container"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:restart" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:restart" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_stop "$SERVICE"
|
||||
service_start "$SERVICE"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-start-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:start lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="start a previously stopped $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:start" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:start" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_start "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-stop-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:stop lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="stop a running $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:stop" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:stop" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_stop "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -9,10 +10,11 @@ service-unexpose-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:unexpose lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="unexpose a previously exposed $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:unexpose" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:unexpose" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
service_port_unexpose "$SERVICE"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
@@ -11,11 +12,12 @@ service-unlink-cmd() {
|
||||
#A service, service to run command against
|
||||
#A app, app to run command against
|
||||
declare desc="unlink the $PLUGIN_SERVICE service from the app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:unlink" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:unlink" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_service_name "$SERVICE"
|
||||
verify_app_name "$APP"
|
||||
|
||||
63
subcommands/upgrade
Executable file
63
subcommands/upgrade
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/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"
|
||||
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
|
||||
|
||||
service-upgrade-cmd() {
|
||||
#E you can upgrade an existing service to a new image or image-version
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:upgrade lolipop
|
||||
#A service, service to run command against
|
||||
#F -C|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with
|
||||
#F -i|--image IMAGE, the image name to start the service with
|
||||
#F -I|--image-version IMAGE_VERSION, the image version to start the service with
|
||||
#F -R|--restart-apps "true", whether to force an app restart
|
||||
declare desc="upgrade service <service> to the specified versions"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:upgrade" argv=("$@")
|
||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" UPGRADE_FLAGS_LIST=("${@:2}")
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
|
||||
service_parse_args "${@:2}"
|
||||
|
||||
if ! service_image_exists "$SERVICE"; then
|
||||
dokku_log_fail "Unable to proceed with upgrade, image ${PLUGIN_IMAGE}:${PLUGIN_IMAGE_VERSION} does not exist"
|
||||
fi
|
||||
|
||||
local NEW_PLUGIN_IMAGE_TAG="$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
if [[ "$(service_version "$SERVICE")" == "$NEW_PLUGIN_IMAGE_TAG" ]]; then
|
||||
dokku_log_info1 "Service $SERVICE already running $NEW_PLUGIN_IMAGE_TAG"
|
||||
return
|
||||
fi
|
||||
|
||||
dokku_log_info2 "Upgrading $SERVICE to $NEW_PLUGIN_IMAGE_TAG"
|
||||
if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then
|
||||
dokku_log_info2 "Stopping all linked services"
|
||||
for app in $(service_linked_apps "$SERVICE"); do
|
||||
[[ "$app" == "-" ]] && continue
|
||||
ps_stop "$app"
|
||||
done
|
||||
fi
|
||||
|
||||
dokku_log_info2 "Stopping $SERVICE"
|
||||
service_container_rm "$SERVICE"
|
||||
service_start "$SERVICE" "${@:2}"
|
||||
|
||||
if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then
|
||||
dokku_log_info2 "Starting all linked services"
|
||||
for app in $(service_linked_apps "$SERVICE"); do
|
||||
[[ "$app" == "-" ]] && continue
|
||||
ps_start "$app"
|
||||
done
|
||||
fi
|
||||
|
||||
dokku_log_info2 "Done"
|
||||
}
|
||||
|
||||
service-upgrade-cmd "$@"
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $TRACE ]] && set -x
|
||||
|
||||
semver-parse-into() {
|
||||
declare VERSION="$1"
|
||||
local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)'
|
||||
local MAJOR="$(echo "$VERSION" | sed -e "s#$RE#\1#")"
|
||||
local MINOR="$(echo "$VERSION" | sed -e "s#$RE#\2#")"
|
||||
local PATCH="$(echo "$VERSION" | sed -e "s#$RE#\3#")"
|
||||
echo "${MAJOR} ${MINOR} ${PATCH}"
|
||||
}
|
||||
|
||||
main() {
|
||||
declare MIN_VERSION="$1" CHECK_VERSION="$2"
|
||||
local IS_AT_LEAST_VERSION=false
|
||||
local MAJOR_MIN MINOR_MIN PATCH_MIN MAJOR_CHECK MINOR_CHECK PATCH_CHECK PARSED_MIN PARSED_CHECK
|
||||
|
||||
PARSED_MIN="$(semver-parse-into "$MIN_VERSION")"
|
||||
PARSED_CHECK="$(semver-parse-into "$CHECK_VERSION")"
|
||||
MAJOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f1)"
|
||||
MINOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f2)"
|
||||
PATCH_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f3)"
|
||||
MAJOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f1)"
|
||||
MINOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f2)"
|
||||
PATCH_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f3)"
|
||||
|
||||
if [[ "$MAJOR_CHECK" -gt "$MAJOR_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -gt "$MINOR_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -eq "$MINOR_MIN" ]] && [[ "$PATCH_CHECK" -ge "$PATCH_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
fi
|
||||
|
||||
echo "$IS_AT_LEAST_VERSION"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
101
tests/bin/docker
101
tests/bin/docker
@@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck source=../../config
|
||||
# shellcheck disable=SC1091
|
||||
source "$(dirname "$0")/../../config"
|
||||
|
||||
if [[ $ECHO_DOCKER_COMMAND == "true" ]]; then
|
||||
echo "$(basename "$0") $*"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
exec)
|
||||
echo "exec called with $@"
|
||||
;;
|
||||
images)
|
||||
echo "REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE"
|
||||
echo "elasticsearch 2.3.5 89ed89918502 2 days ago 522.1 MB"
|
||||
echo "frodenas/couchdb 1.6 cb9a62e007eb 2 days ago 537 MB"
|
||||
echo "dokkupaas/docker-grafana-graphite 3.0.1 75dcd48a5eef 2 days ago 936.4 MB"
|
||||
echo "mariadb 10.1.16 f2485761e714 2 days ago 302.2 MB"
|
||||
echo "memcached 1.4.31 8a05b51f8876 2 days ago 132.4 MB"
|
||||
echo "mongo 3.2.9 12eadb136159 2 days ago 291.1 MB"
|
||||
echo "mysql 5.7.12 57d56ac47bed 2 days ago 321.3 MB"
|
||||
echo "nats 0.9.4 9216d5a4eec8 2 days ago 109.3 MB"
|
||||
echo "postgres 10.2 6412eb70175e 2 days ago 265.7 MB"
|
||||
echo "rabbitmq 3.6.5-management 327b803301e9 2 days ago 143.5 MB"
|
||||
echo "redis 3.2.3 9216d5a4eec8 2 days ago 109.3 MB"
|
||||
echo "rethinkdb 2.3.4 f27010a550ec 2 days ago 196.3 MB"
|
||||
echo "svendowideit/ambassador latest 0d2200edc53e 2 days ago 7.241 MB"
|
||||
;;
|
||||
inspect)
|
||||
if [[ $@ = *"IPAddress"* ]]; then
|
||||
echo "172.17.0.34"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ $@ =~ \{\{.Config.Image\}\} ]]; then
|
||||
echo "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ $@ =~ \{\{\.State\..*\}\} ]]; then
|
||||
if [[ $@ =~ \{\{\.State\.Running\}\} ]]; then
|
||||
echo "true"
|
||||
else
|
||||
echo "false"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# running
|
||||
echo "true"
|
||||
;;
|
||||
kill)
|
||||
echo "testid"
|
||||
;;
|
||||
logs)
|
||||
echo "$PLUGIN_SERVICE $PLUGIN_IMAGE_VERSION"
|
||||
;;
|
||||
ps)
|
||||
if [[ $@ = *"no-trunc"* ]]; then
|
||||
echo "1479bbd60ade8a92617d2aeb4935bd3ff3179bd0fd71c22c3102c421f4bc221f"
|
||||
exit 0
|
||||
else
|
||||
echo 'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES'
|
||||
echo '4eeaae231d5e elasticsearch:2.3.5 "/docker-entrypoint." 11 seconds ago Up 10 seconds 9200/tcp, 9300/tcp dokku.elasticsearch.l'
|
||||
echo '2b20a383226d frodenas/couchdb:1.6 "/scripts/run.sh" 11 seconds ago Up 10 seconds 5984/tcp dokku.couchdb.l'
|
||||
echo '76a0e7154483 dokkupaas/docker-grafana-graphite:3.0.1 "/usr/bin/supervisor" 11 seconds ago Up 10 seconds 80/tcp, 2003/tcp, 8126/tcp, 8125/udp dokku.graphite.l'
|
||||
echo '94df08fe5550 mariadb:10.1.16 "/docker-entrypoint." 11 seconds ago Up 10 seconds 3306/tcp dokku.mariadb.l'
|
||||
echo 'ef27fec191ba memcached:1.4.31 "/entrypoint.sh memc" 11 seconds ago Up 10 seconds 11211/tcp dokku.memcached.l'
|
||||
echo 'c0f74fc90377 mongo:3.2.9 "/entrypoint.sh mong" 11 seconds ago Up 10 seconds 27017/tcp dokku.mongo.l'
|
||||
echo '0f33b1c86da9 mysql:5.7.12 "/entrypoint.sh mysq" 11 seconds ago Up 10 seconds 3306/tcp dokku.mysql.l'
|
||||
echo '9f10b6dc12d5 nats:0.9.4 "/entrypoint.sh redi" 11 seconds ago Up 10 seconds 4222/tcp dokku.nats.l'
|
||||
echo '7f899b723c08 postgres:10.2 "/docker-entrypoint." 11 seconds ago Up 10 seconds 5432/tcp dokku.postgres.l'
|
||||
echo '5e50a462661e rabbitmq:3.6.5-management "/docker-entrypoint." 11 seconds ago Up 10 seconds 5672/tcp, 15672/tcp dokku.rabbitmq.l'
|
||||
echo 'c39ca00fa3c6 redis:3.2.3 "/entrypoint.sh redi" 11 seconds ago Up 10 seconds 6379/tcp dokku.redis.l'
|
||||
echo 'dc98c2939a80 rethinkdb:2.3.4 "rethinkdb --bind al" 11 seconds ago Up 10 seconds 8080/tcp, 28015/tcp, 29015/tcp dokku.rethinkdb.l'
|
||||
fi
|
||||
;;
|
||||
pull)
|
||||
exit 0
|
||||
;;
|
||||
restart)
|
||||
echo "testid"
|
||||
;;
|
||||
rm)
|
||||
echo "testid"
|
||||
;;
|
||||
run)
|
||||
echo "testid"
|
||||
;;
|
||||
start)
|
||||
echo "testid"
|
||||
;;
|
||||
stop)
|
||||
echo "testid"
|
||||
;;
|
||||
*)
|
||||
exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
|
||||
;;
|
||||
esac
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
echo "dokku"
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
echo "Darwin"
|
||||
else
|
||||
echo "Ubuntu"
|
||||
fi
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
exit 0
|
||||
@@ -2,15 +2,14 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:hook:pre-delete) removes app from links file when destroying app" {
|
||||
|
||||
@@ -2,34 +2,37 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@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_failure
|
||||
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service
|
||||
}
|
||||
|
||||
@@ -38,5 +41,7 @@ teardown() {
|
||||
[[ -f $PLUGIN_DATA_ROOT/new_service/ID ]]
|
||||
assert_contains "${lines[*]}" "Copying data from l to new_service"
|
||||
assert_contains "${lines[*]}" "Done"
|
||||
}
|
||||
assert_success
|
||||
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service
|
||||
}
|
||||
|
||||
@@ -2,18 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:connect) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:connect"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:connect) error when service does not exist" {
|
||||
@@ -22,8 +20,7 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:connect) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
skip "Connect hangs indefinitely without input"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:connect" l
|
||||
assert_output 'docker exec -i -t dokku.postgres.l psql -h localhost -U postgres l'
|
||||
assert_success
|
||||
}
|
||||
|
||||
|
||||
@@ -4,9 +4,24 @@ load test_helper
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
assert_contains "${lines[*]}" "container created: l"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) service with dashes" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" service-with-dashes
|
||||
assert_contains "${lines[*]}" "container created: service-with-dashes"
|
||||
assert_contains "${lines[*]}" "dokku-$PLUGIN_COMMAND_PREFIX-service-with-dashes"
|
||||
assert_contains "${lines[*]}" "service_with_dashes"
|
||||
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" service-with-dashes
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:create"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) error when there is an invalid name specified" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" d.erp
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ load test_helper
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:destroy) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:destroy"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:destroy) error when container does not exist" {
|
||||
@@ -21,7 +21,10 @@ load test_helper
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku apps:create app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
run dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
assert_contains "${lines[*]}" "Cannot delete linked service"
|
||||
rm -rf "$DOKKU_ROOT/app"
|
||||
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l app
|
||||
run dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
assert_contains "${lines[*]}" "container deleted: l"
|
||||
}
|
||||
|
||||
@@ -2,18 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) error when service does not exist" {
|
||||
@@ -22,19 +20,17 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) success with SSH_TTY" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
export SSH_TTY=`tty`
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" l
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_exit_status 0
|
||||
assert_output "docker exec dokku.postgres.l env PGPASSWORD=$password pg_dump -Fc --no-acl --no-owner -h localhost -U postgres -w l"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) success without SSH_TTY" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
unset SSH_TTY
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" l
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_exit_status 0
|
||||
assert_output "docker exec dokku.postgres.l env PGPASSWORD=$password pg_dump -Fc --no-acl --no-owner -h localhost -U postgres -w l"
|
||||
}
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when service does not exist" {
|
||||
@@ -19,12 +19,12 @@ teardown() {
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing a custom port" {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l
|
||||
[[ "${lines[*]}" =~ exposed\ on\ port\(s\)\ \[container\-\>host\]\:\ [[:digit:]]+ ]]
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing a custom port" {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l 4242
|
||||
assert_contains "${lines[*]}" "exposed on port(s) [container->host]: 5432->4242"
|
||||
}
|
||||
|
||||
@@ -2,36 +2,37 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
echo "data" > "$PLUGIN_DATA_ROOT/fake.dump"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
echo "data" | tee "/tmp/fake.dump"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -f "$PLUGIN_DATA_ROOT/fake.dump"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
rm -f "/tmp/fake.dump"
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@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"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.dump"
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_output "docker exec -i dokku.postgres.l env PGPASSWORD=$password pg_restore -h localhost -cO -d l -U postgres -w"
|
||||
skip "The fake dump is hard to work with in tests"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "/tmp/fake.dump"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
}
|
||||
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) error when service does not exist" {
|
||||
@@ -21,21 +21,21 @@ teardown() {
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "${lines[*]}" "postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) replaces underscores by dash in hostname" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" test_with_underscores
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" test_with_underscores
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
|
||||
assert_contains "${lines[*]}" "postgres://postgres:$password@dokku-postgres-test-with-underscores:5432/test_with_underscores"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" test_with_underscores
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) success with flag" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --dsn
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_output "postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --config-dir
|
||||
|
||||
@@ -2,46 +2,69 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" m
|
||||
dokku apps:create my_app
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" m
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app argument is missing" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Please specify an app to run the command on"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l not_existing_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "App not_existing_app does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" not_existing_service my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service is already linked to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Already linked as DATABASE_URL"
|
||||
assert_failure
|
||||
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) exports DATABASE_URL to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -49,7 +72,14 @@ teardown() {
|
||||
dokku config:set my_app DATABASE_URL=postgres://user:pass@host:5432/db
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_POSTGRES_"
|
||||
assert_contains "${lines[*]}" "DOKKU_POSTGRES_AQUA_URL"
|
||||
assert_success
|
||||
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" m my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_POSTGRES_BLACK_URL"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" m my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -57,6 +87,7 @@ teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku docker-options my_app
|
||||
assert_contains "${lines[*]}" "--link dokku.postgres.l:dokku-postgres-l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -64,7 +95,25 @@ teardown() {
|
||||
dokku config:set my_app POSTGRES_DATABASE_SCHEME=postgres2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "postgres2://postgres:$password@dokku-postgres-l:5432/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) adds a querystring" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --querystring "pool=5"
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
assert_contains "$url" "?pool=5"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) uses a specified config url when alias is specified" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --alias "ALIAS"
|
||||
url=$(dokku config:get my_app ALIAS_URL)
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -2,35 +2,35 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) with no exposed ports, no linked apps" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:list"
|
||||
assert_contains "${lines[*]}" "l postgres:10.2 running - -"
|
||||
assert_contains "${lines[*]}" "l postgres:11.2 running - -"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) with exposed ports" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:expose" l 4242
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:list"
|
||||
assert_contains "${lines[*]}" "l postgres:10.2 running 5432->4242 -"
|
||||
assert_contains "${lines[*]}" "l postgres:11.2 running 5432->4242 -"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) with linked app" {
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:list"
|
||||
assert_contains "${lines[*]}" "l postgres:10.2 running - my_app"
|
||||
assert_contains "${lines[*]}" "l postgres:11.2 running - my_app"
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) when there are no services" {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:list"
|
||||
assert_contains "${lines[*]}" "There are no Postgres services"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
@@ -2,33 +2,41 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" not_existing_service
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when not tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
skip "This may fail if there is no log output"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l
|
||||
assert_output "docker logs --tail 100 testid"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
skip "This will hang as it waits for log output"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l -t
|
||||
assert_output "docker logs --follow testid"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
}
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the app argument is missing" {
|
||||
@@ -39,7 +39,7 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) changes DATABASE_URL" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
@@ -47,14 +47,14 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) creates new config url when needed" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_POSTGRES_"
|
||||
}
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) uses POSTGRES_DATABASE_SCHEME variable" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "POSTGRES_DATABASE_SCHEME=postgres2" "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres2://postgres:$password@dokku-postgres-l:5432/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:restart) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:restart"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:restart) error when service does not exist" {
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:start) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:start"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:start) error when service does not exist" {
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:stop) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:stop"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:stop) error when service does not exist" {
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unexpose) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:unexpose"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unexpose) error when service does not exist" {
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:unlink"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when the app argument is missing" {
|
||||
@@ -39,10 +39,9 @@ teardown() {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) removes link from docker-options" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
options=$(dokku docker-options my_app | xargs)
|
||||
check_value=""
|
||||
[[ "$(dokku version)" == "master" ]] && check_value="Deploy options: --restart=on-failure:10"
|
||||
[[ "$(at-least-version 0.7.0 "$(dokku version)")" == "true" ]] && check_value="Deploy options: --restart=on-failure:10"
|
||||
|
||||
check_value="Docker options build: Docker options deploy: --restart=on-failure:10 Docker options run:"
|
||||
options=$(dokku --quiet docker-options:report my_app | xargs)
|
||||
assert_equal "$options" "$check_value"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,34 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_helper.bash"
|
||||
|
||||
BIN_STUBS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin"
|
||||
|
||||
if [[ ! -d $DOKKU_ROOT ]]; then
|
||||
git clone https://github.com/progrium/dokku.git $DOKKU_ROOT > /dev/null
|
||||
set -eo pipefail
|
||||
[[ $TRACE ]] && set -x
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh
|
||||
if [[ "$DOKKU_VERSION" == "master" ]]; then
|
||||
sudo bash bootstrap.sh
|
||||
else
|
||||
sudo DOKKU_TAG="$DOKKU_VERSION" bash bootstrap.sh
|
||||
fi
|
||||
|
||||
cd $DOKKU_ROOT
|
||||
echo "Dokku version $DOKKU_VERSION"
|
||||
git checkout $DOKKU_VERSION > /dev/null
|
||||
if grep go-build Makefile > /dev/null; then
|
||||
mv "$BIN_STUBS/docker" "$BIN_STUBS/docker-stub"
|
||||
make go-build
|
||||
mv "$BIN_STUBS/docker-stub" "$BIN_STUBS/docker"
|
||||
fi
|
||||
cd -
|
||||
|
||||
export DOKKU_LIB_ROOT="/var/lib/dokku"
|
||||
export DOKKU_PLUGINS_ROOT="$DOKKU_LIB_ROOT/plugins/available"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
rm -rf $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX
|
||||
mkdir -p $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/scripts
|
||||
find ./ -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX \;
|
||||
find ./subcommands -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands \;
|
||||
find ./scripts -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/scripts \;
|
||||
echo "$DOKKU_VERSION" > $DOKKU_ROOT/VERSION
|
||||
|
||||
if [[ ! -f $BIN_STUBS/plugn ]]; then
|
||||
wget -O- "$PLUGN_URL" | tar xzf - -C "$BIN_STUBS"
|
||||
plugn init
|
||||
find "$DOKKU_ROOT/plugins" -mindepth 1 -maxdepth 1 -type d ! -name 'available' ! -name 'enabled' -exec ln -s {} "$DOKKU_ROOT/plugins/available" \;
|
||||
find "$DOKKU_ROOT/plugins" -mindepth 1 -maxdepth 1 -type d ! -name 'available' ! -name 'enabled' -exec ln -s {} "$DOKKU_ROOT/plugins/enabled" \;
|
||||
fi
|
||||
sudo rm -rf "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX"
|
||||
sudo mkdir -p "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/subcommands" "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/scripts"
|
||||
sudo find ./ -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" \;
|
||||
sudo find ./subcommands -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/subcommands" \;
|
||||
sudo find ./scripts -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/scripts" \;
|
||||
sudo mkdir -p "$PLUGIN_CONFIG_ROOT" "$PLUGIN_DATA_ROOT"
|
||||
sudo dokku plugin:enable "$PLUGIN_COMMAND_PREFIX"
|
||||
sudo dokku plugin:install
|
||||
|
||||
3
tests/shellcheck-exclude
Normal file
3
tests/shellcheck-exclude
Normal file
@@ -0,0 +1,3 @@
|
||||
# SC1090 - Can't follow non-constant source. Use a directive to specify location - https://github.com/koalaman/shellcheck/wiki/SC1090
|
||||
# SC2034 - Variable appears unused. Verify it or export it - https://github.com/koalaman/shellcheck/wiki/SC2034
|
||||
# SC2155 - Declare and assign separately to avoid masking return values - https://github.com/koalaman/shellcheck/wiki/SC2155
|
||||
205
tests/shellcheck-to-junit
Executable file
205
tests/shellcheck-to-junit
Executable file
@@ -0,0 +1,205 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import print_function
|
||||
import argparse
|
||||
import collections
|
||||
import datetime
|
||||
import re
|
||||
import socket
|
||||
import sys
|
||||
|
||||
from xml.etree import ElementTree
|
||||
|
||||
|
||||
def CDATA(text=None):
|
||||
element = ElementTree.Element('![CDATA[')
|
||||
element.text = text
|
||||
return element
|
||||
|
||||
|
||||
def _serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs):
|
||||
|
||||
if elem.tag == '![CDATA[':
|
||||
write("\n<{}{}]]>\n".format(elem.tag, elem.text))
|
||||
if elem.tail:
|
||||
write(ElementTree._escape_cdata(elem.tail))
|
||||
else:
|
||||
return ElementTree._original_serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs)
|
||||
|
||||
|
||||
ElementTree._original_serialize_xml = ElementTree._serialize_xml
|
||||
ElementTree._serialize_xml = ElementTree._serialize['xml'] = _serialize_xml
|
||||
|
||||
|
||||
def read_in():
|
||||
lines = sys.stdin.readlines()
|
||||
for i in range(len(lines)):
|
||||
lines[i] = lines[i].rstrip()
|
||||
return lines
|
||||
|
||||
|
||||
def process_lines(lines):
|
||||
files = {}
|
||||
current_file = None
|
||||
previous_line = None
|
||||
line_no = None
|
||||
new_issues = []
|
||||
code = None
|
||||
|
||||
RE_VIOLATION = re.compile(r"\^-- (SC[\w]+): (.*)")
|
||||
RE_VIOLATION_NEW = re.compile(r"\^[-]+\^ (SC[\w]+): (.*)")
|
||||
|
||||
for line in lines:
|
||||
# start a new block
|
||||
if line == '':
|
||||
if current_file is not None:
|
||||
file_data = files.get(current_file, {})
|
||||
files[current_file] = file_data
|
||||
|
||||
issue_data = file_data.get(line_no, {})
|
||||
issue_data['code'] = code
|
||||
files[current_file][line_no] = issue_data
|
||||
|
||||
issues = issue_data.get('issues', [])
|
||||
issues.extend(new_issues)
|
||||
issue_data['issues'] = issues
|
||||
|
||||
files[current_file][line_no] = issue_data
|
||||
|
||||
code = None
|
||||
current_file = None
|
||||
line_no = None
|
||||
elif line.startswith('In ./') and not previous_line:
|
||||
current_file = line.split(' ')[1].replace('./', '')
|
||||
line_no = line.split(' ')[3]
|
||||
new_issues = []
|
||||
code = None
|
||||
elif code is None and len(new_issues) == 0:
|
||||
code = line
|
||||
else:
|
||||
match = RE_VIOLATION.match(line.strip())
|
||||
if not match:
|
||||
match = RE_VIOLATION_NEW.match(line.strip())
|
||||
|
||||
if not match:
|
||||
if 'https://www.shellcheck.net/wiki/SC' in line:
|
||||
continue
|
||||
if 'For more information:' == line:
|
||||
continue
|
||||
print('Error: Issue parsing line "{0}"'.format(line.strip()))
|
||||
else:
|
||||
new_issues.append({
|
||||
'shellcheck_id': match.group(1),
|
||||
'message': match.group(2),
|
||||
'original_message': line
|
||||
})
|
||||
|
||||
previous_line = line
|
||||
|
||||
return files
|
||||
|
||||
|
||||
def output_junit(files, args):
|
||||
timestamp = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
failures = 0
|
||||
for file, data in files.items():
|
||||
for line, issue_data in data.items():
|
||||
code = issue_data.get('code')
|
||||
for issue in issue_data.get('issues', []):
|
||||
failures += 1
|
||||
|
||||
tests = 0
|
||||
if args.files:
|
||||
with open(args.files, 'r') as f:
|
||||
tests = len(f.readlines())
|
||||
|
||||
root = ElementTree.Element("testsuite",
|
||||
name="shellcheck",
|
||||
tests="{0}".format(tests),
|
||||
failures="{0}".format(failures),
|
||||
errors="0",
|
||||
skipped="0",
|
||||
timestamp=timestamp,
|
||||
time="0",
|
||||
hostname=socket.gethostname())
|
||||
|
||||
properties = ElementTree.SubElement(root, "properties")
|
||||
if args.exclude:
|
||||
ElementTree.SubElement(properties,
|
||||
"property",
|
||||
name="exclude",
|
||||
value=args.exclude)
|
||||
|
||||
if args.files:
|
||||
with open(args.files, 'r') as f:
|
||||
lines = f.readlines()
|
||||
for i in range(len(lines)):
|
||||
file = lines[i].rstrip().replace('./', '')
|
||||
data = files.get(file, None)
|
||||
if data:
|
||||
for line, issue_data in data.items():
|
||||
code = issue_data.get('code')
|
||||
for issue in issue_data.get('issues', []):
|
||||
testcase = ElementTree.SubElement(root,
|
||||
"testcase",
|
||||
classname=file,
|
||||
name=file,
|
||||
time="0")
|
||||
shellcheck_id = issue.get('shellcheck_id')
|
||||
message = 'line {0}: {1}'.format(
|
||||
line, issue.get('message'))
|
||||
original_message = issue.get('original_message')
|
||||
e = ElementTree.Element("failure",
|
||||
type=shellcheck_id,
|
||||
message=message)
|
||||
cdata = CDATA("\n".join([code, original_message]))
|
||||
e.append(cdata)
|
||||
testcase.append(e)
|
||||
ElementTree.SubElement(root,
|
||||
"testcase",
|
||||
classname=file,
|
||||
name=file,
|
||||
time="0")
|
||||
|
||||
ElementTree.SubElement(root, "system-out")
|
||||
ElementTree.SubElement(root, "system-err")
|
||||
|
||||
content = ElementTree.tostring(root, encoding='UTF-8', method='xml')
|
||||
if args.output:
|
||||
with open(args.output, 'w') as f:
|
||||
try:
|
||||
f.write(content)
|
||||
except TypeError:
|
||||
f.write(content.decode("utf-8"))
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Process shellcheck output to junit.')
|
||||
parser.add_argument('--output',
|
||||
dest='output',
|
||||
action='store',
|
||||
default=None,
|
||||
help='file to write shellcheck output')
|
||||
parser.add_argument('--files',
|
||||
dest='files',
|
||||
action='store',
|
||||
default=None,
|
||||
help='a file containing a list of all files processed by shellcheck')
|
||||
parser.add_argument('--exclude',
|
||||
dest='exclude',
|
||||
action='store',
|
||||
default=None,
|
||||
help='a comma-separated list of rules being excluded by shellcheck')
|
||||
args = parser.parse_args()
|
||||
|
||||
lines = read_in()
|
||||
files = process_lines(lines)
|
||||
files = collections.OrderedDict(sorted(files.items()))
|
||||
output_junit(files, args)
|
||||
for line in lines:
|
||||
print(line)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
51
tests/test_helper.bash
Normal file → Executable file
51
tests/test_helper.bash
Normal file → Executable file
@@ -1,32 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
export DOKKU_QUIET_OUTPUT=1
|
||||
export DOKKU_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku"
|
||||
export DOKKU_VERSION=${DOKKU_VERSION:-"master"}
|
||||
export PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin:$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku:$PATH"
|
||||
export PLUGIN_COMMAND_PREFIX="postgres"
|
||||
export PLUGIN_PATH="$DOKKU_ROOT/plugins"
|
||||
export PLUGIN_ENABLED_PATH="$PLUGIN_PATH"
|
||||
export PLUGIN_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export PLUGIN_CORE_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export POSTGRES_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/fixtures"
|
||||
export PLUGIN_DATA_ROOT="$POSTGRES_ROOT"
|
||||
export PLUGIN_CONFIG_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
export DOKKU_LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib-root"
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_darwin_x86_64.tgz"
|
||||
else
|
||||
export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_linux_x86_64.tgz"
|
||||
fi
|
||||
|
||||
mkdir -p "$PLUGIN_DATA_ROOT"
|
||||
rm -rf "${PLUGIN_DATA_ROOT:?}"/*
|
||||
|
||||
mkdir -p "$PLUGIN_CONFIG_ROOT"
|
||||
rm -rf "${PLUGIN_CONFIG_ROOT:?}"/*
|
||||
export DOKKU_LIB_ROOT="/var/lib/dokku"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
|
||||
flunk() {
|
||||
{ if [ "$#" -eq 0 ]; then cat -
|
||||
else echo "$*"
|
||||
{
|
||||
if [ "$#" -eq 0 ]; then
|
||||
cat -
|
||||
else
|
||||
echo "$*"
|
||||
fi
|
||||
}
|
||||
return 1
|
||||
@@ -34,16 +15,22 @@ flunk() {
|
||||
|
||||
assert_equal() {
|
||||
if [ "$1" != "$2" ]; then
|
||||
{ echo "expected: $1"
|
||||
{
|
||||
echo "expected: $1"
|
||||
echo "actual: $2"
|
||||
} | flunk
|
||||
fi
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $status from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_exit_status() {
|
||||
assert_equal "$status" "$1"
|
||||
assert_equal "$1" "$status"
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $status from Bats
|
||||
# shellcheck disable=SC2154
|
||||
# shellcheck disable=SC2120
|
||||
assert_success() {
|
||||
if [ "$status" -ne 0 ]; then
|
||||
flunk "command failed with exit status $status"
|
||||
@@ -72,10 +59,14 @@ assert_contains() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $output from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_output() {
|
||||
local expected
|
||||
if [ $# -eq 0 ]; then expected="$(cat -)"
|
||||
else expected="$1"
|
||||
if [ $# -eq 0 ]; then
|
||||
expected="$(cat -)"
|
||||
else
|
||||
expected="$1"
|
||||
fi
|
||||
assert_equal "$expected" "$output"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user