diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-10 20:18:58 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-10 20:18:58 +0200 |
commit | d0071b9d4ad1c595965cbce982ba9edee5f4176a (patch) | |
tree | 32e384bbeb551be726ec0716113b87ec1fe4c917 | |
parent | 343dd6960cee4c6533e9e8dbfa544cafb5b672b4 (diff) | |
download | acf2-d0071b9d4ad1c595965cbce982ba9edee5f4176a.tar.bz2 acf2-d0071b9d4ad1c595965cbce982ba9edee5f4176a.tar.xz |
development shell
-rwxr-xr-x | dev-shell | 150 | ||||
-rwxr-xr-x | install-deps.sh | 8 |
2 files changed, 156 insertions, 2 deletions
diff --git a/dev-shell b/dev-shell new file mode 100755 index 0000000..addbae7 --- /dev/null +++ b/dev-shell @@ -0,0 +1,150 @@ +#!/bin/bash + +# Copyright (c) 2012-2013 Kaarle Ritvanen +# See LICENSE file for license details + +function _acf_req { + local url=$ACF_URL$1 + shift + curl -s \ + ${ACF_AUTH_TOKEN:+-H "X-ACF-Auth-Token: $ACF_AUTH_TOKEN"} \ + ${ACF_TXN_ID:+-H "X-ACF-Transaction-ID: $ACF_TXN_ID"} \ + "$@" $url + local code=$? + echo + return $code +} + +function _acf_start_req { + local url=$1 + local hdr=X-ACF-$2 + local var=ACF_$3 + shift 3 + + eval "export $var=\$(_acf_req \"\$url\" \"\$@\" \ + -D /proc/self/fd/1 -o /proc/self/fd/3 | \ + sed 's/^$hdr: \\(.\\+\\)'\$'\\r''\$/\\1/;ta;d;:a;q')" + [ "${!var}" ] || exit + + bash --rcfile "$ACF_QD_CLI" && _acf_req $url -X DELETE + + eval $var= +} + +if [ "$ACF_AUTH_TOKEN" ]; then + + if [ "$ACF_TXN_ID" ]; then + cat >&2 <<EOF +Transaction $ACF_TXN_ID started +Type 'commit' to commit, 'exit' to abort + +EOF + else + cat >&2 <<EOF +Available commands: + Fetch object: get <path> + Create/update object: put <path> <JSON content> + Delete object: delete <path> + Start transaction: start + +Example: put /awall/zone/internet '{"iface": ["eth0"]}' + +EOF + fi + + PS1="$ACF_USER@acf2-dev-shell${ACF_TXN_ID:+($ACF_TXN_ID)}> " + + function start { + if [ "$ACF_TXN_ID" ]; then + echo "Nested transactions not yet supported" >&2 + return 1 + else + _acf_start_req / Transaction-ID TXN_ID -X POST + fi + } + + function _acf_obj_req { + local path=/config$1 + shift + _acf_req "$path" "$@" + } + + function get { + _acf_obj_req "$1" + } + + function put { + _acf_obj_req "$1" -d "$2" -X PUT + } + + function delete { + _acf_obj_req -X DELETE + } + + function commit { + if [ "$ACF_TXN_ID" ]; then + if _acf_req / -X POST; then + echo Committed >&2 + exit 1 + fi + else + echo "No transaction started" >&2 + fi + return 1 + } + +else + cat >&2 <<EOF +Development shell for ACF2 +Copyright (c) 2012-2013 Kaarle Ritvanen + +EOF + + exec 3>&1 + export ACF_QD_CLI=$0 + + export ACF_URL=http://localhost + export ACF_USER=`whoami` + PASSWORD= + + function usage { + echo "Usage: $0 [-H <server_url>] [-u <username>] [-p <password>]" >&2 + exit $1 + } + + ARGS=$(getopt -o hH:p:u: -- "$@") + [ $? -gt 0 ] && usage 1 + eval set -- $ARGS + + while :; do + case $1 in + -h) + usage 0 + ;; + -H) + shift + ACF_URL=$1 + ;; + -p) + shift + PASSWORD=$1 + ;; + -u) + shift + ACF_USER=$1 + ;; + --) + break + esac + shift + done + + if [ -z "$PASSWORD" ]; then + echo -n "Password: " >&2 + read PASSWORD + echo >&2 + fi + + _acf_start_req /login Auth-Token AUTH_TOKEN \ + -d "{\"username\": \"$ACF_USER\", \"password\": \"$PASSWORD\"}" +fi diff --git a/install-deps.sh b/install-deps.sh index 7a1a708..dcea022 100755 --- a/install-deps.sh +++ b/install-deps.sh @@ -1,6 +1,10 @@ #!/bin/sh -# Copyright (c) 2012 Kaarle Ritvanen +# Copyright (c) 2012-2013 Kaarle Ritvanen # See LICENSE file for license details -exec apk add lua-augeas lua-filesystem lua-json4 lua-stringy uwsgi uwsgi-lua +PACKAGES="lua-augeas lua-filesystem lua-json4 lua-stringy uwsgi uwsgi-lua" + +[ "$1" = -d ] && PACKAGES="$PACKAGES bash curl" + +exec apk add $PACKAGES |