Add script to make working with duplicity easier
diff --git a/backupninja/client.sls b/backupninja/client.sls
index 0c757c4..8ae8711 100644
--- a/backupninja/client.sls
+++ b/backupninja/client.sls
@@ -77,6 +77,17 @@
   pkg.installed:
   - names:
     - duplicity
+
+duplicity_salt:
+  file.managed:
+  - name: /usr/local/sbin/duplicity_salt.sh
+  - source: salt://backupninja/files/duplicity_salt.sh
+  - template: jinja
+  - mode: 700
+  - user: root
+  - group: root
+  - require:
+    - pkg: backupninja_packages
 {%- endif %}
 
 {%- if client.target.engine in ["rdiff",] %}
diff --git a/backupninja/files/duplicity_salt.sh b/backupninja/files/duplicity_salt.sh
new file mode 100644
index 0000000..f32f270
--- /dev/null
+++ b/backupninja/files/duplicity_salt.sh
@@ -0,0 +1,64 @@
+{%- from "backupninja/map.jinja" import client, service_grains with context -%}
+#!/bin/bash
+
+DUPLICITY_ARGS="--no-encryption --progress --ssl-cacert-file={{ client.cacert_file }}"
+BACKUP_URL="{{ client.target.url }}"
+
+while getopts :f:d:v: opt; do
+    case "$opt" in
+        "f") FILE="${OPTARG}" ;;
+        "d") DEST="${OPTARG}" ;;
+        "v") set -x ;;
+        "?") echo "Unknown option $opt"; exit 1 ;;
+        ":") echo "No argument value for $opt"; exit 1 ;;
+    esac
+done
+shift $((OPTIND-1))
+
+action_prepare() {
+    trap action_cleanup INT TERM EXIT
+    {%- if client.target.auth.gss is defined %}
+    kinit -kt {{ client.target.auth.gss.get("keytab", "/etc/krb5.keytab") }} {{ client.target.auth.gss.get("principal", "host/$(hostname -f)") }}
+    {%- else %}
+    return 0
+    {%- endif %}
+}
+
+action_cleanup() {
+    trap true INT TERM EXIT
+    {%- if client.target.auth.gss is defined %}
+    kdestroy || true
+    {%- else %}
+    return 0
+    {%- endif %}
+}
+
+restore() {
+    RESTORE_ARGS=""
+    [ ! -z "$FILE" ] && RESTORE_ARGS="${RESTORE_ARGS} --file-to-restore=${FILE}"
+    duplicity ${DUPLICITY_ARGS} restore ${BACKUP_URL} "${DEST}" ${RESTORE_ARGS}
+}
+
+status() {
+    duplicity ${DUPLICITY_ARGS} collection-status ${BACKUP_URL}
+}
+
+list_files() {
+    duplicity ${DUPLICITY_ARGS} list-current-files ${BACKUP_URL}
+}
+
+usage() {
+    echo "Usage: $0 [restore|list-files|status]"
+    echo "  restore    - restore files from backup"
+    echo "               Usage: $0 restore -f [file_to_restore] -d [destination]"
+    echo "  list-files - list last backup files"
+    echo "  status     - show collection status"
+    exit 1
+}
+
+case $1 in
+    restore) action_prepare && restore ;;
+    status) action_prepare && status ;;
+    list-files) action_prepare && list_files ;;
+    *) usage ;;
+esac