summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdev-shell150
-rwxr-xr-xinstall-deps.sh8
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