Merge "New Aptly scripts"
diff --git a/aptly/files/aptly_mirror_update.sh b/aptly/files/aptly_mirror_update.sh
index e61e7a4..3deb8ac 100755
--- a/aptly/files/aptly_mirror_update.sh
+++ b/aptly/files/aptly_mirror_update.sh
@@ -1,71 +1,90 @@
 #!/bin/bash
-
+try=0
+retval=666
 SCRIPT=$(basename $0)
 MAXTRIES=3
 VERBOSE=0
 SNAPSHOT=0
+MIRROR=""
 
 log_info() {
-	logger -p user.info -t ${SCRIPT} "$*"
-	[ $VERBOSE -eq 1 ] && echo "[INFO] $*"
+    logger -p user.info -t ${SCRIPT} "$*"
+    [ $VERBOSE -eq 1 ] && echo "[INFO] $*"
 }
 
 log_error() {
-	logger -p user.error -t ${SCRIPT} "$*"
-	echo "[ERROR] $*" >&2
+    logger -p user.error -t ${SCRIPT} "$*"
+    echo "[ERROR] $*" >&2
 }
 
-if [[ "$*" == *--verbose* || "$*" == *-v* ]]; then
-	VERBOSE=1
-fi
+update_mirror() {
+    if [[ "$1" == "" ]]; then
+        log_error "Mirror has to be specified."
+        exit 3
+    fi
+    while [[ $retval -ne 0 && $try -lt $MAXTRIES ]]; do
+        log_info "Starting update of mirror ${1}"
+        if [[ $VERBOSE -eq 0 ]]; then
+            out=$(aptly mirror update -force=true ${1} >/dev/null 2>&1)
+        else
+            aptly mirror update -force=true ${1}
+        fi
 
-if [[ "$*" == *--snapshot* || "$*" == *-s* ]]; then
-	SNAPSHOT=1
-fi
+        retval=$?
 
-MIRRORS=$(aptly mirror list --raw 2>&1)
-if [[ $? -ne 0 ]]; then
-	log_error "$MIRRORS"
-	exit 1
-fi
+        if [[ $retval -ne 0 ]]; then
+            try=$[ $try + 1 ]
+            log_error "Failed to update mirror ${1}, try=${try}"
+            [ ! -z "$out" ] && log_error "${out}"
+        else
+            log_info "Synced mirror ${1}"
+            if [[ $SNAPSHOT -eq 1 ]]; then
+                snapshot_name="${1}-$(date +%s)"
+                if [[ $VERBOSE -eq 0 ]]; then
+                    out=$(aptly snapshot create ${snapshot_name} from mirror ${1} >/dev/null 2>&1)
+                else
+                    aptly snapshot create ${snapshot_name} from mirror ${1}
+                fi
 
-for mirror in $MIRRORS; do
-	try=0
-	retval=666
+                retval=$?
+                if [[ $retval -ne 0 ]]; then
+                    log_error "Failed to create snapshot ${snapshot_name} from mirror ${1}"
+                    [ ! -z "$out" ] && log_error "$out"
+                else
+                    log_info "Created snapshot ${snapshot_name} from mirror ${1}"
+                fi
+            fi
+            break
+        fi
+    done
+    try=0
+    retval=666
+}
 
-	while [[ $retval -ne 0 && $try -lt $MAXTRIES ]]; do
-		log_info "Starting update of mirror ${mirror}"
-		if [[ $VERBOSE -eq 0 ]]; then
-			out=$(aptly mirror update -force=true ${mirror} >/dev/null 2>&1)
-		else
-			aptly mirror update -force=true ${mirror}
-		fi
-
-		retval=$?
-
-		if [[ $retval -ne 0 ]]; then
-			try=$[ $try + 1 ]
-			log_error "Failed to update mirror ${mirror}, try=${try}"
-			[ ! -z "$out" ] && log_error "${out}"
-		else
-			log_info "Synced mirror ${mirror}"
-			if [[ $SNAPSHOT -eq 1 ]]; then
-				snapshot_name="${mirror}-$(date +%s)"
-				if [[ $VERBOSE -eq 0 ]]; then
-					out=$(aptly snapshot create ${snapshot_name} from mirror ${mirror} >/dev/null 2>&1)
-				else
-					aptly snapshot create ${snapshot_name} from mirror ${mirror}
-				fi
-
-				retval=$?
-				if [[ $retval -ne 0 ]]; then
-					log_error "Failed to create snapshot ${snapshot_name} from mirror ${mirror}"
-					[ ! -z "$out" ] && log_error "$out"
-				else
-					log_info "Created snapshot ${snapshot_name} from mirror ${mirror}"
-				fi
-			fi
-			break
-		fi
-	done
+while getopts "m:s?v?"  option
+do
+ case "${option}"
+ in
+ m|\?) MIRROR=${OPTARG};;
+ s|\?) SNAPSHOT=1;;
+ v|\?) VERBOSE=1;;
+ esac
 done
