Compare commits

..

11 Commits
0.4.0 ... 0.4.1

Author SHA1 Message Date
3wc
73e5e64b9a Bump version 2020-12-27 21:45:37 +02:00
3f9b4477cd Swap args around 2020-12-27 13:11:22 +01:00
3wc
412729aac9 Fix calling logs with no arguments
Closes #31
2020-12-27 12:23:16 +02:00
3wc
8022a2cb41 Add cheeky network command 2020-12-27 12:07:10 +02:00
3wc
35182ed260 Get both .. volume .. and custom commands working 2020-12-27 12:07:10 +02:00
3wc
d90c6ef361 Add --no-tty option to app run 2020-12-27 12:07:10 +02:00
3wc
40ca8dfe93 Add --server filter to app list..
.. and add `server <host> apps` as an alias.
2020-12-27 12:07:10 +02:00
3wc
7f009f927b Fix app ls --status
Closes #35
2020-12-27 12:06:39 +02:00
3wc
e222f4152b Pin kcov version 2020-12-24 01:07:01 +02:00
3wc
893150cdd9 Pin shellcheck version 2020-12-24 00:55:57 +02:00
3wc
61126f16e1 Update installer 2020-12-24 00:50:50 +02:00
4 changed files with 119 additions and 88 deletions

View File

@ -3,7 +3,7 @@ kind: pipeline
name: linters name: linters
steps: steps:
- name: run shellcheck - name: run shellcheck
image: koalaman/shellcheck-alpine:latest image: koalaman/shellcheck-alpine:v0.7.1
commands: commands:
- shellcheck abra - shellcheck abra
@ -15,9 +15,9 @@ steps:
- name: collect code coverage - name: collect code coverage
failure: ignore # until we fix this failure: ignore # until we fix this
image: kcov/kcov:latest image: kcov/kcov:38
commands: commands:
- apk add bats git bash - apt update && apt install -y bats git bash
- kcov . bats tests || true - kcov . bats tests || true
- name: send code coverage report to codecov - name: send code coverage report to codecov

195
abra
View File

