diff options
Diffstat (limited to 'assets')
| -rw-r--r-- | assets/Makefile | 11 | ||||
| -rw-r--r-- | assets/README | 44 | ||||
| -rwxr-xr-x | assets/bin/asq | 2 | ||||
| -rwxr-xr-x | assets/bin/ass | 24 | ||||
| -rwxr-xr-x | assets/bin/check-truth | 11 | ||||
| -rwxr-xr-x | assets/bin/fast | 20 | ||||
| -rwxr-xr-x | assets/bin/truth2json | 37 | ||||
| -rwxr-xr-x | assets/hooks/pre-commit | 8 |
8 files changed, 157 insertions, 0 deletions
diff --git a/assets/Makefile b/assets/Makefile new file mode 100644 index 00000000..07efde82 --- /dev/null +++ b/assets/Makefile @@ -0,0 +1,11 @@ + +hooks := pre-commit +binaries := $(shell ls bin/) +.PHONY: all + +all: $(addprefix ../db/.git/hooks/,$(hooks)) $(addprefix ../bin/,$(binaries)) + +../bin/%: bin/% + cp $< $@ +../db/.git/hooks/%: hooks/% + cp $< $@ diff --git a/assets/README b/assets/README new file mode 100644 index 00000000..7f90bfbf --- /dev/null +++ b/assets/README @@ -0,0 +1,44 @@ +# Asset tools for krebs + +## Prereqs +Check out the current krebs-asset repo into //db + + git checkout root@db-host:/krebs.db.git db + +in //db/ is an append-only file known as 'truth'. it contains the assets and the history of these. +Every commit is atomic, every line needs to be committed after being produced. + +## Usage +### ass +bin/ass has the power to add entries to the //db/truth file in the correct manner. It has two modes, create mode and set mode. +Create mode produces new keys in the database, these database entries are unique. +Set mode can set attributes to an entry in the database + +Example: + ass create bob + ass set bob type + ass create bob-pc + ass set bob-pc owner bob + ass set bob-pc location bob\'s-home + +### asq +asq is a tool to query the truth for facts. This is currently only a placeholder + +### FAST +fast is a wrapper around the core ass. It should be used for adding lots and lots of new entries to the truth. It evaluates Variables from your environment. + +Example: + export ASS_LOCATION=bob\'s-home + export ASS_OWNER=bob + fast c logitech-sidewinder-gamepad + fast c arduino-uno + fast s amount 3 + +fast will then actually generate the following: + ass create logitech-sidewinder-gamepad + ass set logitech-sidewinder-gamepad owner bob + ass set logitech-sidewinder-gamepad location bob\'s-home + ass create arduino-uno + ass set arduino-uno owner bob + ass set arduino-uno location bob\'s-home + ass set arduino-uno amount 3 diff --git a/assets/bin/asq b/assets/bin/asq new file mode 100755 index 00000000..0204e05b --- /dev/null +++ b/assets/bin/asq @@ -0,0 +1,2 @@ +#!/bin/something +# placeholder to asq the truth for facts diff --git a/assets/bin/ass b/assets/bin/ass new file mode 100755 index 00000000..5a4dade4 --- /dev/null +++ b/assets/bin/ass @@ -0,0 +1,24 @@ +#!/bin/sh + +set -euf + +HERE=$(dirname $(readlink -f $0)) +DB="$HERE/../../db" +JOURNAL="$DB/truth" +(cd $DB && git pull >/dev/null && echo "pulled new version") + +METHOD="$1"; shift + +case $METHOD in +"create") + echo "`date --utc --rfc-3339=ns` create $1" | $HERE/check-truth | tee -a $JOURNAL +;; +"set") + echo "`date --utc --rfc-3339=ns` set $1 $2 $3" | $HERE/check-truth | tee -a $JOURNAL +;; +*) + echo "you are made of stupid!" + exit 23 +;; +esac +(cd $DB && git commit -a -m bump >/dev/null && git push 1>&2 2>/dev/null && echo "updates pushed")& diff --git a/assets/bin/check-truth b/assets/bin/check-truth new file mode 100755 index 00000000..064a7d97 --- /dev/null +++ b/assets/bin/check-truth @@ -0,0 +1,11 @@ +#!/bin/sh +set -euf +HERE=$(dirname $(readlink -f $0)) +DB="$HERE/../../db/truth" +read LINE +if (cat $DB;echo $LINE) | $HERE/truth2json - 1>/dev/null ;then + echo "success" 1>&2 + echo "$LINE" +else + echo "you fail" 1>&2 +fi diff --git a/assets/bin/fast b/assets/bin/fast new file mode 100755 index 00000000..41725d0b --- /dev/null +++ b/assets/bin/fast @@ -0,0 +1,20 @@ +#!/bin/bash +set -xeuf +cd $(dirname $(readlink -f $0)) + +if [ "$1" == "c" ];then + ./ass create "$2" && export ASS_CREATED="$2" + for i in `env | grep -v '^ASS_CREATED=' | grep "^ASS" | cut -d '=' -f 1`;do + e=`echo $i | cut -d '_' -f 2 | tr '[A-Z]' '[a-z]'` + eval con=\$$i + $0 s "$e" "$con" + done +else if [ "$1" == "s" ] +then + ./ass set "${ASS_CREATED}" "${2}" "${3}" + else + echo "you are made of stupid!" + cat $0 + exit 23 + fi +fi diff --git a/assets/bin/truth2json b/assets/bin/truth2json new file mode 100755 index 00000000..f85445b4 --- /dev/null +++ b/assets/bin/truth2json @@ -0,0 +1,37 @@ +#!/usr/bin/python + +import sys + +try: + db=sys.argv[1] +except: + db="../../db/truth" + +ret = {} + + +if db is "-": + sys.stderr.write("Using stdin\n") + f = sys.stdin +else: + sys.stderr.write("Using journal '%s'\n" % db) + f = open(db) + +for line in f: + lsplit = line.split() + date = ' '.join(lsplit[0:2]) + cmd = lsplit[2] + target = lsplit[3] + if cmd == "create": + assert target not in ret, "Target '%s' already created!" %target + ret[target] = {} + elif cmd == "set": + key = lsplit[4] + value = ' '.join(lsplit[5:]) + assert target in ret, "target '%s' not set yet!" % target + ret[target][key] = value + else: + raise AssertionError,"unknown command '%s'!" + +import json +print json.dumps(ret,sort_keys=True,indent=4) diff --git a/assets/hooks/pre-commit b/assets/hooks/pre-commit new file mode 100755 index 00000000..6ad1ca2a --- /dev/null +++ b/assets/hooks/pre-commit @@ -0,0 +1,8 @@ +#!/bin/sh +set -euf +if which truth2json;then + truth2json >/dev/null && echo "db verified" +else + echo "cannot verify as truth2json is not installed" +fi + |