+
+if [[ "$MIRROR" != "" ]]; then
+    MIRROR_DETAIL=$(aptly mirror show ${MIRROR})
+    if [[ $? -ne 0 ]]; then
+        log_error "$MIRROR_DETAIL"
+        exit 1
+    fi
+    update_mirror "${MIRROR}"
+else
+    MIRRORS=$(aptly mirror list --raw 2>&1)
+    if [[ $? -ne 0 ]]; then
+        log_error "$MIRRORS"
+        exit 1
+    fi
+    for mirror in $MIRRORS; do
+        update_mirror "${mirror}"
+    done
+fi
diff --git a/aptly/files/aptly_publish_update.sh b/aptly/files/aptly_publish_update.sh
new file mode 100644
index 0000000..cbc8ca5
--- /dev/null
+++ b/aptly/files/aptly_publish_update.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+CLEANUP=0
+VERBOSE=0
+START_API=0
+RECREATE=0
+FORCE_OVERWRITE=0
+PUBLISHER_OPTIONS=""
+
+log_info() {
+    logger -p user.info -t ${SCRIPT} "$*"
+    [ $VERBOSE -eq 1 ] && echo "[INFO] $*"
+}
+
+log_error() {
+    logger -p user.error -t ${SCRIPT} "$*"
+    echo "[ERROR] $*" >&2
+}
+
+at_exit() {
+    pgrep -f "aptly api serve" | xargs kill -15
+}
+trap at_exit EXIT
+
+while getopts "a?c?f?r?v?"  option
+do
+ case "${option}"
+ in
+ a|\?) START_API=1;;
+ c|\?) CLEANUP=1;;
+ f|\?) FORCE_OVERWRITE=1;;
+ r|\?) RECREATE=1;;
+ v|\?) VERBOSE=1;;
+ esac
+done
+
+if [[ $START_API -eq 1 ]]; then
+    nohup aptly api serve --no-lock > /dev/null 2>&1 </dev/null &
+fi
+if [[ $RECREATE -eq 1 ]]; then
+    PUBLISHER_OPTIONS+=" --recreate"
+fi
+if [[ $FORCE_OVERWRITE -eq 1 ]]; then
+     PUBLISHER_OPTIONS+=" --force-overwrite"
+fi
+
+aptly-publisher --timeout=1200 publish -v -c /etc/aptly-publisher.yaml --url http://127.0.0.1:8080 --architectures amd64 $PUBLISHER_OPTIONS
+
+if [[ $? -ne 0 ]]; then
+    echo "Aptly Publisher failed."
+    exit 1
+fi
+
+if [[ $CLEANUP -eq 1 ]]; then
+    SNAPSHOT_LIST="$(aptly snapshot list --raw)"
+    if [[ "$SNAPSHOT_LIST" != "" ]]; then
+        log_info "Deleting unpublished snapshots"
+        echo $SNAPSHOT_LIST | grep -E '*' | xargs -n 1 aptly snapshot drop
+    fi
+    log_info "Cleaning Aptly DB"
+    aptly db cleanup
+fi
+exit 0
\ No newline at end of file
diff --git a/aptly/publisher.sls b/aptly/publisher.sls
index 0ddb9ee..21f32c2 100644
--- a/aptly/publisher.sls
+++ b/aptly/publisher.sls
@@ -51,6 +51,14 @@
 
 {%- endif %}
 
+aptly_publish_script:
+  file.managed:
+  - name: /usr/local/bin/aptly_publish_update.sh
+  - source: salt://aptly/files/aptly_publish_update.sh
+  - user: root
+  - group: root
+  - mode: 755
+
 publisher_yaml:
   file.managed:
   - name: /etc/aptly-publisher.yaml