@ -12,7 +12,7 @@ The cooperative cloud utility belt 🎩🐇
Usage: Usage:
abra [options] app new [--server=<server>] [--domain=<domain>] [--pass] [--auto] <app> abra [options] app new [--server=<server>] [--domain=<domain>] [--pass] [--auto] <app>
abra [options] app (list|ls) [--status] abra [options] app (list|ls) [--status] [--server=<server>]
abra [options] app <domain> deploy abra [options] app <domain> deploy
abra [options] app <domain> undeploy abra [options] app <domain> undeploy
abra [options] app <domain> config abra [options] app <domain> config
@ -22,18 +22,19 @@ Usage:
abra [options] app <domain> cp <src> <dst> abra [options] app <domain> cp <src> <dst>
abra [options] app <domain> check abra [options] app <domain> check
abra [options] app <domain> ps abra [options] app <domain> ps
abra [options] app <domain> run [--user=<user>] <service> <args>... abra [options] app <domain> run [--no-tty] [--user=<user>] <service> <args>...
abra [options] app <domain> run <service> <args>... abra [options] app <domain> run <service> <args>...
abra [options] app <domain> secret auto [--pass] abra [options] app <domain> secret auto [--pass]
abra [options] app <domain> secret generate <secret> <version> [<cmd>] [--pass] abra [options] app <domain> secret generate <secret> <version> [<cmd>] [--pass]
abra [options] app <domain> secret insert <secret> <version> <data> [--pass] abra [options] app <domain> secret insert <secret> <version> <data> [--pass]
abra [options] app <domain> secret (delete|rm) (<secret>|--all) [--pass] [--force] abra [options] app <domain> secret (delete|rm) (<secret>|--all) [--pass] [--force]
abra [options] app <domain> <command> [<arg>] abra [options] app <domain> <command> [<args>...]
abra [options] server add <host> [<user>] [<port>] abra [options] server add <host> [<user>] [<port>]
abra [options] server (list|ls) abra [options] server (list|ls)
abra [options] server rm <host> abra [options] server <host> rm
abra [options] server use <host> abra [options] server <host> use
abra [options] server init <host> abra [options] server <host> init
abra [options] server <host> apps [--status]
abra [options] upgrade abra [options] upgrade
Options: Options:
@ -144,19 +145,20 @@ eval "var_$1+=($value)"; else eval "var_$1=$value"; fi; return 0; fi; done
return 1; }; stdout() { printf -- "cat <<'EOM'\n%s\nEOM\n" "$1"; }; stderr() { return 1; }; stdout() { printf -- "cat <<'EOM'\n%s\nEOM\n" "$1"; }; stderr() {
printf -- "cat <<'EOM' >&2\n%s\nEOM\n" "$1"; }; error() { printf -- "cat <<'EOM' >&2\n%s\nEOM\n" "$1"; }; error() {
[[ -n $1 ]] && stderr "$1"; stderr "$usage"; _return 1; }; _return() { [[ -n $1 ]] && stderr "$1"; stderr "$usage"; _return 1; }; _return() {
printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:1497} printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:1579}
usage=${DOC:40:1189}; digest=feaba; shorts=(-e -v -h -s '' '' '' '' '' '' '' '') usage=${DOC:40:1271}; digest=974cf
longs=(--env --version --help --stack --server --domain --pass --auto --status --force --user --all) shorts=(-h -e -s -v '' '' '' '' '' '' '' '' '')
argcounts=(1 0 0 1 1 1 0 0 0 0 1 0); node_0(){ value __env 0; }; node_1(){ longs=(--help --env --stack --version --server --domain --pass --auto --status --force --no-tty --user --all)
switch __version 1; }; node_2(){ switch __help 2; }; node_3(){ value __stack 3 argcounts=(0 1 1 0 1 1 0 0 0 0 0 1 0); node_0(){ switch __help 0; }; node_1(){
}; node_4(){ value __server 4; }; node_5(){ value __domain 5; }; node_6(){ value __env 1; }; node_2(){ value __stack 2; }; node_3(){ switch __version 3; }
node_4(){ value __server 4; }; node_5(){ value __domain 5; }; node_6(){
switch __pass 6; }; node_7(){ switch __auto 7; }; node_8(){ switch __status 8; } switch __pass 6; }; node_7(){ switch __auto 7; }; node_8(){ switch __status 8; }
node_9(){ switch __force 9; }; node_10(){ value __user 10; }; node_11(){ node_9(){ switch __force 9; }; node_10(){ switch __no_tty 10; }; node_11(){
switch __all 11; }; node_12(){ value _app_ a; }; node_13(){ value _domain_ a; } value __user 11; }; node_12(){ switch __all 12; }; node_13(){ value _app_ a; }
node_14(){ value _service_ a; }; node_15(){ value _src_ a; }; node_16(){ node_14(){ value _domain_ a; }; node_15(){ value _service_ a; }; node_16(){
value _dst_ a; }; node_17(){ value _args_ a true; }; node_18(){ value _secret_ a value _src_ a; }; node_17(){ value _dst_ a; }; node_18(){ value _args_ a true; }
}; node_19(){ value _version_ a; }; node_20(){ value _cmd_ a; }; node_21(){ node_19(){ value _secret_ a; }; node_20(){ value _version_ a; }; node_21(){
value _data_ a; }; node_22(){ value _command_ a; }; node_23(){ value _arg_ a; } value _cmd_ a; }; node_22(){ value _data_ a; }; node_23(){ value _command_ a; }
node_24(){ value _host_ a; }; node_25(){ value _user_ a; }; node_26(){ node_24(){ value _host_ a; }; node_25(){ value _user_ a; }; node_26(){
value _port_ a; }; node_27(){ _command app; }; node_28(){ _command new; } value _port_ a; }; node_27(){ _command app; }; node_28(){ _command new; }
node_29(){ _command list; }; node_30(){ _command ls; }; node_31(){ node_29(){ _command list; }; node_30(){ _command ls; }; node_31(){
@ -167,62 +169,64 @@ node_39(){ _command check; }; node_40(){ _command ps; }; node_41(){ _command run
}; node_42(){ _command secret; }; node_43(){ _command auto; }; node_44(){ }; node_42(){ _command secret; }; node_43(){ _command auto; }; node_44(){
_command generate; }; node_45(){ _command insert; }; node_46(){ _command server _command generate; }; node_45(){ _command insert; }; node_46(){ _command server
}; node_47(){ _command add; }; node_48(){ _command use; }; node_49(){ }; node_47(){ _command add; }; node_48(){ _command use; }; node_49(){
_command init; }; node_50(){ _command upgrade; }; node_51(){ optional 0 1 2 3; } _command init; }; node_50(){ _command apps; }; node_51(){ _command upgrade; }
node_52(){ optional 51; }; node_53(){ optional 4; }; node_54(){ optional 5; } node_52(){ optional 0 1 2 3; }; node_53(){ optional 52; }; node_54(){ optional 4
node_55(){ optional 6; }; node_56(){ optional 7; }; node_57(){ }; node_55(){ optional 5; }; node_56(){ optional 6; }; node_57(){ optional 7; }
required 52 27 28 53 54 55 56 12; }; node_58(){ either 29 30; }; node_59(){ node_58(){ required 53 27 28 54 55 56 57 13; }; node_59(){ either 29 30; }
required 58; }; node_60(){ optional 8; }; node_61(){ required 52 27 59 60; } node_60(){ required 59; }; node_61(){ optional 8; }; node_62(){
node_62(){ required 52 27 13 31; }; node_63(){ required 52 27 13 32; } required 53 27 60 61 54; }; node_63(){ required 53 27 14 31; }; node_64(){
node_64(){ required 52 27 13 33; }; node_65(){ either 34 35; }; node_66(){ required 53 27 14 32; }; node_65(){ required 53 27 14 33; }; node_66(){
required 65; }; node_67(){ optional 9; }; node_68(){ required 52 27 13 66 67; } either 34 35; }; node_67(){ required 66; }; node_68(){ optional 9; }; node_69(){
node_69(){ optional 14; }; node_70(){ required 52 27 13 36 69; }; node_71(){ required 53 27 14 67 68; }; node_70(){ optional 15; }; node_71(){
required 52 27 13 37; }; node_72(){ required 52 27 13 38 15 16; }; node_73(){ required 53 27 14 36 70; }; node_72(){ required 53 27 14 37; }; node_73(){
required 52 27 13 39; }; node_74(){ required 52 27 13 40; }; node_75(){ required 53 27 14 38 16 17; }; node_74(){ required 53 27 14 39; }; node_75(){
optional 10; }; node_76(){ oneormore 17; }; node_77(){ required 53 27 14 40; }; node_76(){ optional 10; }; node_77(){ optional 11; }
required 52 27 13 41 75 14 76; }; node_78(){ required 52 27 13 41 14 76; } node_78(){ oneormore 18; }; node_79(){ required 53 27 14 41 76 77 15 78; }
node_79(){ required 52 27 13 42 43 55; }; node_80(){ optional 20; }; node_81(){ node_80(){ required 53 27 14 41 15 78; }; node_81(){ required 53 27 14 42 43 56
required 52 27 13 42 44 18 19 80 55; }; node_82(){ }; node_82(){ optional 21; }; node_83(){ required 53 27 14 42 44 19 20 82 56; }
required 52 27 13 42 45 18 19 21 55; }; node_83(){ either 18 11; }; node_84(){ node_84(){ required 53 27 14 42 45 19 20 22 56; }; node_85(){ either 19 12; }
required 83; }; node_85(){ required 52 27 13 42 66 84 55 67; }; node_86(){ node_86(){ required 85; }; node_87(){ required 53 27 14 42 67 86 56 68; }
optional 23; }; node_87(){ required 52 27 13 22 86; }; node_88(){ optional 25; } node_88(){ optional 78; }; node_89(){ required 53 27 14 23 88; }; node_90(){
node_89(){ optional 26; }; node_90(){ required 52 46 47 24 88 89; }; node_91(){ optional 25; }; node_91(){ optional 26; }; node_92(){ required 53 46 47 24 90 91
required 52 46 59; }; node_92(){ required 52 46 35 24; }; node_93(){ }; node_93(){ required 53 46 60; }; node_94(){ required 53 46 24 35; }
required 52 46 48 24; }; node_94(){ required 52 46 49 24; }; node_95(){ node_95(){ required 53 46 24 48; }; node_96(){ required 53 46 24 49; }
required 52 50; }; node_96(){ node_97(){ required 53 46 24 50 61; }; node_98(){ required 53 51; }; node_99(){
either 57 61 62 63 64 68 70 71 72 73 74 77 78 79 81 82 85 87 90 91 92 93 94 95 either 58 62 63 64 65 69 71 72 73 74 75 79 80 81 83 84 87 89 92 93 94 95 96 97 98
}; node_97(){ required 96; }; cat <<<' docopt_exit() { }; node_100(){ required 99; }; cat <<<' docopt_exit() {
[[ -n $1 ]] && printf "%s\n" "$1" >&2; printf "%s\n" "${DOC:40:1189}" >&2 [[ -n $1 ]] && printf "%s\n" "$1" >&2; printf "%s\n" "${DOC:40:1271}" >&2
exit 1; }'; unset var___env var___version var___help var___stack var___server \ exit 1; }'; unset var___help var___env var___stack var___version var___server \
var___domain var___pass var___auto var___status var___force var___user \ var___domain var___pass var___auto var___status var___force var___no_tty \
var___all var__app_ var__domain_ var__service_ var__src_ var__dst_ var__args_ \ var___user var___all var__app_ var__domain_ var__service_ var__src_ var__dst_ \
var__secret_ var__version_ var__cmd_ var__data_ var__command_ var__arg_ \ var__args_ var__secret_ var__version_ var__cmd_ var__data_ var__command_ \
var__host_ var__user_ var__port_ var_app var_new var_list var_ls var_deploy \ var__host_ var__user_ var__port_ var_app var_new var_list var_ls var_deploy \
var_undeploy var_config var_delete var_rm var_logs var_multilogs var_cp \ var_undeploy var_config var_delete var_rm var_logs var_multilogs var_cp \
var_check var_ps var_run var_secret var_auto var_generate var_insert \ var_check var_ps var_run var_secret var_auto var_generate var_insert \
var_server var_add var_use var_init var_upgrade; parse 97 "$@" var_server var_add var_use var_init var_apps var_upgrade; parse 100 "$@"
local prefix=${DOCOPT_PREFIX:-''}; unset "${prefix}__env" "${prefix}__version" \ local prefix=${DOCOPT_PREFIX:-''}; unset "${prefix}__help" "${prefix}__env" \
"${prefix}__help" "${prefix}__stack" "${prefix}__server" "${prefix}__domain" \ "${prefix}__stack" "${prefix}__version" "${prefix}__server" \
"${prefix}__pass" "${prefix}__auto" "${prefix}__status" "${prefix}__force" \ "${prefix}__domain" "${prefix}__pass" "${prefix}__auto" "${prefix}__status" \
"${prefix}__user" "${prefix}__all" "${prefix}_app_" "${prefix}_domain_" \ "${prefix}__force" "${prefix}__no_tty" "${prefix}__user" "${prefix}__all" \
"${prefix}_service_" "${prefix}_src_" "${prefix}_dst_" "${prefix}_args_" \ "${prefix}_app_" "${prefix}_domain_" "${prefix}_service_" "${prefix}_src_" \
"${prefix}_secret_" "${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" \ "${prefix}_dst_" "${prefix}_args_" "${prefix}_secret_" "${prefix}_version_" \
"${prefix}_command_" "${prefix}_arg_" "${prefix}_host_" "${prefix}_user_" \ "${prefix}_cmd_" "${prefix}_data_" "${prefix}_command_" "${prefix}_host_" \
"${prefix}_port_" "${prefix}app" "${prefix}new" "${prefix}list" "${prefix}ls" \ "${prefix}_user_" "${prefix}_port_" "${prefix}app" "${prefix}new" \
"${prefix}deploy" "${prefix}undeploy" "${prefix}config" "${prefix}delete" \ "${prefix}list" "${prefix}ls" "${prefix}deploy" "${prefix}undeploy" \
"${prefix}rm" "${prefix}logs" "${prefix}multilogs" "${prefix}cp" \ "${prefix}config" "${prefix}delete" "${prefix}rm" "${prefix}logs" \
"${prefix}check" "${prefix}ps" "${prefix}run" "${prefix}secret" \ "${prefix}multilogs" "${prefix}cp" "${prefix}check" "${prefix}ps" \
"${prefix}auto" "${prefix}generate" "${prefix}insert" "${prefix}server" \ "${prefix}run" "${prefix}secret" "${prefix}auto" "${prefix}generate" \
"${prefix}add" "${prefix}use" "${prefix}init" "${prefix}upgrade" "${prefix}insert" "${prefix}server" "${prefix}add" "${prefix}use" \
eval "${prefix}"'__env=${var___env:-}' "${prefix}init" "${prefix}apps" "${prefix}upgrade"
eval "${prefix}"'__version=${var___version:-false}'
eval "${prefix}"'__help=${var___help:-false}' eval "${prefix}"'__help=${var___help:-false}'
eval "${prefix}"'__env=${var___env:-}'
eval "${prefix}"'__stack=${var___stack:-}' eval "${prefix}"'__stack=${var___stack:-}'
eval "${prefix}"'__version=${var___version:-false}'
eval "${prefix}"'__server=${var___server:-}' eval "${prefix}"'__server=${var___server:-}'
eval "${prefix}"'__domain=${var___domain:-}' eval "${prefix}"'__domain=${var___domain:-}'
eval "${prefix}"'__pass=${var___pass:-false}' eval "${prefix}"'__pass=${var___pass:-false}'
eval "${prefix}"'__auto=${var___auto:-false}' eval "${prefix}"'__auto=${var___auto:-false}'
eval "${prefix}"'__status=${var___status:-false}' eval "${prefix}"'__status=${var___status:-false}'
eval "${prefix}"'__force=${var___force:-false}' eval "${prefix}"'__force=${var___force:-false}'
eval "${prefix}"'__no_tty=${var___no_tty:-false}'
eval "${prefix}"'__user=${var___user:-}' eval "${prefix}"'__user=${var___user:-}'
eval "${prefix}"'__all=${var___all:-false}' eval "${prefix}"'__all=${var___all:-false}'
eval "${prefix}"'_app_=${var__app_:-}' eval "${prefix}"'_app_=${var__app_:-}'
@ -235,7 +239,7 @@ fi; eval "${prefix}"'_secret_=${var__secret_:-}'
eval "${prefix}"'_version_=${var__version_:-}' eval "${prefix}"'_version_=${var__version_:-}'
eval "${prefix}"'_cmd_=${var__cmd_:-}'; eval "${prefix}"'_data_=${var__data_:-}' eval "${prefix}"'_cmd_=${var__cmd_:-}'; eval "${prefix}"'_data_=${var__data_:-}'
eval "${prefix}"'_command_=${var__command_:-}' eval "${prefix}"'_command_=${var__command_:-}'
eval "${prefix}"'_arg_=${var__arg_:-}'; eval "${prefix}"'_host_=${var__host_:-}' eval "${prefix}"'_host_=${var__host_:-}'
eval "${prefix}"'_user_=${var__user_:-}' eval "${prefix}"'_user_=${var__user_:-}'
eval "${prefix}"'_port_=${var__port_:-}' eval "${prefix}"'_port_=${var__port_:-}'
eval "${prefix}"'app=${var_app:-false}'; eval "${prefix}"'new=${var_new:-false}' eval "${prefix}"'app=${var_app:-false}'; eval "${prefix}"'new=${var_new:-false}'
@ -256,21 +260,22 @@ eval "${prefix}"'insert=${var_insert:-false}'
eval "${prefix}"'server=${var_server:-false}' eval "${prefix}"'server=${var_server:-false}'
eval "${prefix}"'add=${var_add:-false}'; eval "${prefix}"'use=${var_use:-false}' eval "${prefix}"'add=${var_add:-false}'; eval "${prefix}"'use=${var_use:-false}'
eval "${prefix}"'init=${var_init:-false}' eval "${prefix}"'init=${var_init:-false}'
eval "${prefix}"'apps=${var_apps:-false}'
eval "${prefix}"'upgrade=${var_upgrade:-false}'; local docopt_i=1 eval "${prefix}"'upgrade=${var_upgrade:-false}'; local docopt_i=1
[[ $BASH_VERSION =~ ^4.3 ]] && docopt_i=2; for ((;docopt_i>0;docopt_i--)); do [[ $BASH_VERSION =~ ^4.3 ]] && docopt_i=2; for ((;docopt_i>0;docopt_i--)); do
declare -p "${prefix}__env" "${prefix}__version" "${prefix}__help" \ declare -p "${prefix}__help" "${prefix}__env" "${prefix}__stack" \
"${prefix}__stack" "${prefix}__server" "${prefix}__domain" "${prefix}__pass" \ "${prefix}__version" "${prefix}__server" "${prefix}__domain" "${prefix}__pass" \
"${prefix}__auto" "${prefix}__status" "${prefix}__force" "${prefix}__user" \ "${prefix}__auto" "${prefix}__status" "${prefix}__force" "${prefix}__no_tty" \
"${prefix}__all" "${prefix}_app_" "${prefix}_domain_" "${prefix}_service_" \ "${prefix}__user" "${prefix}__all" "${prefix}_app_" "${prefix}_domain_" \
"${prefix}_src_" "${prefix}_dst_" "${prefix}_args_" "${prefix}_secret_" \ "${prefix}_service_" "${prefix}_src_" "${prefix}_dst_" "${prefix}_args_" \
"${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" "${prefix}_command_" \ "${prefix}_secret_" "${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" \
"${prefix}_arg_" "${prefix}_host_" "${prefix}_user_" "${prefix}_port_" \ "${prefix}_command_" "${prefix}_host_" "${prefix}_user_" "${prefix}_port_" \
"${prefix}app" "${prefix}new" "${prefix}list" "${prefix}ls" "${prefix}deploy" \ "${prefix}app" "${prefix}new" "${prefix}list" "${prefix}ls" "${prefix}deploy" \
"${prefix}undeploy" "${prefix}config" "${prefix}delete" "${prefix}rm" \ "${prefix}undeploy" "${prefix}config" "${prefix}delete" "${prefix}rm" \
"${prefix}logs" "${prefix}multilogs" "${prefix}cp" "${prefix}check" \ "${prefix}logs" "${prefix}multilogs" "${prefix}cp" "${prefix}check" \
"${prefix}ps" "${prefix}run" "${prefix}secret" "${prefix}auto" \ "${prefix}ps" "${prefix}run" "${prefix}secret" "${prefix}auto" \
"${prefix}generate" "${prefix}insert" "${prefix}server" "${prefix}add" \ "${prefix}generate" "${prefix}insert" "${prefix}server" "${prefix}add" \
"${prefix}use" "${prefix}init" "${prefix}upgrade"; done; } "${prefix}use" "${prefix}init" "${prefix}apps" "${prefix}upgrade"; done; }
# docopt parser above, complete command for generating this parser is `docopt.sh abra` # docopt parser above, complete command for generating this parser is `docopt.sh abra`
PROGRAM_NAME=$(basename "$0") PROGRAM_NAME=$(basename "$0")
@ -458,19 +463,28 @@ sub_app_ls (){
} }
sub_app_list (){ sub_app_list (){
SERVER="$abra___server"
if [ -z "$SERVER" ]; then
SERVER='*'
fi
shopt -s nullglob dotglob shopt -s nullglob dotglob
# shellcheck disable=SC2206 # shellcheck disable=SC2206
ENV_FILES=($ABRA_DIR/servers/*/*.env) ENV_FILES=($ABRA_DIR/servers/$SERVER/*.env)
shopt -u nullglob dotglob shopt -u nullglob dotglob
STATUS="$( [[ $abra___status == "true" ]] && echo "Y" )" STATUS="$( [[ $abra___status == "true" ]] && echo "Y" )"
if [ -n "$STATUS" ]; then if [ -n "$STATUS" ]; then
get_servers if [ -z "$SERVER" ]; then
get_servers
else
SERVERS=( "$SERVER" )
fi
local -a DEPLOYED_APPS # array local -a DEPLOYED_APPS # array
warning "Loading status from ${#SERVERS[@]} servers, patience advised.." warning "Loading status from ${#SERVERS[@]} server(s), patience advised.."
for SERVER in "${SERVERS[@]}"; do for SERVER in "${SERVERS[@]}"; do
SERVER="${SERVER##*/}" # basename SERVER="${SERVER##*/}" # basename
@ -480,8 +494,6 @@ sub_app_list (){
done done
fi fi
printf '%s\n' "${DEPLOYED_APPS[@]}"
printf "%s lovely apps:\n\n" "${#ENV_FILES[@]}" printf "%s lovely apps:\n\n" "${#ENV_FILES[@]}"
for i in "${!ENV_FILES[@]}"; do for i in "${!ENV_FILES[@]}"; do
@ -502,7 +514,7 @@ sub_app_list (){
APP="$(source "$ENV_FILE" && echo "$APP")" APP="$(source "$ENV_FILE" && echo "$APP")"
# shellcheck disable=SC1090 # shellcheck disable=SC1090
APP_STACK_NAME="$(source "$ENV_FILE" && echo "$STACK_NAME")" APP_STACK_NAME="$(source "$ENV_FILE" && echo "$STACK_NAME")"
if [ -z "$STACK_NAME" ]; then if [ -z "$APP_STACK_NAME" ]; then
APP_STACK_NAME="${DOMAIN//./_}" APP_STACK_NAME="${DOMAIN//./_}"
fi fi
if [ -n "$STATUS" ]; then if [ -n "$STATUS" ]; then
@ -790,6 +802,12 @@ sub_app_run(){
RUN_USER="-u $abra___user" RUN_USER="-u $abra___user"
fi fi
if [ "$abra___no_tty" = "true" ]; then
ARGS="-i"
else
ARGS="-it"
fi
CONTAINER=$(docker container ls --format "table {{.ID}},{{.Names}}" \ CONTAINER=$(docker container ls --format "table {{.ID}},{{.Names}}" \
| grep "${STACK_NAME}_${abra__service_}" | head -n1 | cut -d',' -f1) | grep "${STACK_NAME}_${abra__service_}" | head -n1 | cut -d',' -f1)
@ -801,7 +819,7 @@ sub_app_run(){
# 3wc: we want the "splitting" that shellcheck warns us about, so that -u and # 3wc: we want the "splitting" that shellcheck warns us about, so that -u and
# $RUN_USER aren't treated as a single argument: # $RUN_USER aren't treated as a single argument:
# shellcheck disable=SC2086 # shellcheck disable=SC2086
docker exec $RUN_USER -it "$CONTAINER" "$@" docker exec $RUN_USER $ARGS "$CONTAINER" "$@"
return return
} }
@ -837,6 +855,7 @@ sub_app_logs (){
if [ -z "$SERVICE" ]; then if [ -z "$SERVICE" ]; then
warning "No \$SERVICE provided, running multilogs" warning "No \$SERVICE provided, running multilogs"
sub_app_multilogs sub_app_multilogs
return
fi fi
shift shift
@ -955,6 +974,12 @@ sub_server_use() {
docker context use "$abra__host_" docker context use "$abra__host_"
} }
###### .. server <host> apps
sub_server_apps() {
abra___server="$abra__host_"
sub_app_list
}
####################################### #######################################
# Misc commands # Misc commands
####################################### #######################################
@ -964,18 +989,24 @@ sub_upgrade() {
curl https://install.abra.autonomic.zone | bash curl https://install.abra.autonomic.zone | bash
} }
###### .. volume <args>... ###### .. stack <args>...
sub_stack() { sub_stack() {
# shellcheck disable=SC2068 # shellcheck disable=SC2068
docker stack $@ docker stack $@
} }
###### .. stack <args>... ###### .. volume <args>...
sub_volume() { sub_volume() {
# shellcheck disable=SC2068 # shellcheck disable=SC2068
docker volume $@ docker volume $@
} }
###### .. network <args>...
sub_network() {
# shellcheck disable=SC2068
docker network $@
}
####################################### #######################################
# Main # Main
####################################### #######################################
@ -987,7 +1018,7 @@ abra() {
abra__secret_ abra__version_ abra__data_ abra___user abra__host_ \ abra__secret_ abra__version_ abra__data_ abra___user abra__host_ \
abra__app_ abra__port_ abra__user_ abra__service_ abra__src_ abra__dst_ \ abra__app_ abra__port_ abra__user_ abra__service_ abra__src_ abra__dst_ \
abra__domain_ abra___server abra___domain abra___force abra___pass \ abra__domain_ abra___server abra___domain abra___force abra___pass \
abra___auto abra___status abra___auto abra___status abra___no_tty
if ! type tput > /dev/null 2>&1; then if ! type tput > /dev/null 2>&1; then
tput() { tput() {

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
ABRA_VERSION="0.3.1" ABRA_VERSION="0.4.1"
ABRA_SRC="https://git.autonomic.zone/coop-cloud/abra/raw/tag/$ABRA_VERSION/abra" ABRA_SRC="https://git.autonomic.zone/coop-cloud/abra/raw/tag/$ABRA_VERSION/abra"
function install_abra { function install_abra {

View File

@ -13,11 +13,11 @@ teardown() {
./abra server add swarm.test.com ./abra server add swarm.test.com
docker context ls | grep swarm.test.com docker context ls | grep swarm.test.com
[ -d ~/.abra/servers/swarm.test.com ] [ -d ~/.abra/servers/swarm.test.com ]
./abra server rm swarm.test.com ./abra server swarm.test.com rm
./abra server add swarm.test.com foobar 12345 ./abra server add swarm.test.com foobar 12345
[ -d ~/.abra/servers/swarm.test.com ] [ -d ~/.abra/servers/swarm.test.com ]
./abra server rm swarm.test.com ./abra server swarm.test.com rm
} }
@test "abra app new/rm works" { @test "abra app new/rm works" {